【FFMPEG】使用ffmpeg类库打开流媒体
版权声明:本文为博主原创文章,未经博主允许不得转载。
使用ffmpeg类库进行开发的时候,打开流媒体(或本地文件)的函数是avformat_open_input()。
其中打开网络流的话,前面要加上函数avformat_network_init()。
一般情况下,只要传入流媒体的url就可以了。但是在打开某些流媒体的时候,可能需要附加一些参数。
例如在播放中央人民广播电台的声音信号的时候,其url为“rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==”
如果直接进行打开是不会成功的,我们可以使用ffplay做一下实验:
- ffplay rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==
会出现错误:
Invalid data found when processing input
这时候我们需要指定其传输方式为TCP,需要将命令改为如下形式:
- ffplay -rtsp_transport tcp rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==
附加了参数以后,发现就可以正常播放了。
此外还可以附加一些参数,比如
- ffplay -rtsp_transport tcp -max_delay 5000000 rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==
在使用FFMPEG类库进行编程的时候,如何将这些附加的参数传递给avformat_open_input()呢?经过研究后发现,可以通过AVDictionary把参数传给avformat_open_input()。
看一下avformat_open_input()的定义:
- /**
- * Open an input stream and read the header. The codecs are not opened.
- * The stream must be closed with av_close_input_file().
- *
- * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context).
- * May be a pointer to NULL, in which case an AVFormatContext is allocated by this
- * function and written into ps.
- * Note that a user-supplied AVFormatContext will be freed on failure.
- * @param filename Name of the stream to open.
- * @param fmt If non-NULL, this parameter forces a specific input format.
- * Otherwise the format is autodetected.
- * @param options A dictionary filled with AVFormatContext and demuxer-private options.
- * On return this parameter will be destroyed and replaced with a dict containing
- * options that were not found. May be NULL.
- *
- * @return 0 on success, a negative AVERROR on failure.
- *
- * @note If you want to use custom IO, preallocate the format context and set its pb field.
- */
- int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options);
可以看出avformat_open_input()的第4个参数是一个AVDictionary类型的参数。这个参数就是传入的附加参数。
设置AVDictionary的时候会用到av_dict_set()。
下面看看把命令
- ffplay -rtsp_transport tcp -max_delay 5000000 rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==
转化为代码实现的方式:
- AVFormatContext *pFormatCtx;
- pFormatCtx = avformat_alloc_context();
- ...代码略
- AVDictionary *avdic=NULL;
- char option_key[]="rtsp_transport";
- char option_value[]="tcp";
- av_dict_set(&avdic,option_key,option_value,0);
- char option_key2[]="max_delay";
- char option_value2[]="5000000";
- av_dict_set(&avdic,option_key2,option_value2,0);
- char url[]="rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==";
- avformat_open_input(&pFormatCtx,url,NULL,&avdic);
转载于:https://www.cnblogs.com/huty/p/8518755.html
【FFMPEG】使用ffmpeg类库打开流媒体相关推荐
- FFMPEG类库打开流媒体的方法(需要传参数的时候)
使用ffmpeg类库进行开发的时候,打开流媒体(或本地文件)的函数是avformat_open_input(). 其中打开网络流的话,前面要加上函数avformat_network_init(). 一 ...
- 基于FFMPEG+JSMPEG+Nodejs的web流媒体方案
基于FFMPEG+JSMPEG+Nodejs的web流媒体方案 本次介绍一种方案:基于FFMPEG+JSMPEG+Nodejs的web流媒体方案. 通过本方案可以轻松实现摄像头监控视频的web显示.本 ...
- golang直接调用ffmpeg预编译类库(windows)已更新
MinGW介绍 MINGW(Minimalist GNU on Windows)是一个可以在windows下编译Linux程序的仿真linux编译环境,他提供了linux下的C.C++头文件.系统库和 ...
- 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )
文章目录 一.FFmpeg 简介 二.FFmpeg 相关术语 1.容器 2.媒体流 3.数据帧 4.数据包 5.编解码器 6.复用 7.解复用 博客资源 一.FFmpeg 简介 FFmpeg 是 &q ...
- VideoTool之FFmpeg:FFmpeg的简介、安装、使用方法之详细攻略
VideoTool之FFmpeg:FFmpeg的简介.安装.使用方法之详细攻略 目录 FFmpeg的简介 FFmpeg的安装 1.Windows下安装 第一步,下载软件 第二步,解压文件 第三步,将文 ...
- FFmpeg[27] - FFmpeg实现视频抠图技巧(chromakey)
目录 前言 正文 <FFmpeg实用技巧>系列-总览_liuzhen007的专栏-CSDN博客前言FFmpeg是一个完整的跨平台解决方案,可用于音视频的录制.转码.流化处理等应用,号称音视 ...
- 【初学ffmpeg】ffmpeg获取视频信息
===================================================== 相关代码可以参考我的: [初学ffmpeg]ffmpeg解码保存为yuv ========= ...
- 六、FFmpeg使用---ffmpeg依赖x264库
上篇文章五.FFmpeg使用---x264编译_[零声教育]音视频开发进阶的博客-CSDN博客粗略的讲了一下如何编译X264,和之前FFmpeg的编译方式差不多,就是脚本有点差异. 接下来讲一 ...
- FFmpeg[19] - ffmpeg: Unable to find a suitable output format for ‘–i‘
目录 问题 解决 <FFmpeg实用技巧>系列-总览_liuzhen007的专栏-CSDN博客前言FFmpeg是一个完整的跨平台解决方案,可用于音视频的录制.转码.流化处理等应用,号称音视 ...
- FFmpeg使用---FFmpeg程序的使用(ffmpeg.exe, ffplay.exe, ffprobe.exe)
一.FFmpeg程序的使用(ffmpeg.exe, ffplay.exe, ffprobe.exe) 本章主要介绍一下ffmpeg工程包含的三个exe的使用方法. ffmpeg的官方网站是:http: ...
最新文章
- [bzoj2333] [SCOI2011]棘手的操作 (可并堆)
- Samtools安装与使用
- 算法:三角形最小路径和
- GraphPad Prism 的统计显著性报告中*或**或**的含义是什么?
- mfc 子窗体任何消息都不触发_winform让窗体一直显示在桌面上以及FindWindow
- JS基础语法(02)-JS的转义符
- VMware虚拟机和Ubuntu系统的必备设置(包括下载地址,更新下载源等)
- plsql怎么用字段查表明_PLSQL查询语句
- Python3 GUI编程: 自带图形库 tkinter 学习教程
- linux在shell中获取时间 date巧用
- 通过纯真IP数据库查询IP归属地信息
- TranslateAnimation
- 关于无法在驱动器0分区上安装Windows
- 人脸识别关键技术及原理
- 数据结构之逻辑结构与物理结构(存储结构)
- Flutter实现google登陆(gmail)
- 基于Python的信用评分卡建模分析
- metamask连接不上本地私有节点,报错“无法获取链 IC,您的 RPC URL 地址是正确的么”
- 联通数科一面+二面+面谈 经验分享 base济南
- android 启动页主题_如何使用主题和启动器个性化您的Android手机