ffmpeg的IO操作

ffmpeg的IO操作主要在libavformat库中实现,涉及URLContext和AVIOContext两个层次。URLContext提供url_open、url_read等操作,而AVIOContext通过avio_open等功能进行更高层次的封装。avio_rxxx和avio_wxxx处理内存缓冲区的数据读写,当需要时调用flush_buffer和fill_buffer。关键结构包括URLProtocol,定义了各种协议的接口。avio_open函数用于根据文件名初始化AVIOContext并绑定相关操作。
摘要由CSDN通过智能技术生成

ffmpeg的IO操作主要在libavformat库中实现,部分实现用到了libavutl中的工具。网上有一些介绍ffmpeg的IO的文章,但是有些比较老了,并且一些现在ffmpeg结构已经一些变化,比如ByteIOContext已经改名为AVIOContext,本文章主要介绍IO基础,以及一些ffmpeg对于一些内存操作的方法。

所谓IO就是数据的存取,主要的途径也就是文件或者网络。数据IO是基于文件格式的,与具体的编码标准无关。


ffmpeg对各种协议实现了封装,使用同样的接口,完成对不同数据的读取。比较屌。

ffmpeg所有的协议的注册是在av_register_all中完成的。协议保存在链表first_protocol中。

ffmpeg的IO层次,不同的封装层次:


URLContext层次的操作主要有:url_open,url_read,url_write,url_seek,url_close等

AVIOContext层次的操作主要有:avio_open,avio_clse,avio_rxxx,avio_wxxx。事实上这是对URLContext层次的上层操作。或者更高层次的抽象封装。

avio_rxxx和avio_wxxx简介的调用ffurl_read,ffurl_write,实现读写操作,而avio_open根据文件名来实现avio_rxxx和avio_wxxx和不用媒介的操作函数ffurl_read,ffurl_write的绑定

avio_rxxx和avio_wxxx实现的是对内存缓冲区中数据的操作,当缓冲区中数据不足或者缓冲区将要溢出时,调用flush_buffer和fill_buffer将数据把数据读到媒介中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值