4

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

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

我尝试让自己的实例android.hardware.Camera手动更改它,但它不起作用,因为我得到了“java.lang.RuntimeException:无法连接到相机服务”异常。这是因为Camera对象正在被 Tokbox 使用并且没有被释放。

我也找不到访问CameraTokbox 正在使用的实例的方法。自 android API 级别 21 起,它甚至已被弃用。

任何人都可以建议一种更改相机参数的方法吗?我可以访问View正在对其进行预览的视频。

4

2 回答 2

0

我需要停止流才能启动相机应用程序来拍照。我找到了释放相机并附加它的代码。也许您可以使用此代码释放相机,打开灯,然后重新连接相机

以下代码释放相机:

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;
                }           
            }
        }
    }
于 2014-12-04T14:25:24.720 回答
0

手电筒仅适用于后置摄像头,因此如果您使用前置摄像头发布视频,那么它将冻结 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")
            }
        }
    }
于 2018-03-23T07:30:48.967 回答