美文网首页
FFmpeg-抽取视频中 h264 数据

FFmpeg-抽取视频中 h264 数据

作者: markfork | 来源:发表于2020-11-06 16:27 被阅读0次

抽取视频数据

  • 抽取视频数据需要掌握的基本概念
    • Start code

1.抽取视频数据的本质

本质: 多媒体中的视频数据是压缩(编码)后的Frame数据,压缩后的视频帧我们称之为 packet,简单起见我们将其称之为视频帧。抽取操作即抽取的是
视频帧序列。

2.抽取方案

方式1: 每一帧加上帧的length

读物第一帧的时候读取帧的长度,紧接着第二帧的长度,第二帧;第三帧的长度,第三帧;以此类推;

方式2: 每一帧前面加上关键字-称之为特征吗,start code,可以想像成栅栏,有点类似迭代器的概念

即遇到start code 代表当前帧开始,前面的帧结束。start code  是为了区分帧与帧之间的间隔。
start code 作用的直观感受,即当播放器播放h264数据时,是根据start code 将不同帧区分出来进行播放

3.某些基本概念

SPS/PPS (暂时不做介绍,可以去网上搜)

作用,解码的视频参数,入视频帧的宽,高(视频分辨率),fps(帧率),其他的参数都存放在SPS,PPS 中
需要说明的是,普通视频文件只需要有一个SPS/PPS 就可以了,获取到SPS & PPS后,每次解码都获取到相同的分辨率,相同帧率

在个别异常情况,如直播流视频帧的分辨率发生变化(切换分辨率),实际中不止存放一份SPS/PPS,当分辨率发生变化时,都需要update SPS/PPS,当解码器拿到变化的
SPS/PPS ,就可以重新解码了。

如何解决上述问题,如果 SPS/PPS 丢失了怎么办? 对应解决方案:在每个关键帧的前面都会增加SPS/PPS数据包,当数据包丢失之后,后面再接受到新的关键
帧包,可以正常解码下去,否则产生花屏。

如果每次都传输 SPS/PPS 是否会增加网络负担;SPS/PPS 一般在 1-19 个字节内,网络无负担 

另外每个关键帧前面需要有 SPS/PPS 数据,非关键帧不需要有 SPS/PPS,  关键帧有了这个数据 编解码器才知道视频参数有没有发生变化,有变化,
编解码器需要重新初始化,没有变化,则不需要做。

ffmpeg 如何获取 SPS/PPS

通过codec-extradata 获取,SPS/PPS 不与数据包 packet 存储在一起,而是放在编码器的扩展数据中存储 codec-extradata 

4.实战抽取多媒体视频文件中的h264数据

   extr_video_gop 代码中对应每一行都有对应注释,可以仔细过一遍

5.编译 & 运行

1. 编译 
   clang -g -o extr_video_gop extr_video_gop.c `pkg-config --libs libavutil libavformat`

2. 运行
   ./extr_video_gop data/left.mp4
   
3. 待完成(存储至文件的操作后续更改为网络传输数据至后端业务服务器)

6.运行效果

6.1 采用python + ffmpeg cmd 实现 的获取gop 的操作结果如下图所示:

python + ffmpeg cmd 效果

6.2 c代码实现 ffmpeg 获取gop h264 效果代码

c代码实现 ffmpeg 获取gop h264数据

可以看到效果是对齐的。

相关文章

  • FFmpeg-抽取视频中 h264 数据

    抽取视频数据 抽取视频数据需要掌握的基本概念Start code 1.抽取视频数据的本质 本质: 多媒体中的视频数...

  • FFmpeg抽取视频h264数据

    从mp4文件中抽取h264数据步骤如下:1.打开mp4文件并创建一个空文件用于存储H264数据2.提取一路视频流资...

  • FFmpeg学习

    FFmpeg总结 1:mp4文件抽取H264文件 2:H264文件抽取YUV文件 抽取出yuv数据主要包含3步 1...

  • 第4讲-FFmepg-视频解码

    内容一:FFmpeg-命令行补充? 内容二:FFmpeg-视频解码? 第一点:确定音视频编解码流程学习? 第二点:...

  • ffmpeg视频的编码Encode---YUV编码为h264

    视频编码的过程就是将YUV的像素格式编码成H264的压缩格式 YUV:视频像素格式H264:视频压缩数据格式 流程...

  • 抽取视频数据

    start code 一帧一帧组成的 区别帧与帧 每一帧前面读取帧的长度 加入特征码 读取到特征码就知道前面一...

  • iOS视频开发(三):视频H264硬解码

    前言 上一篇《iOS视频开发(二):视频H264硬编码》我们已经学会了如何对视频数据进行H264编码并且了解了H2...

  • 视频格式

    视频:视频编码数据+音频编码数据 视频格式:视频封装格式(flv、mov、MP4) 视频编码格式:h264、h26...

  • 前嗅ForeSpider脚本教程:数据抽取脚本

    数据抽取脚本与数据过滤并列的脚本,它的作用是对抽取的数据进行过滤。数据处理脚本是数据抽取中的脚本。点击“数据抽取”...

  • Android音视频编码(二)

    视频编码 说明:使用MediaCodec对由Camera采集的数据进行H264编码 1.采集视频数据参数设置:帧率...

网友评论

      本文标题:FFmpeg-抽取视频中 h264 数据

      本文链接:https://www.haomeiwen.com/subject/xgbltqtx.html