您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  FFmpeg