1 AVStream
AVStream结构保存与数据流相关的编×××,数据段等信息。比较重要的有如下二个成员:
AVCodecContext *codec; /**< codec context */
void *priv_data;
其中codec指针保存的就是上节所述的encoder或decoder结构。priv_data指针保存的是和具体编解码流相关的数据,如下代码所示,在ASF的解码过程中,priv_data保存的就是ASFStream结构的数据。
AVStream *st; ASFStream *asf_st;
…
…
st->priv_data = asf_st;
2 AVInputStream/ AVOutputStream
根据输入和输出流的不同,前述的AVStream结构都是封装在AVInputStream和AVOutputStream结构中,在av_encode( )函数中使用。AVInputStream中还保存的有与时间有关的信息。AVOutputStream中还保存有与音视频同步等相关的信息。
3 AVPacket
AVPacket结构定义如下,其是用于保存读取的packet数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 | typedef struct AVPacket { int64_t pts ; ///< presentation time stamp in time_base units int64_t dts ; ///< decompression time stamp in time_base units uint8_t *data ; int size ; int stream_index ; int flags ; int duration ; ///< presentation duration in time_base units void ( *destruct ) ( struct AVPacket * ) ; void *priv ; int64_t pos ; ///< byte position in stream, -1 if unknown } AVPacket ; |
在av_encode()函数中,调用AVInputFormat的 (*read_packet)(struct AVFormatContext *, AVPacket *pkt)接口,读取输入文件的一帧数据保存在当前输入AVFormatContext的AVPacket成员中。