用 WebRTC 创建相机预览,不到 50 行核心代码就可以轻松搞定了。
1、WebRTC 依赖版本
直接使用官方给的版本就好了,不需要再去额外编译。
implementation 'org.webrtc:google-webrtc:1.0.30039'
后面都会使用该版本做测试的。
2、相机权限申请
WebRTC 虽说功能强大,代码简洁,但是并没有封装一个应用权限申请的接口,这需要自己去操作了。
3、相机预览
有个段子是把大象放进冰箱有多少步骤,共三步,打开冰箱,塞进大象,关上冰箱。
用 WebRTC 创建相机预览和上面的段子步骤一样,打开相机,设置接收,开启预览。
至于中间的繁琐步骤,比如相机创建的内部实现,预览绘制的内部实现都不用去关心了,调用好接口,设置好参数就行。
3.1 创建相机实例
在 WebRTC 中相机实例统一实现了 VideoCapturer 接口,不管是 Camera1 还是 Camera2 。
public interface VideoCapturer {
void initialize(SurfaceTextureHelper var1, Context var2, CapturerObserver var3);
void startCapture(int var1, int var2, int var3);
void stopCapture() throws InterruptedException;
void changeCaptureFormat(int var1, int var2, int var3);
void dispose();
boolean isScreencast();
}
该接口也比较简单,只需要相机实例对外提供一些简单的预览能力就好。
创建相机实例的代码如下:
private fun createVideoCapture(): VideoCapturer? {
val enumerator = Camera1Enumerator(false)
val deviceNames = enumerator.deviceNames
for (deviceName in deviceNames) {
if (enumerator.isFrontFacing(deviceName)) {
val videoCapture = enumerator.createCapturer(deviceName, null)
if (videoCapture != null) {
return videoCapture
}
}
}
return null
}
Camera1Enumerator 是用来枚举设备上有多少摄