WebRTC切换回前置摄像头,其中gum不在Android / Chrome上流式传输

三星Galaxy S2 Android 6.0.1 + Chrome v55上 ,当我在页面加载时获取用户媒体时,获取的video轨道显示为live

在此处输入图像描述

当我从我的相机中选择后置摄像头时,我再次触发我的gUM有限制使用那个精确面向后面的cameraId ,video轨道ended ,我有一个黑色矩形而不是一个流。

在此处输入图像描述

 var constraints = { video: { deviceId: { exact: defaultVideoDeviceId } }, audio: true }; 

gUM包装

 function gUM(constraints, callback) { console.debug("WebRTC constraints", constraints); // Stopping streaming before starting the new one if (window.streams.local) { window.streams.local.getTracks().forEach(function(track) { track.stop(); }); } navigator.mediaDevices.getUserMedia(constraints) .then(stream => { console.debug("New MediaStream > Tracks", stream.getTracks()); window.streams.local = stream; callback && callback(stream); }) .catch(err => { console.log("Raised error when capturing:", err); }); } 

如果我切换回前面,它会获取一个新的MediaStream并播放video。

我也面临着类似的问题。

我的测试有点不同,因为我正在尝试制作后置摄像头的GUM,而我正在使用前置摄像头激活媒体流GUM。

我测试了几个Android设备,只有小米MI Mix 2与MIUI beta 875与Android 8.1的作品。 这可能是因为rom使用新的camera2 android api,或者因为Mi Mix 2相机硬件允许同时使用后置摄像头和前置摄像头。

令人讨厌的是,有时候,在某些设备上,GUM不会失败,但会无限期地挂起。

也许在track.stop()方法调用之后监听MediaStreamTrack.onended事件,可以帮助理解资源何时完全空闲,以便您可以尝试使用不同约束的新GUM。

如果你发现了什么,请告诉我。

西蒙娜