快手 · 音视频技术入门课
刘歧
快手音视频首席架构师
4513 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 18 讲
快手 · 音视频技术入门课
15
15
1.0x
00:00/00:00
登录|注册

11 | FFmpeg 基础模块(二):AVIO、AVDictionary 与 AVOption

你好,我是刘歧。
上一节课我们了解了 AVFormat 中的 API 接口的功能,从实际操作经验看,这些接口是可以满足大多数音视频的 mux 与 demux,或者说 remux 场景的。但是除此之外,在日常使用 API 开发应用的时候,我们还会遇到需要从自己定义的内存或文件中读写数据,然后套用在 AVFormat 中的场景。遇到这种场景的时候我们应该怎么办呢?使用 AVIO 就可以做到。

AVIO

我们先来认识一下 AVIO。AVIO 部分常见的接口看上去比较多,主要是为了方便读、写内容时做一些字节对齐与大小端定义的操作,了解了它内在的结构之后,你就会觉得清晰多了。下面我们来一一讲解一下。
当你想知道一个 URL 字符串是什么协议的时候,通过 avio_find_protocol_name 接口就能得到协议的名称,例如 http、rtmp、rtsp 等。
const char *avio_find_protocol_name(const char *url);
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
立即购买
登录 后留言

全部留言(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归属地:上海
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部