文章目录
- 基本概念
- 结构体字段:
- 主要函数
基本概念
数据包(packet),是存储压缩编码数据的基本单位,在音频编码中,通常一个数据包只包含一帧数据,在视频编码中,由于B帧和P帧的存在,可以出现一个数据包包含多帧数据的情况
数据帧(frame), 存储非压缩数据的基本单位,对于视频为yuv 或者 rgb , 音频为aac数据
结构体字段:
Frame:
- data[AV_NUM_DATA_POINTERS]:存放解码后的原始媒体数据的指针数组,
对于视频数据,planar格式中, Y、U、V分量会被分别存放在data[0]、data[1]、data[2] ,packet格式的数据会被存放在data[0]中。
对于音频数据,channel的不同声道分别存储在data[0]、data[1]等
AVPacket:
- buf:指向数据包内存的引用。
- pts 和 dts:分别代表显示时间戳和解码时间戳。
- data 和 size:指向数据包的数据和大小。
- stream_index:该数据包属于哪个流。
主要函数
获取音频/视频包:
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);