FFMPEG AVDictionary 配置参数
AVDictionary 的用法简介
AVDictionary 所在的头文件在 libavutil/dict.h,其定义如下:
struct AVDictionary { int count; AVDictionaryEntry *elems;
};
其中,AVDictionaryEntry 的定义如下:
typedef struct AVDictionaryEntry { char *key; char *value;
} AVDictionaryEntry;
下面就用示例的方式简单介绍下用法
创建一个字典
AVDictionary *d = NULL;
销毁一个字典
av_dict_free(&d);
添加一对 key-value
av_dict_set(&d, "name", "jhuster", 0);
av_dict_set_int(&d, "age", "29", 0);
获取 key 的值
AVDictionaryEntry *t = NULL;t = av_dict_get(d, "name", NULL, AV_DICT_IGNORE_SUFFIX);
av_log(NULL, AV_LOG_DEBUG, "name: %s", t->value);t = av_dict_get(d, "age", NULL, AV_DICT_IGNORE_SUFFIX);
av_log(NULL, AV_LOG_DEBUG, "age: %d", (int) (*t->value));
遍历字典
AVDictionaryEntry *t = NULL;
while ((t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX))) {av_log(NULL, AV_LOG_DEBUG, "%s: %s", t->key, t->value);
}
ffmpeg 参数的传递
ffmpeg 中很多 API 都是靠 AVDictionary 来传递参数的,比如常用的:
int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options);
最后一个参数就是 AVDictionary,我们可以在打开码流前指定各种参数,比如:探测时间、超时时间、最大延时、支持的协议的白名单等等,例如:
AVDictionary *options = NULL;
av_dict_set(&options, “probesize”, “4096", 0);
av_dict_set(&options, “max_delay”, “5000000”, 0);
AVFormatContext *ic = avformat_alloc_context();
if (avformat_open_input(&ic, url, NULL, &options) < 0) {LOGE("could not open source %s", url);return -1;
}
那么,我们怎么知道 ffmpeg 的这个 API 支持哪些可配置的参数呢 ?
我们可以查看 ffmpeg 源码,比如 avformat_open_input
是结构体 AVFormatContext
提供的 API,在 libavformat/options_table.h
中定义了 AVFormatContext
所有支持的 options
选项,如下所示:
https://www.ffmpeg.org/doxygen/trunk/libavformat_2options__table_8h-source.html
同理,AVCodec 相关 API 支持的 options 选项则可以在 libavcodec/options_table.h 文件中找到,如下所示:
https://www.ffmpeg.org/doxygen/3.1/libavcodec_2options__table_8h_source.html
FFMPEG AVDictionary 配置参数相关推荐
- FFMPEG Tips (5) 如何利用 AVDictionary 配置参数
本文是我的 FFMPEG Tips 系列的第五篇文章,准备介绍下 ffmpeg 提供的一个非常好用的健值对工具:AVDictionary,特别是对于没有 map 容器的 c 代码,可以充分利用它来配置 ...
- 利用 AVDictionary 配置参数
本文是我的 FFMPEG Tips 系列的第五篇文章,准备介绍下 ffmpeg 提供的一个非常好用的健值对工具:AVDictionary,特别是对于没有 map 容器的 c 代码,可以充分利用它来配置 ...
- ffmpeg 如何配置编译
这么长的文章,是转来的 : ) 1 ffmpeg介绍 ffmpeg是音视频的分离,转换,编码解码及流媒体的完全解决方案,其中最重要的就是libavcodec库.它被mplayer或者xine使用作为解 ...
- VS Code 安装插件、自定义模板、自定义配置参数、自定义主题、配置参数说明、常用的扩展插件
1. 下载和官网教程 下载地址:https://code.visualstudio.com/ 官方教程:https://code.visualstudio.com/docs 2. 安装插件 安装扩展插 ...
- chrome java插件_selenium启动Chrome配置参数问题
每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件.没有收藏.没有历史记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器, ...
- ActiveMQ5.14.5配置参数详解
Activemq-.xml 1.加载properties配置参数.下面加载是访问broker的身份信息,即用户名和密码 <bean class="org.springframework ...
- 2019年最受欢迎的JVM配置参数是怎样的?
以下是 JVM 常见十大配置参数: 1.-Xms:初始堆大小.只要启动,就占用的堆大小. 2.-Xmx:最大堆大小.java.lang.OutOfMemoryError:Java heap这个错误可以 ...
- Ehcache配置参数详解
ehcache配置参数详解 <?xml version="1.0" encoding="UTF-8"?><ehcache><dis ...
- mysql 参数sql文件_为MySQL的source命令导入SQL文件配置参数
为MySQL的source命令导入SQL文件配置参数 执行 mysql -uroot -p 输入密码后进入 MySQL 命令提示符 set charset utf8; source /root/xxx ...
最新文章
- Html emed 和 object
- [吴恩达机器学习笔记]12支持向量机2 SVM的正则化参数和决策间距
- ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 区别
- 配置IIS Silverlight运行环境
- diag--创建对角矩阵
- 应用视觉设计_Day01
- python浮点数占多少字节_Python的浮点数损失精度问题
- ActiveX: 如何用.inf和.ocx文件生成cab文件
- 机器学习经典算法笔记——PCA和梯度上升算法
- linux识别科学计数法,Linux下科学计数法(e)转化为数字的方法 [shell中几种数字计算说明]...
- 怎样剪立体灯笼_教你怎样做新年DIY剪纸拉花灯笼
- mysql中设置字符,MySQL 修改默认字符集
- 02矩阵01 ——概念、运算和基本矩阵、对角矩阵、方幂、数量矩阵、转置矩阵、对称矩阵、逆矩阵、奇异矩阵、三角矩阵、矩阵乘积的行列式与秩
- 游戏史上最伟大的10位制作人(图)
- PHP Yar - 学习/实践
- KO88冲销工单结算
- 【BP数据预测】基于matlab人工鱼群算法优化BP神经网络数据预测【含Matlab源码 523期】
- Qt图片绘图类 QPixmap
- AI伪原创工具接口,批量API在线AI伪原创工具
- html裁剪字体代码,CSS控制文字换行、裁剪
热门文章
- AI框架你只会调包,这种想法很危险!
- 综述:基于GAN的图像翻译模型盘点
- arXiv热文解读 | 不懂Photoshop如何P图?交给深度学习吧
- 直播预告 | 全国高校人工智能人才与科技莫干山论坛直播来袭!
- 免费课程 | 云脑机器学习实战训练营,中美大咖携手带你飞!
- python异常处理机制的好处_浅谈Python异常处理机制
- linux算术表达式求值数据结构,数据结构:算数表达式求值演示
- 使用okhttp3执行post请求
- C#——《C#语言程序设计》实验报告——继承与多态——电视和电灯委托
- Linux——查看硬件配置命令