TSINGSEE青犀视频webrtc相关内容编译如何在c++端编码出H264?

Posted TSINGSEE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TSINGSEE青犀视频webrtc相关内容编译如何在c++端编码出H264?相关的知识,希望对你有一定的参考价值。

在Webrtc的编码中有三种编码方式:VP8、VP9和H264编码,这三种编码大部分浏览器都支持,其中VP8是目前为止浏览器内部使用最多的一个编码方式。浏览器使用的推流编码是VP8,所以传输的是VP8,想要在c++端编码出H264,那要怎么做呢?在编译Webrtc的相关产品中,我们就遇到了此类问题,所以和大家分享一下。

webrtcclient.png

webrtc中有一个H264编码文件,在modules/video_coding/codecs/h264/h264_encoder_impl.h。

进入该文件分析,有三个函数最为主要,这三个函数是:初始化编码信息、注册编码完成的回调虚函数和开始编码,OnFrame拿到视频帧数据,想要拿到H264数据,就需要这的三个函数进行转换。

81.png

在InitEncode函数要进行各种初始化当中,这个初始化函数就比较关键,关系到后面的编码成H264是否成功。截取部分InitEncode内部判断的条件和设置参数,具体可以找到改文件进行查看逻辑:

82.png

83.png

84.png

所以在(h264_encoder_impl.cc)内部得知,写入的参数有:帧的宽高、帧率、比特率、编码类型(肯定是H264)webrtc::kVideoCodecH264、关键帧间隔等等。

这样编码成H264的问题就可以解决了,运行下程序看下是否是H264的数据。

85.png

上面的数据内存是H264数据,所以编码成功。在使用ffmpeg也可以播放,ffmpeg指令:ffplay -i xxxx.h264。大家可以自行尝试下。

以上是关于TSINGSEE青犀视频webrtc相关内容编译如何在c++端编码出H264?的主要内容,如果未能解决你的问题,请参考以下文章

TSINGSEE青犀视频通过Webrtc编译android版本找不到gzip模块如何处理?

TSINGSEE青犀视频编译webrtc协议为什么需要turn服务器?

TSINGSEE青犀视频开发单通道 Go WebRTC服务端拉流接口无响应导致程序堵塞如何处理?

TSINGSEE青犀视频WebRTC播放Turn服务支持TCP连接功能

TSINGSEE青犀视频开发webrtc项目如何实现Windows视频采集?

TSINGSEE青犀视频构建pion webrtc运行broadcast示例步骤