Loading... ## 1、AVPacket简介 AVPacket保存了解封装之后,解码之前的数据(仍然是压缩后的数据)和关于这些数据的一些附加信息,如显示时间戳(pts)、解码时间戳(dts)、数据时长、所在媒体流的索引等。 对于视频(Video)来说,AVPacket通常包含一个压缩的Frame,而音频(Audio)则有可能包含多个压缩的Frame。并且,一个Packet有可能是空的,不包含任何压缩数据,只含有side data(side data,容器提供的关于Packet的一些附加信息。例如,在编码结束的时候更新一些流的参数)。  ## 2、相关方法 ### 2.1 av_read_frame:分配AVPacket ```cpp AVPacket *av_packet_alloc(void); ``` ### 2.2 av_new_packet:分配AVPacket->data ```cpp int av_new_packet(AVPakcet *pkt, int size); ``` ### 2.3 av_packet_unref: 减少引用计数 ```cpp void av_packet_unref(AVPacket *pkt); ``` 对AVPacket缓冲区的引用计数减1,如果引用计数为1,则释放data缓冲区。**在编程时,循环处理压缩数据,每循环一次都会分配AVPacket->data来存储压缩后的数据,处理完压缩数据之后,并且在进入下一次循环之前,记得使用 av_packet_unref 来释放已经分配的AVPacket->data缓冲区。** ### 2.4 av_packet_free: 释放AVPacket ```cpp void av_packet_free(AVPacket **pkt) ``` ### 2.5 av_interleaved_write_frame: 写入packet ```cpp int av_interleave_write_frame(AVFormatContext* fmt, AVPacket *pkt); ``` Last modification:June 15th, 2021 at 06:03 pm © 允许规范转载