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。大家可以自行尝试下。

  • 相关阅读:
    [日常训练]FJ省夏令营day1
    [vijos1002][NOIP2005]过河
    [poj2446]Chessboard
    [bzoj1854][SCOI2010]游戏
    [模板]匈牙利算法
    [bzoj3670][2014湖北省队互测week2]似乎在梦中见过的样子
    笔记3-27
    笔记3-26
    笔记3-25
    Codeforces891C. Envy
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/14837915.html
Copyright © 2011-2022 走看看