版权声明:本文为博主原创文章,未经博主允许不得转载。

使用ffmpeg类库进行开发的时候,打开流媒体(或本地文件)的函数是avformat_open_input()。

其中打开网络流的话,前面要加上函数avformat_network_init()。

一般情况下,只要传入流媒体的url就可以了。但是在打开某些流媒体的时候,可能需要附加一些参数。

例如在播放中央人民广播电台的声音信号的时候,其url为“rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==”

如果直接进行打开是不会成功的,我们可以使用ffplay做一下实验:

[plain] view plain copy
  1. ffplay rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==

会出现错误:

Invalid data found when processing input

这时候我们需要指定其传输方式为TCP,需要将命令改为如下形式:

[plain] view plain copy
  1. ffplay -rtsp_transport tcp rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==

附加了参数以后,发现就可以正常播放了。

此外还可以附加一些参数,比如

[plain] view plain copy
  1. ffplay -rtsp_transport tcp -max_delay 5000000 rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==

在使用FFMPEG类库进行编程的时候,如何将这些附加的参数传递给avformat_open_input()呢?经过研究后发现,可以通过AVDictionary把参数传给avformat_open_input()。

看一下avformat_open_input()的定义:

[cpp] view plain copy
  1. /**
  2. * Open an input stream and read the header. The codecs are not opened.
  3. * The stream must be closed with av_close_input_file().
  4. *
  5. * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context).
  6. *           May be a pointer to NULL, in which case an AVFormatContext is allocated by this
  7. *           function and written into ps.
  8. *           Note that a user-supplied AVFormatContext will be freed on failure.
  9. * @param filename Name of the stream to open.
  10. * @param fmt If non-NULL, this parameter forces a specific input format.
  11. *            Otherwise the format is autodetected.
  12. * @param options  A dictionary filled with AVFormatContext and demuxer-private options.
  13. *                 On return this parameter will be destroyed and replaced with a dict containing
  14. *                 options that were not found. May be NULL.
  15. *
  16. * @return 0 on success, a negative AVERROR on failure.
  17. *
  18. * @note If you want to use custom IO, preallocate the format context and set its pb field.
  19. */
  20. int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options);

可以看出avformat_open_input()的第4个参数是一个AVDictionary类型的参数。这个参数就是传入的附加参数。

设置AVDictionary的时候会用到av_dict_set()。

下面看看把命令

[plain] view plain copy
  1. ffplay -rtsp_transport tcp -max_delay 5000000 rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==

转化为代码实现的方式:

[cpp] view plain copy
  1. AVFormatContext *pFormatCtx;
  2. pFormatCtx = avformat_alloc_context();
  3. ...代码略
  4. AVDictionary *avdic=NULL;
  5. char option_key[]="rtsp_transport";
  6. char option_value[]="tcp";
  7. av_dict_set(&avdic,option_key,option_value,0);
  8. char option_key2[]="max_delay";
  9. char option_value2[]="5000000";
  10. av_dict_set(&avdic,option_key2,option_value2,0);
  11. char url[]="rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==";
  12. avformat_open_input(&pFormatCtx,url,NULL,&avdic);

转载于:https://www.cnblogs.com/huty/p/8518755.html

