(
bridge: android::AndroidBridge,
metrics: Arc<crate::metrics::counters::Metrics>,
udid: String,
quality: android::AndroidH264StreamQuality,
)
| 1316 | |
| 1317 | impl AndroidWebRtcSource { |
| 1318 | pub(crate) async fn start( |
| 1319 | bridge: android::AndroidBridge, |
| 1320 | metrics: Arc<crate::metrics::counters::Metrics>, |
| 1321 | udid: String, |
| 1322 | quality: android::AndroidH264StreamQuality, |
| 1323 | ) -> Result<Self, AppError> { |
| 1324 | let (sender, _) = broadcast::channel(ANDROID_WEBRTC_FRAME_BROADCAST_CAPACITY); |
| 1325 | let (shutdown_tx, _) = broadcast::channel(1); |
| 1326 | let inner = Arc::new(AndroidWebRtcSourceInner { |
| 1327 | udid: udid.clone(), |
| 1328 | shutdown_tx, |
| 1329 | sender, |
| 1330 | latest_keyframe: RwLock::new(None), |
| 1331 | frame_sequence: AtomicU64::new(0), |
| 1332 | quality: Mutex::new(quality), |
| 1333 | encoder_handle: AtomicUsize::new(0), |
| 1334 | callback_user_data: AtomicUsize::new(0), |
| 1335 | metrics, |
| 1336 | }); |
| 1337 | |
| 1338 | let source = Self { inner }; |
| 1339 | source.inner.create_native_encoder()?; |
| 1340 | spawn_android_shared_video_encoder(bridge, &source.inner); |
| 1341 | Ok(source) |
| 1342 | } |
| 1343 | |
| 1344 | pub(crate) fn subscribe(&self) -> broadcast::Receiver<SharedFrame> { |
| 1345 | self.inner.sender.subscribe() |
nothing calls this directly
no test coverage detected