我正在尝试在 WebRTC 的帮助下将屏幕捕获的视频发送到 mediasoup 。 WebRTC 库中有一个类:Android 屏幕捕捉器。
它可以工作,但在某些设备上的性能非常糟糕。特别是当我使用高清或更好的显示分辨率时。
在 stackoverflow 上我发现了一个建议 https://stackoverflow.com/questions/50914031/webrtc-cannot-record-screen打电话设置启用视频硬件加速(true) and setVideoHwAccelerationOptions()。但在较新版本的 WebRTC 库中方法已被删除 https://groups.google.com/d/msg/discuss-webrtc/SKSkOUHXB2A/uugaMVuJAgAJ .
这是我的代码:
// ...
PeerConnectionFactory.Builder builder = PeerConnectionFactory.builder();
builder.setOptions(null);
EglBase.Context eglContext = EglUtils.getRootEglBaseContext();
VideoEncoderFactory encoderFactory =
new DefaultVideoEncoderFactory(
eglContext, true /* enableIntelVp8Encoder */, true);
PeerConnectionFactory.InitializationOptions initializationOptions =
PeerConnectionFactory.InitializationOptions.builder(context)
// .setEnableVideoHwAcceleration(true) // <-- does not work any more
.createInitializationOptions();
PeerConnectionFactory.initialize(initializationOptions);
mPeerConnectionFactory =
builder
.setVideoEncoderFactory(encoderFactory)
.createPeerConnectionFactory();
我的问题是:如何使用较新的 WebRTC 库版本启用视频硬件加速以进行屏幕捕获。
这取决于您的设备以及您使用的 libwebrtc 版本。所以你可以检查webrtc源代码来了解HW是否支持。这意味着如果你的 libwebrtc 不在源代码中做一些工作,视频编码器的硬件加速将不受支持。 :P
因此,如果您的 libwebrtc 不支持它,那么即使您在应用程序级别的设置正确,也无法快速看到任何内容。
那么,我们来谈谈如何在libwebrtc中检查视频编码器的硬件加速。
检查这个源代码https://chromium.googlesource.com/external/webrtc/+/HEAD/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java https://chromium.googlesource.com/external/webrtc/+/HEAD/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java
可以在HardwareVideoEncoderFactory.java中搜索关键字:
“CurrentSdk 中是否支持硬件”
今天是 1 月 12 日,我截屏了代码。
从源代码来看,它们确实显示了清晰的信息。
顺便说一句,您还可以在 Google Play 中下载一些媒体编解码器信息应用程序来检查不同类型的 Android 手机的不同类型的编码器/解码器。那也会有帮助的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)