ffmpeg 手动添加 sps pps(处理内存泄露问题)
来源:互联网 发布:消息认证算法的简称 编辑:程序博客网 时间:2024/06/05 05:16
分离某些封装格式中的H.264
分离某些封装格式(例如MP4/FLV/MKV等)中的H.264的时候,需要首先写入SPS和PPS,否则会导致分离出来的数据没有SPS、PPS而无法播放。H.264码流的SPS和PPS信息存储在AVCodecContext结构体的extradata中。需要使用ffmpeg中名称为“h264_mp4toannexb”的bitstream filter处理。有两种处理方式:
(1)使用bitstream filter处理每个AVPacket(简单)
把每个AVPacket中的数据(data字段)经过bitstream filter“过滤”一遍。关键函数是av_bitstream_filter_filter()。示例代码如下。
上述代码中,把av_bitstream_filter_filter()的输入数据和输出数据(分别对应第4,5,6,7个参数)都设置成AVPacket的data字段就可以了。
需要注意的是bitstream filter需要初始化和销毁,分别通过函数av_bitstream_filter_init()和av_bitstream_filter_close()。
经过上述代码处理之后,AVPacket中的数据有如下变化:
*每个AVPacket的data添加了H.264的NALU的起始码{0,0,0,1}
*每个IDR帧数据前面添加了SPS和PPS
(2)手工添加SPS,PPS(稍微复杂)
将AVCodecContext的extradata数据经过bitstream filter处理之后得到SPS、PPS,拷贝至每个IDR帧之前。下面代码示例了写入SPS、PPS的过程。
然后修改AVPacket的data。把前4个字节改为起始码。示例代码如下所示。经过上述两步也可以得到可以播放的H.264码流,相对于第一种方法来说复杂一些。- ffmpeg 手动添加 sps pps(处理内存泄露问题)
- h264手动添加sps和pps到AVCodecContext->extradata
- FFmpeg 获取H264流中的sps pps
- FFmpeg 获取H264流中的sps pps
- SPS PPS
- ffmpeg 编码 apng 解决内存泄露问题
- live555组播H264及sps和pps的问题
- sps pps学习
- SPS,PPS语义
- h264 sps pps
- H264之SPS PPS
- h264 sps pps
- H264--NALU/SPS/PPS
- SPS,PPS语义
- h264 sps pps
- H264 pps sps作用
- VPS SPS PPS
- sps pps AudioSpecificConfig
- linux常用net命令
- SQL优化:建索引的原则
- virtualbox里面,给ubuntu设置共享文件夹
- Centos7 Lamp环境搭建
- ES6新属性笔记_0
- ffmpeg 手动添加 sps pps(处理内存泄露问题)
- 剑指offer之从尾到头打印链表
- 设计模式-工厂模式
- python+机器学习方法进行情感分析
- JavaScript 继承
- msp430F5438A 定时器
- 《IBM-PC汇编语言程序设计》(清华大学出版社)笔记(三)
- C++函数重载与重载原理:命名倾轧
- 喷水装置