FFmpeg AVPacket和av_packet_unref函数剖析
2018-01-06 15:24
976 查看
描述
AVPacket保存一个NAL单元的解码前数据,该结构本身不直接包含数据,其有一个指向数据域的指针。传递给avcodec_send_packet函数的AVPacket结构体data中的数据前面是
00 00 00 01开头,说明是NALU格式的数据
数据简单如下:
00 00 00 01 61 e1 40 01 58 2b fb 22 ff 29 7b 3f 6f 67 2f 29 fa 25 53 68 78 46 b1
在调用avcodec_send_packet函数的时候打印错误如下:
I:2018-01-06 15:06:05 ms:887:nal_unit_type: 1, nal_ref_idc: 3
I:2018-01-06 15:06:05 ms:888:non-existing PPS 0 referenced
I:2018-01-06 15:06:05 ms:888:decode_slice_header error
I:2018-01-06 15:06:05 ms:888:no frame!
当数据如下,可以正确的解析出一帧图像
00 00 00 01 67 42 00 2a 96 35 40 f0 04 4f cb 37 01 01 01 40 00 01 c2 00 00 57 e4
01 00 00 00 01 68 ce 3c 80 00 00 00 01 06 e5 01 ef 80 00 00 03 00 00 00 01 65 b8
00 00 52 58 00 00 27 f5 d4 48 7e b4 41 07 24 60 95 2c 92 37 68 75 63 4c ad 3f b1
很显然,67是SPS,68是PPS,然后65是关键帧,开始出来图像
void av_packet_unref(AVPacket *pkt)
{
av_packet_free_side_data(pkt);
av_buffer_unref(&pkt->buf);
av_init_packet(pkt);
pkt->data = NULL;
pkt->size = 0;
}
简单使用
AVPacket packet;
av_init_packet(&packet);
packet.data = (uint8_t*)data;
packet.size = (int)bytes;
//保存数据
av_packet_unref(&packet);
经过av_paceket_unref函数之后,只是将data置为NULL,size置为0
参考 http://blog.csdn.net/BrookIcv/article/details/53490799
AVPacket保存一个NAL单元的解码前数据,该结构本身不直接包含数据,其有一个指向数据域的指针。传递给avcodec_send_packet函数的AVPacket结构体data中的数据前面是
00 00 00 01开头,说明是NALU格式的数据
数据简单如下:
00 00 00 01 61 e1 40 01 58 2b fb 22 ff 29 7b 3f 6f 67 2f 29 fa 25 53 68 78 46 b1
在调用avcodec_send_packet函数的时候打印错误如下:
I:2018-01-06 15:06:05 ms:887:nal_unit_type: 1, nal_ref_idc: 3
I:2018-01-06 15:06:05 ms:888:non-existing PPS 0 referenced
I:2018-01-06 15:06:05 ms:888:decode_slice_header error
I:2018-01-06 15:06:05 ms:888:no frame!
当数据如下,可以正确的解析出一帧图像
00 00 00 01 67 42 00 2a 96 35 40 f0 04 4f cb 37 01 01 01 40 00 01 c2 00 00 57 e4
01 00 00 00 01 68 ce 3c 80 00 00 00 01 06 e5 01 ef 80 00 00 03 00 00 00 01 65 b8
00 00 52 58 00 00 27 f5 d4 48 7e b4 41 07 24 60 95 2c 92 37 68 75 63 4c ad 3f b1
很显然,67是SPS,68是PPS,然后65是关键帧,开始出来图像
void av_packet_unref(AVPacket *pkt)
{
av_packet_free_side_data(pkt);
av_buffer_unref(&pkt->buf);
av_init_packet(pkt);
pkt->data = NULL;
pkt->size = 0;
}
简单使用
AVPacket packet;
av_init_packet(&packet);
packet.data = (uint8_t*)data;
packet.size = (int)bytes;
//保存数据
av_packet_unref(&packet);
经过av_paceket_unref函数之后,只是将data置为NULL,size置为0
参考 http://blog.csdn.net/BrookIcv/article/details/53490799
相关文章推荐
- ffmpeg开发 av_init_packet()和av_new_packet()
- [置顶] FFmpeg总结(六)AV系列结构体之AVPacket
- FFmpeg源码剖析-通用:get_input_packet()
- 关于 ffmpeg 中av_rescale_rnd 和avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, 的含义
- FFmpeg AVPacket
- FFmpeg中av_init_packet()和av_packet_alloc()以及av_new_packet()三者的区别以及用法
- FFmpeg源码剖析-解码:av_read_frame()
- FFmpeg源码剖析-通用:av_register_all()
- FFmpeg中AVPacket处理函数av_free_packet()和av_packet_free()的区别以及用法
- ffmpeg框架阅读笔记一:读取数据帧函数 int av_read_frame(AVFormatContext *s, AVPacket *pkt)
- ffmpeg AVPacket & AVFrame
- ffmpeg开发 av_init_packet()和av_new_packet()
- FFmpeg AVPacket和AVFrame区别
- ffmpeg开发 av_init_packet()和av_new_packet()
- ffmpeg框架阅读笔记一:读取数据帧函数 int av_read_frame(AVFormatContext *s, AVPacket *pkt)
- AVPacket 和AVPacketList
- FFmpeg av_find_input_format函数剖析
- ffmpeg AVPacket & AVFrame
- FFmpeg(7)-av_read_frame()读取帧数据AVPacket和av_seek_frame()改变播放进度
- C/C++音视频库ffmpeg的数据包AVPacket分析