文章目录
-
- mediasoup H264 支持
- 安卓 webrtc 视频采集流程源码分析
- 安卓 mediasoup 为啥没有使用H264硬编解码
- mediasoup-client-android 中 VideoStreamEncoder 初始化
- webrtc 中 VideoStreamEncoder 初始化
- 解码器 H264Encoder 创建
- mediasoup H264Encoder 初始化
- webrtc H264Encoder 初始化
- webrtc H264Decoder初始化流程
- mediasoup 信令过程
- openh264 提供编解码相关函数
- webrtc 视频 H264 硬编码
- webrtc 视频流显示
本文首发地址 https://h89.cn/archives/250.html
最新更新地址 https://gitee.com/chenjim/chenjimblog
本文基于libmediasoupclient 3.2.0 和 webrtc branch-heads/4147(m84)
本文得熟悉相关基础,参考 文1 和 文2
mediasoup H264 支持
-
打开
rtc_use_h264
在webrtc.gni中可以看到如下,也就是安卓默认不支持 h264
rtc_use_h264 = proprietary_codecs && !is_android && !is_ios && !(is_win && !is_clang)
可以将此处改为true,也可以带上编译参数'rtc_use_h264=true,如下:
./tools_webrtc/android/build_aar.py --extra-gn-args 'rtc_use_h264=true' -
mediasoup-demo-android 的 forceH264
通过代码我们看到,这个参数只在UrlFactory.java中拼接地址使用
正常情况 如果 url 中 有forceH264=true, 就应该采用H264编码
如浏览器输入https://v3demo.mediasoup.org/?forceH264=true&roomId=123456输出的视频就是H264
(安卓默认显示黑屏,缺少H264解码器,另文 解决)
但是mediasoup-demo-android菜单勾选forceH264了还是VP8编码,算是个BUG …
安卓 webrtc 视频采集流程源码分析
webrtc针对视频采集对外主要提供的是VideoCapturer接口,实现类有ScreenCapturerAndroid、FileVideoCapturer和CameraCapturer,分别表示屏幕、文件、摄像头三种不同的视频来源,因为android系统先后提供了camera1.0和camera2.0接口,因此CameraCapturer又用Camera1Capturer和Camera2Capturer两个子类分别表示。
主要类图

视频采集和分发流程如下图

更多细节可以参考原文 webrtc源码分析之视频采集之一, 感谢 Jimmy2012
安卓 mediasoup 为啥没有使用H264硬编解码
- 安卓 mediasoup Java层 CreateMediaEngine 如下
mediasoup-demo-android\app\src\main\java\org\mediasoup\droid\lib\PeerConnectionUtils.java中
VideoEncoderFactory encoderFactory = new DefaultVideoEncoderFactory( mEglBase.getEglBaseContext(), true /* enableIntelVp8Encoder */, true);
VideoDecoderFactory decoderFactory = new DefaultVideoDecoderFactory(mEglBase.getEglBaseContext());
mPeerConnectionFactory = builder.setAudioDeviceModule(adm)
.setVideoEncoderFactory(encoderFactory)
.setVideoDecoderFactory(decoderFactory)
.createPeerConnectionFactory();
大致跟 AppRTCDemo PeerConnectionClient.java 相同,AppRTCDemo 支持H264软硬编解码,
其中 .createPeerConnectionFactory(); 相关流程如下
--> createPeerConnectionFactory()
--> JNI_PeerConnectionFactory_CreatePeerConnectionFactory(...)
(webrtc/src/sdk/android/src/jni/pc/peer_connection_factory.cc)
--> CreatePeerConnectionFactoryForJava(...) (webrtc/src/sdk/android/src/jni/pc/peer_co

本文详细分析了安卓环境下mediasoup和webrtc对于H264视频编码的支持流程,包括如何启用H264编码,视频采集流程,以及编码器和解码器的初始化。在mediasoup中,虽然安卓默认不支持H264,但可以通过修改编译参数启用。同时,文中探讨了为何mediasoup在安卓上未使用H264硬编解码,并给出了相关源码分析。对于webrtc,文章展示了VideoStreamEncoder的初始化和编码过程,以及如何创建和初始化H264Encoder和Decoder。此外,还介绍了如何通过修改代码支持更多的硬件编码器前缀来增强H264硬件编码的兼容性。
最低0.47元/天 解锁文章
990

被折叠的 条评论
为什么被折叠?



