描述
AVPacket保存一個NAL單元的解碼前數據,該結構本身不直接包含數據,其有一個指向數據域的指針。傳遞給avcodec_send_packet函數的AVPacket結構體data中的數據前面是
數據簡單如下:
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