avcodec.h(结构体AVPacket)
来源:互联网 发布:java mysql 编辑:程序博客网 时间:2024/06/06 02:56
typedef struct AVPacket { /** * 缓冲区 */ AVBufferRef *buf; /** * 翻译:FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。 * 顾名思义,前者是解码的时间,后者是显示的时间。要仔细理解这两个概念,需要先了解FFmpeg中的packet和frame的概念。 * FFmpeg中用AVPacket结构体来描述解码前或编码后的压缩包,用AVFrame结构体来描述解码后或编码前的信号帧。 * 对于视频来说,AVFrame就是视频的一帧图像。这帧图像什么时候显示给用户,就取决于它的PTS。DTS是AVPacket里的一个成员, * 表示这个压缩包应该什么时候被解码。 如果视频里各帧的编码是按输入顺序(也就是显示顺序)依次进行的,那么解码和显示时间应该是一致的。 * 可事实上,在大多数编解码标准(如H.264或HEVC)中,编码顺序和输入顺序并不一致。 于是才会需要PTS和DTS这两种不同的时间戳 * 理解:就是给视频一个编解码的顺序。 */ int64_t pts; int64_t dts;/*压缩编码的数据*/ uint8_t *data;/*data的大小*/ int size;/*标识该AVPacket所属的视频/音频流*/ int stream_index; int flags; AVPacketSideData *side_data; int side_data_elems; int duration;#if FF_API_DESTRUCT_PACKET attribute_deprecated void (*destruct)(struct AVPacket *); attribute_deprecated void *priv;#endif int64_t pos; ///< byte position in stream, -1 if unknown int64_t convergence_duration;} AVPacket;
每一个包是一个完整的数据帧,来暂存解复用之后、解码之前的媒体数据(一个音/视频帧、一个字幕包等)及附加信息(解码时间戳、显示时间戳、时长等)
//注意保存音视频数据包的内存
是 malloc 出来的,用完后应及时用 free 归还给系统
1. typedef struct AVPacket
2. {
3. int64_t pts;
4. int64_t dts;
5. int64_t pos;
6. uint8_t *data;//数据首地址
7. int size;
8. int stream_index;
9. int flags;//flags为标志域,1表示该数据是一个关键帧
10. void(*destruct)(struct AVPacket*);//释放数据缓冲区的函数指针
11. } AVPacket;
以上是AVPacket结构体的成员变量
uint8_t *data:压缩编码的数据。
例如对于H.264来说。1个AVPacket的data通常对应一个NAL。
注意:在这里只是对应,而不是一模一样。他们之间有微小的差别:使用FFMPEG类库分离出多媒体文件中的H.264码流
因此在使用FFMPEG进行视音频处理的时候,常常可以将得到的AVPacket的data数据直接写成文件,从而得到视音频的码流文件。
int size:data的大小
int64_t pts:显示时间戳
int64_t dts:解码时间戳
int stream_index:标识该AVPacket所属的视频/音频流。
关于pts和dts:
FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。 顾名思义,前者是解码的时间,后者是显示的时间。要仔细理解这两个概念,需要先了解FFmpeg中的packet和frame的概念。
FFmpeg中用AVPacket结构体来描述解码前或编码后的压缩包,用AVFrame结构体来描述解码后或编码前的信号帧。 对于视频来说,AVFrame就是视频的一帧图像。这帧图像什么时候显示给用户,就取决于它的PTS。DTS是AVPacket里的一个成员,表示这个压缩包应该什么时候被解码。 如果视频里各帧的编码是按输入顺序(也就是显示顺序)依次进行的,那么解码和显示时间应该是一致的。可事实上,在大多数编解码标准(如H.264或HEVC)中,编码顺序和输入顺序并不一致。 于是才会需要PTS和DTS这两种不同的时间戳。
关于AVPacket和AVFrame:
AVPacket(相当于一个容器)
–存储一帧压缩编码数据。
AVFrame
–存储一帧解码后像素(采样)数据。
- avcodec.h(结构体AVPacket)
- AVCodec结构体
- AVPacket 结构体
- FFMPEG结构体分析:AVCodec
- FFMPEG结构体分析:AVCodec
- FFMPEG结构体分析:AVCodec
- FFMPEG结构体分析:AVCodec
- FFMPEG结构体分析 AVCodec
- FFMPEG结构体分析:AVCodec
- FFMPEG结构体分析:AVCodec
- FFMPEG结构体分析:AVCodec
- FMPEG结构体分析:AVCodec
- FFMPEG结构体分析:AVCodec
- FFMPEG结构体分析:AVCodec
- FFMPEG结构体分析:AVPacket
- FFMPEG结构体分析:AVPacket
- FFMPEG结构体分析:AVPacket
- FFMPEG结构体分析 AVPacket
- android 性能分析
- Linux下命令行安装配置android-sdk 下安装安卓插件
- hdu 5776 抽屉定理 判断子序列%m是否为0
- 支持向量机(SVM)三
- WEB安全杂谈
- avcodec.h(结构体AVPacket)
- Zookeeper安装和简单使用
- 双向链表解读
- D
- UVA - 11468 Substring ( AC自动机 + dp)
- Swift-if语句
- JS笔记:原型
- 算法学习之尺取法
- JSP 的OUT对象输出