【FFMPEG】使用ffmpeg类库打开流媒体相关推荐

  1. FFMPEG类库打开流媒体的方法(需要传参数的时候)

    使用ffmpeg类库进行开发的时候,打开流媒体(或本地文件)的函数是avformat_open_input(). 其中打开网络流的话,前面要加上函数avformat_network_init(). 一 ...

  2. 基于FFMPEG+JSMPEG+Nodejs的web流媒体方案

    基于FFMPEG+JSMPEG+Nodejs的web流媒体方案 本次介绍一种方案:基于FFMPEG+JSMPEG+Nodejs的web流媒体方案. 通过本方案可以轻松实现摄像头监控视频的web显示.本 ...

  3. golang直接调用ffmpeg预编译类库(windows)已更新

    MinGW介绍 MINGW(Minimalist GNU on Windows)是一个可以在windows下编译Linux程序的仿真linux编译环境,他提供了linux下的C.C++头文件.系统库和 ...

  4. 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )

    文章目录 一.FFmpeg 简介 二.FFmpeg 相关术语 1.容器 2.媒体流 3.数据帧 4.数据包 5.编解码器 6.复用 7.解复用 博客资源 一.FFmpeg 简介 FFmpeg 是 &q ...

  5. VideoTool之FFmpeg:FFmpeg的简介、安装、使用方法之详细攻略

    VideoTool之FFmpeg:FFmpeg的简介.安装.使用方法之详细攻略 目录 FFmpeg的简介 FFmpeg的安装 1.Windows下安装 第一步,下载软件 第二步,解压文件 第三步,将文 ...

  6. FFmpeg[27] - FFmpeg实现视频抠图技巧(chromakey)

    目录 前言 正文 <FFmpeg实用技巧>系列-总览_liuzhen007的专栏-CSDN博客前言FFmpeg是一个完整的跨平台解决方案,可用于音视频的录制.转码.流化处理等应用,号称音视 ...

  7. 【初学ffmpeg】ffmpeg获取视频信息

    ===================================================== 相关代码可以参考我的: [初学ffmpeg]ffmpeg解码保存为yuv ========= ...

  8. 六、FFmpeg使用---ffmpeg依赖x264库

    上篇文章五.FFmpeg使用---x264编译_[零声教育]音视频开发进阶的博客-CSDN博客粗略的讲了一下如何编译X264,和之前FFmpeg的编译方式差不多,就是脚本有点差异.     接下来讲一 ...

  9. FFmpeg[19] - ffmpeg: Unable to find a suitable output format for ‘–i‘

    目录 问题 解决 <FFmpeg实用技巧>系列-总览_liuzhen007的专栏-CSDN博客前言FFmpeg是一个完整的跨平台解决方案,可用于音视频的录制.转码.流化处理等应用,号称音视 ...

  10. FFmpeg使用---FFmpeg程序的使用(ffmpeg.exe, ffplay.exe, ffprobe.exe)

    一.FFmpeg程序的使用(ffmpeg.exe, ffplay.exe, ffprobe.exe) 本章主要介绍一下ffmpeg工程包含的三个exe的使用方法. ffmpeg的官方网站是:http: ...

最新文章

  1. [bzoj2333] [SCOI2011]棘手的操作 (可并堆)
  2. Samtools安装与使用
  3. 算法:三角形最小路径和
  4. GraphPad Prism 的统计显著性报告中*或**或**的含义是什么?
  5. mfc 子窗体任何消息都不触发_winform让窗体一直显示在桌面上以及FindWindow
  6. JS基础语法(02)-JS的转义符
  7. VMware虚拟机和Ubuntu系统的必备设置(包括下载地址,更新下载源等)
  8. plsql怎么用字段查表明_PLSQL查询语句
  9. Python3 GUI编程: 自带图形库 tkinter 学习教程
  10. linux在shell中获取时间 date巧用
  11. 通过纯真IP数据库查询IP归属地信息
  12. TranslateAnimation
  13. 关于无法在驱动器0分区上安装Windows
  14. 人脸识别关键技术及原理
  15. 数据结构之逻辑结构与物理结构(存储结构)
  16. Flutter实现google登陆(gmail)
  17. 基于Python的信用评分卡建模分析
  18. metamask连接不上本地私有节点,报错“无法获取链 IC,您的 RPC URL 地址是正确的么”
  19. 联通数科一面+二面+面谈 经验分享 base济南
  20. android 启动页主题_如何使用主题和启动器个性化您的Android手机

热门文章

  1. UGUI的image
  2. C++(多态实现原理)函数重写,重载,重定义
  3. 设计模式---组合模式(C++实现)
  4. PowerMockito问题解决一则
  5. Jenkins系列三通过脚本方式部署maven项目,maven聚合项目到Tomcat
  6. 6.2创建Docker镜像文件
  7. 【渝粤教育】 广东开放大学 21秋期末考试社会工作综合能力10411k2
  8. 2016北理复试机试题
  9. 【转载】Java工程师路线图
  10. mysql建表注意事项,关键字和保留字不能作为表名