AVPacket
保存的是解码前的数据,也就是压缩后的数据。该结构本身不直接包含数据,其有一个指向数据域的指针,FFmpeg中很多的数据结构都使用这种方法来管理数据。
AVPacket
的使用通常离不开下面4个函数:
使用
av_packet_alloc
来创建一个AVPacket
的实例,但该函数并不会为数据分配空间,其指向数据域的指针为NULL。
通常调用av_read_frame
将流中的数据读取到AVPacket
中。av_packet_free
void av_packet_free(AVPacket **pkt)
{
if (!pkt || !*pkt)
return;
av_packet_unref(*pkt);
av_freep(pkt);
}
首先将AVPacket指向的数据域的引用技术减1(数据域的引用技术减为0时会自动释放)
接着,释放为AVPacket
分配的空间。
av_packet_ref