zoukankan      html  css  js  c++  java
  • TSINGSEE青犀视频webrtc相关内容编译如何在c++端编码出H264?

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

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

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

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

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

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

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

  • 相关阅读:
    sql except 用法,找两个表中非共同拥有的
    ‘堆’出你的洪荒之力
    原来你是个这样的JVM
    变形词
    54题
    最大对称子数组
    java 线程之间通信以及notify与notifyAll区别。
    大型网站架构系列:消息队列
    剑指offer第10题
    & 和 && 区别
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/14837915.html
Copyright © 2011-2022 走看看