ffmpeg重要结构体之AVCodec和AVIOContext
今天继续讲解ffmpeg结构体AvCodec和AVIOContext以便加深对ffmpge的理解
一 . AVCodec的讲解
AVCodec结构体是有关codec的结构体。在文件"libavcodec/avcodec.h" 中。
其中解码相关的变量都很直观:
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的值如图:
其中和视频解码相关的重要结构体包括:
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。