数据包(packet),是存储压缩编码数据的基本单位,在音频编码中,通常一个数据包只包含一帧数据,在视频编码中,由于B帧和P帧的存在,可以出现一个数据包包含多帧数据的情况
数据帧(frame), 存储非压缩数据的基本单位,对于视频为yuv 或者 rgb , 音频为aac数据
Frame:
AVPacket:
获取音频/视频包:
int av_read_frame(AVFormatContext *s, AVPacket *pkt);
// pkt 为解析后获取的数据包
AVPacket *pkt = av_packet_alloc();
while (1)
{
av_read_frame(ifmt_ctx, pkt);
av_packet_unref(pkt);
}
if(pkt)
av_packet_free(&pkt);
获取音频/视频帧:
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);
AVFrame *pFrame = av_frame_alloc();
while(){
av_receive_frame(ctx, pFrame);
//...
av_frame_unref(pFrame);
}
av_frame_free(pFrame);