ffmpeg主要数据结构关系以及数据结构的说明

    花了一段时间把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())

转载于:https://www.cnblogs.com/hacqing/archive/2012/04/11/2442730.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值