ffmpeg重要结构体之AVCodec和AVIOContext

今天继续讲解ffmpeg结构体AvCodec和AVIOContext以便加深对ffmpge的理解
一 . AVCodec的讲解
AVCodec结构体是有关codec的结构体。在文件"libavcodec/avcodec.h" 中。

其中解码相关的变量都很直观:
ffmpeg重要结构体之AVCodec和AVIOContext
const char *name:Codec的名字,此例子中为h264。

enum AVMediaType type:媒体类型:视频。

enum AVCodecID id:Codec的ID,比如AV_CODEC_ID_H264。

重要的是其中的几个函数指针:decode()等,将在以后介绍。

二 .AVIOContext的讲解
解码某mpeg-4码流(raw format),AVFormat中的AVIOContext *pb的值如图:
ffmpeg重要结构体之AVCodec和AVIOContext
其中和视频解码相关的重要结构体包括:

unsigned char *buffer:指向数据开始的位置。一般就是指向文件的开头。如上图中的buffer,其前几个数据为00 00 01 b0,正是此mpeg-4文件的开头。

int buffer_size:buffer的最大值,一般为0x8000即32768.

unsigned char *buf_ptr:当前在buffer中的位置

unsigned char *buf_end:buffer结尾的位置。

int (*read_packet)(void *opaque, uint8_t *buf, int buf_size):读一个packet。

int (*write_packet)(void *opaque, uint8_t *buf, int buf_size):写一个packet。

int64_t (*seek)(void *opaque, int64_t offset, int whence):seek到某一位置。

int (*read_pause)(void *opaque, int pause):对于网络流媒体,暂停(pause)或者恢复(resume)。

int64_t (*read_seek)(void *opaque, int stream_index, int64_t timestamp, int flags):seek到某个时间戳。

int seekable:当前的流是否可以seek。