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

zab*_*mba 7 javascript android google-chrome webrtc

三星Galaxy S2 Android 6.0.1 + Chrome v55上,当我getUserMedia在页面加载时,会出现获取的视频轨道live.

在此输入图像描述

当我从我的相机中选择后置摄像头时,我会触发另一次我gUM的约束使用那个精确的后面cameraId,视频轨道是ended,我有一个黑色矩形而不是一个流.

在此输入图像描述

var constraints = {
    video: {
        deviceId: {
            exact: defaultVideoDeviceId
        }
    },
    audio: true
};
Run Code Online (Sandbox Code Playgroud)

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);
        });
}
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*oni 1

我也面临着类似的问题。

我的测试有点不同,因为我试图制作后置摄像头的 GUM,而我有一个使用前置摄像头的活跃媒体流 GUM。

我在多款 Android 设备上进行了测试,只有配备 MIUI beta 875 和 Android 8.1 的小米 MI Mix 2 可以使用。这可能是因为该 ROM 使用了新的camera2 android api,或者因为 Mi Mix 2 相机硬件允许同时使用后置和前置摄像头。

令人烦恼的是,有时,在某些设备上,GUM 不会失败,而是无限期挂起。

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

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

西蒙娜