在android webrtc中切换摄像头(后/前)

时间:2017-04-17 10:12:18

标签: android camera video-streaming webrtc libjingle

我已经将libjingle库用于webrtc android应用程序。我已经成功实现了双向通信的音频视频流。

直到现在我才使用前置摄像头进行视频流传输,但现在我想为用户提供选择前置或后置摄像头进行视频流的选项

我如何存档?我不知道这个。

我已经尝试过VideocaptureAndroid切换摄像头方法但不能正常工作。

如果有人知道然后帮我解决这个问题吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

您需要使用相同的videoCapturer对象,该对象是在创建初始MediaStream时创建的。

CameraVideoCapturer cameraVideoCapturer = (CameraVideoCapturer) videoCapturer;
cameraVideoCapturer.switchCamera(null);

AppRTC Reference

答案 1 :(得分:0)

使用此版本:org.webrtc:google-webrtc:1.0.22672

通过这种方法创建VideoCapturer:

VideoCapturer videoCaptor = createCameraCaptor(new Camera1Enumerator(false));

诀窍在于isBackFacing(...)/ isFrontFacing(...)

private VideoCapturer createCameraCaptor(CameraEnumerator enumerator) {
    final String[] deviceNames = enumerator.getDeviceNames();

    // First, try to find back facing camera
    Logging.d(TAG, "Looking for back facing cameras.");
    for (String deviceName : deviceNames) {
        if (enumerator.isBackFacing(deviceName)) {
            Logging.d(TAG, "Creating back facing camera captor.");
            VideoCapturer videoCapturer = enumerator.createCapturer(deviceName, null);

            if (videoCapturer != null) {
                return videoCapturer;
            }
        }
    }

    // back facing camera not found, try something else
    Logging.d(TAG, "Looking for other cameras.");
    for (String deviceName : deviceNames) {
        if (!enumerator.isBackFacing(deviceName)) {
            Logging.d(TAG, "Creating other camera captor.");
            VideoCapturer videoCapturer = enumerator.createCapturer(deviceName, null);

            if (videoCapturer != null) {
                return videoCapturer;
            }
        }
    }

    return null;
}

答案 2 :(得分:0)

这里是使用libjingle的示例。
如果要在前后摄像头之间切换,则需要获取要使用的设备的名称。可以使用VideoCapturerAndroid.getNameOfFrontFacingDevice()VideoCapturerAndroid.getNameOfRearFacingDevice()完成此操作,具体取决于您要使用前置摄像头还是后置摄像头。

这是一个简单的示例,说明如何使用io.pristine.libjingle:9127获取正确的VideoCapturer

private VideoCapturer getCameraCapturer(boolean useFrontCamera) {
    String deviceName = useFrontCamera ? VideoCapturerAndroid.getNameOfFrontFacingDevice() : VideoCapturerAndroid.getNameOfBackFacingDevice();
    return VideoCapturerAndroid.create(deviceName);
}

如果您使用的是其他版本的LibJingle或由于任何原因而无法使用,请通知我,我们将竭诚为您服务!

干杯