gpt4 book ai didi

安卓 : How to turn on FLASHLIGHT using WEBRTC android io. pristine.libjingle:11139

转载 作者:行者123 更新时间:2023-11-29 19:02:10 29 4
gpt4 key购买 nike

伟大的开发者。我正在使用 io.pristine.libjingle:11139 的 webRTC 库进行视频通话。一切顺利,现在我只想打开手电筒,我研究了几乎所有与手电筒相关的问题,在那里我发现手电筒是相机的一个功能,所以要打开手电筒必须与 CAMERA 对象一起使用.现在我被困在这里是因为我正在使用这个库,它不允许我访问已经打开的相机对象。那么如何在不使用相机的情况下打开手电筒,因为相机已经被 webrtc 库使用了?是否有任何其他最新的库允许访问 libjingle for webrtc for android 的相机对象?

我需要帮助,这是一个真正的挑战。

问候,佛法

最佳答案

我今天遇到了这个问题,但在任何地方都找不到解决方案,所以我想分享我的解决方案,尽管在提出问题后已经很晚了。基本上有两个选项:修改源代码并自己编译 webrtc 库,或者更简单的解决方案 - 稍微覆盖库的功能。我不得不说,我使用的是直接来自 Google 存储库的最新预构建库,因此我的 libjingle 库可能有点不同。

implementation 'org.webrtc:google-webrtc:1.0.28262'

现在,到代码本身。创建一个包 org.webrtc 以便能够访问您需要实现或修改的包私有(private)类和接口(interface)。

首先是 interface CameraSession。此接口(interface)的实例处理对 android 相机的访问。因此,我创建了 class FlaslightCameraSession implements CameraSession,方法是从 class Camera1Session 中复制粘贴代码并添加一个函数来打开/关闭手电筒,如下所示。

    void setFlashlightActive(boolean isActive) {
Camera.Parameters params = camera.getParameters();

if (isActive) {
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
} else {
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
}

camera.setParameters(params);
}

下一步是修改用于获取相机的VideoFrameVideoCapturer。为此,我通过扩展 webrtc 的 class Camera1Capturer 并添加了简单的修改来控制手电筒,简单地创建了一个 class FlashlightCameraCapturer

    @Override
protected void createCameraSession(CameraSession.CreateSessionCallback createSessionCallback, CameraSession.Events events, Context applicationContext, SurfaceTextureHelper surfaceTextureHelper, String cameraName, int width, int height, int framerate) {
CameraSession.CreateSessionCallback myCallback = new CameraSession.CreateSessionCallback() {
@Override
public void onDone(CameraSession cameraSession) {
FlashlightCameraCapturer.this.cameraSession = (FlashlightCameraSession) cameraSession;
createSessionCallback.onDone(cameraSession);
}

@Override
public void onFailure(CameraSession.FailureType failureType, String s) {
createSessionCallback.onFailure(failureType, s);
}
};

FlashlightCameraSession.create(myCallback, events, captureToTexture, applicationContext, surfaceTextureHelper, Camera1Enumerator.getCameraIndex(cameraName), width, height, framerate);
}

public void turnOnFlashlight() {
cameraSession.setFlashlightActive(true);
}

public void turnOffFlashlight() {
cameraSession.setFlashlightActive(false);
}

最后一步是修改 CameraEnumerator。具体来说,您需要覆盖 createCapturer 函数来创建我们修改后的捕获器的实例。所以我扩展了 class Camera1Enumerator 来覆盖这个函数,如下所示。

    @Override
public CameraVideoCapturer createCapturer(String deviceName, CameraVideoCapturer.CameraEventsHandler eventsHandler) {
return new FlashlightCameraCapturer(deviceName, eventsHandler, true);
}

现在您可以简单地使用新修改的相机枚举器来获取可以控制手电筒的相机捕获器实例。

希望这有帮助:)

关于安卓 : How to turn on FLASHLIGHT using WEBRTC android io. pristine.libjingle:11139,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48598752/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com