11 | FFmpeg 基础模块(二):AVIO、AVDictionary 与 AVOption
刘歧
你好,我是刘歧。
上一节课我们了解了 AVFormat 中的 API 接口的功能,从实际操作经验看,这些接口是可以满足大多数音视频的 mux 与 demux,或者说 remux 场景的。但是除此之外,在日常使用 API 开发应用的时候,我们还会遇到需要从自己定义的内存或文件中读写数据,然后套用在 AVFormat 中的场景。遇到这种场景的时候我们应该怎么办呢?使用 AVIO 就可以做到。
AVIO
我们先来认识一下 AVIO。AVIO 部分常见的接口看上去比较多,主要是为了方便读、写内容时做一些字节对齐与大小端定义的操作,了解了它内在的结构之后,你就会觉得清晰多了。下面我们来一一讲解一下。
当你想知道一个 URL 字符串是什么协议的时候,通过 avio_find_protocol_name 接口就能得到协议的名称,例如 http、rtmp、rtsp 等。
avio_alloc_context 接口主要用来申请 AVIOContext 句柄,并且可以在申请的时候注册 read_packet、write_packet 与 seek 回调,然后可以将 AVIOContext 句柄挂载到 AVFormatContext 的 pb 上面。挂载完成后,在操作 AVFormatContext 的 read_packet、write_packet、seek 的时候,会调用这里注册过的回调接口,注册的时候如果把回调接口设置成 NULL(空),就会使用 AVIOContext 子模块默认的流程。这里申请的 AVIOContext 可以通过 avio_context_free 来释放。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
FFmpeg基础模块中的AVIO、AVDictionary和AVOption为读者提供了强大的API操作方法。AVIO模块提供了一系列接口,用于在自定义的内存或文件中读写数据,并且可以进行字节对齐和大小端定义的操作。AVDictionary和AVOption主要用来设置操作目标的format、codec、protocol的参数,以达到与命令行使用参数一样的效果。文章通过两种操作方式的例子,详细介绍了AVIO、AVDictionary和AVOption的使用方法,以及它们各自的优势和适用场景。此外,还介绍了opt与dict相关的操作接口,以及如何在日常开发中高效地设置对应的参数。总的来说,本文通过介绍这些基础模块的接口,为读者提供了FFmpeg API的基础操作方法,使读者能够快速了解并使用这些技术特点。文章内容丰富,适合技术开发人员阅读学习。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快手 · 音视频技术入门课》,新⼈⾸单¥59
《快手 · 音视频技术入门课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- 晓龙AVPacket 是属于AVCodec AVPacket 一般用来存储解码前的数据,AVFormat一般用来存储解码后的数据, 通过 avcodec_send_packet 送入avpacket , 通过 avcodec_receive_frame 进行解码,送出avformat
编辑回复: 👍
2022-09-30归属地:北京3 - geek还有个问题 avio_alloc_context 接口主要用来申请 AVIOContext 句柄,并且可以在申请的时候注册 read_packet、write_packet 与 seek 回调,然后可以将 AVIOContext 句柄挂载到 AVFormatContext 的 pb 上面。 这个pb是什么?
作者回复: AVFormatContext里面有个AVIOContext,也就是pb,是AVFormatContext自己的pb 在ffmpeg的avformat处理流程里面会用到
2022-08-19归属地:北京 - geek请教老师 AVDictionary是可以自定些自己的信息写到文件里?而AVOption却不可以?还是都可以?比如我想在mp4文件中加些个人信息。
作者回复: 应该是不行,得有options才行,你可以试试用metadata
2022-08-19归属地:北京 - peter请教老师几个问题: Q1:static av_always_inline int64_t avio_tell(AVIOContext *s),av_always_inline 什么意思? Q2:有基于FFmpeg的开源应用吗?有的话麻烦推荐一下啊。 Q3:快手APP,音视频处理是采用FFmpeg吗? Q4:我刚接触FFmpeg,印象中FFmpeg可以用在手机上。那么,除了移动端外,还有哪些应用场景?
作者回复: 1.你可以理解就是c语言里面的inline的功能,具体的还得看一下c语言标准部分 2. 播放器不用ffmpeg应该比较少,转码系统不用ffmpeg也比较少,比如ijkplayer,mpv,mplayer,blender,mltframework 3. 是的,不过不单单是ffmpeg,还有OpenGL, AI框架,自研的一些框架,展晓凯老师也讲了一部分,其他的可能需要看大伙的兴趣程度逐渐考虑开放介绍 4. 移动端,服务端,高端一点的嵌入式都可以的
2022-08-17归属地:北京 - ifelse学习打卡2023-12-29归属地:浙江
- 欢仔双屏,不同dpi,屏幕位置随意。当我在副屏幕上截区域录屏,然后传的是wpf 控件在屏幕上的顶点坐标,但是录出来的区域不对,查了一下,说是副屏会按照主屏幕的dpi计算,不知道有没有接口是接收这样的参数2023-07-18归属地:上海
收起评论