ffmpeg主要数据结构关系以及数据结构的说明
2012-04-11 20:34
316 查看
花了一段时间把mcodec前辈 (www.cnblogs.com/mcodec)简化的ffplay大致看完,那个工程不记得在什么地方
下载的了,自己重新上传下。下载地址http://files.cnblogs.com/hacqing/ffmepg_avi.rar
1. 红色字体的first_protocol first_iformat first_avcodec, 这三个不同的头指针,分别为ffmpeg支持
不同的数据源、不同格式以及不同编码的音视频数据提供了处理的可能。
2. ffplay主要划分为四大部分: 数据源, 解复用, 解码, 显示播放. ffplay使用SDL库进行视频显示和声音播放,
至于同步在ffplay中自个做的.
首先, 谈谈数据源相应的数据结构: URLContext, ByteIOContext. 这两个与音视频数据相关, URLProtocol
体现在功能函数上. 上图中, URLContext的 void *priv_data 指向了FILE结构体, 其实这是作者的一点点失误,
ffmpeg使用的是c的底层io, 没有使用stdio. c底层io是不带缓存的, 所以加上了ByteIOContext为无缓冲io提供缓
存, 避免频繁的进行i/o操作.
其次, 解复用对应的数据结构: AVFormatContext中的void *priv_data字段, AVStream, AVStream中void *
priv_data结合AVInputeFormat的使用, 从下一层的ByteIOContext的buffer中将音视频数据分离. (我对这部分理解
的不好, 特别是那个xxx_read_packet(...)很是不懂)
最后, 解码对应的数据结构: AVCodecContext, AVCodec体现在功能函数上, 其中AVCodecContext的void *
priv_data字段是特定的decodec.
数据源 --> char *buffer --> 解复用 --> AVPacket(音频包, 视频包) --> 解码 --> AVFrame(video) / audio_buffer(audio).
3. 搞忘记了, 还有比较重要的没有说, 就发表了...真尴尬. 三个指针first_protocol, first_iformat, first_avcodec.
first_protocol将file, tcp, udp, rtp...数据当成协议看待, 各自均提供URLProtocol结构体实例以功能函数的形式进行
体现. first_iformat将ffmpeg所支持的所有格式串连到一起, first_avcodec将ffmpeg支持的所有编码器串连到一起.
三个指针链表是如何, 确定相应实例的呢?
a. (first_protocol, argv[1]参数) 参数例如: file://pathname/filename 协议: file, 默认也为file; rtsp://ip_address/filename 协议:rtsp
b. (first_iformat, is->iformat->read_probe())
c. (first_avcodec, is->iformat->read_head())
下载的了,自己重新上传下。下载地址http://files.cnblogs.com/hacqing/ffmepg_avi.rar
1. 红色字体的first_protocol first_iformat first_avcodec, 这三个不同的头指针,分别为ffmpeg支持
不同的数据源、不同格式以及不同编码的音视频数据提供了处理的可能。
2. ffplay主要划分为四大部分: 数据源, 解复用, 解码, 显示播放. ffplay使用SDL库进行视频显示和声音播放,
至于同步在ffplay中自个做的.
首先, 谈谈数据源相应的数据结构: URLContext, ByteIOContext. 这两个与音视频数据相关, URLProtocol
体现在功能函数上. 上图中, URLContext的 void *priv_data 指向了FILE结构体, 其实这是作者的一点点失误,
ffmpeg使用的是c的底层io, 没有使用stdio. c底层io是不带缓存的, 所以加上了ByteIOContext为无缓冲io提供缓
存, 避免频繁的进行i/o操作.
其次, 解复用对应的数据结构: AVFormatContext中的void *priv_data字段, AVStream, AVStream中void *
priv_data结合AVInputeFormat的使用, 从下一层的ByteIOContext的buffer中将音视频数据分离. (我对这部分理解
的不好, 特别是那个xxx_read_packet(...)很是不懂)
最后, 解码对应的数据结构: AVCodecContext, AVCodec体现在功能函数上, 其中AVCodecContext的void *
priv_data字段是特定的decodec.
数据源 --> char *buffer --> 解复用 --> AVPacket(音频包, 视频包) --> 解码 --> AVFrame(video) / audio_buffer(audio).
3. 搞忘记了, 还有比较重要的没有说, 就发表了...真尴尬. 三个指针first_protocol, first_iformat, first_avcodec.
first_protocol将file, tcp, udp, rtp...数据当成协议看待, 各自均提供URLProtocol结构体实例以功能函数的形式进行
体现. first_iformat将ffmpeg所支持的所有格式串连到一起, first_avcodec将ffmpeg支持的所有编码器串连到一起.
三个指针链表是如何, 确定相应实例的呢?
a. (first_protocol, argv[1]参数) 参数例如: file://pathname/filename 协议: file, 默认也为file; rtsp://ip_address/filename 协议:rtsp
b. (first_iformat, is->iformat->read_probe())
c. (first_avcodec, is->iformat->read_head())
相关文章推荐
- Architectural Pattern(4)-SOA相关名词概念解释(SCA、ESB、JBI、BPEL、WEB服务)以及关系说明
- UML类图符号 各种关系说明以及举例
- php链接msql以及myql,mysqli,mysqlnd,mysqlpdo 的关系与说明
- UML类图符号 各种关系说明以及举例
- UML类图符号 各种关系说明以及举例
- android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明
- ffmpeg主要数据结构和函数
- android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明
- LatinIME中几个主要方法说明======》修改按键背景,以及行列间距
- Activiti 5.0.alpha2使用的数据表以及关系的说明
- UML类图符号 各种关系说明以及举例
- UML类图符号 各种关系说明以及举例
- cuda-convnet 卷积神经网络 一般性结构卷积核个数和输入输出的关系以及输入输出的个数的说明
- [转发]UML类图符号 各种关系说明以及举例
- UML类图符号 各种关系说明以及举例
- UML类图符号 各种关系说明以及举例
- UML类图符号 各种关系说明以及举例
- UML中各种关系说明以及举例
- UML中各种关系说明以及举例
- Architectural Pattern(4)-SOA相关名词概念解释(SCA、ESB、JBI、BPEL、WEB服务)以及关系说明