【问题标题】:How to set the camera light on torch in Tokbox?如何在 Tokbox 中设置手电筒上的相机灯?
【发布时间】:2014-11-30 22:17:13
【问题描述】:

我将 TokBox 用于 android 项目。我需要添加一个按钮,可以将手电筒模式打开。

Tokbox Publisher 对象已经提供了一个swapCamera() 方法,可以在设备的所有可用摄像头之间切换。但我找不到任何 API 来更改当前所选相机的闪光灯模式。

我尝试自己获取android.hardware.Camera 的实例来手动更改它,但它不起作用,因为我得到了 "java.lang.RuntimeException: Fail to connect to camera service" 异常.这是因为Camera对象正在被Tokbox使用,没有释放。

我也无法访问 Tokbox 正在使用的 Camera 实例。自 android API 级别 21 起,它甚至已被弃用。

谁能建议改变相机参数的方法?我可以访问正在预览视频的View

【问题讨论】:

    标签: android camera opentok flashlight tokbox


    【解决方案1】:

    我需要停止直播才能启动相机应用来拍照。我找到了释放相机并附加它的代码。也许你可以用这段代码释放相机,打开灯,然后重新安装相机

    以下代码释放相机:

    public void ReleaseCamera()
        {
            if (_myPub != null) {
                _myPub.PublishVideo = false;
    
                BaseVideoCapturer bvc = _myPub.Capturer;
                if (bvc != null) {
                    bvc.StopCapture ();
                    bvc.Destroy ();
                }
            }
        }
    

    这段代码再次附加了摄像头:

    public void AttachCamera()
        {
            if (_myPub != null) {
                BaseVideoCapturer bvc = _myPub.Capturer;
                if (bvc != null) {
                    if (bvc.IsCaptureStarted == false) {
                        bvc.Init ();
                        bvc.StartCapture ();
                        _myPub.PublishVideo = true;
                    }           
                }
            }
        }
    

    【讨论】:

    • 不,它没有帮助。当您松开闪光灯时,闪光灯将自动关闭。
    • 这里的_myPub是什么??
    【解决方案2】:

    手电筒仅适用于后置摄像头,因此如果您使用前置摄像头发布视频,则会冻结 tokbox 视频。

    if(publisher.cameraPosition == .back){
    
            if let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo), device.hasTorch {
                do {
                    try device.lockForConfiguration()
                    let torchOn = !device.isTorchActive
                    try device.setTorchModeOnWithLevel(1.0)
                    device.torchMode = torchOn ? .on : .off
                    device.unlockForConfiguration()
                } catch {
                    print("error")
                }
            }
        }
    

    【讨论】:

    • 我可以确认(在 iPhone 上)使用 Xamarin Essentials 设置灯泡,例如Xamarin.Essentials.Flashlight.TurnOnAsync()。是否冻结 TokBox 的前置摄像头视频。不知道为什么会这样。只要你把灯关掉,流就会继续。不过问题是关于 Android 的。
    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多