FFMpeg分析2:AVInputFormat和AVOutputFormat
2016-06-28 17:03
1006 查看
我们先看一下音视频播放器的大概结构(个人想法,不保证正确):
1、数据源输入(Input)->
2、文件格式解析器(Demux)->
3、音视频解码(Decoder)->
4、颜色空间转换(仅视频)->
5、渲染输出(Render Output)。
前一篇介绍的几个struct是数据源输入模块里的内容,哪么这一帖所讲的就是第二个模块即文件格式解析器里用到的内容。
AVInputFormat、AVOutputFormat与URLProtocol类似,每一种文件类型都有一个AVInputFormat和AVOutputFormat静态对像并通过av_register_input_format和av_register_output_format函数链成一个表,其表头在utils.c:
/** head of registered input format linked list */
AVInputFormat *first_iformat = NULL;
/** head of registered output format linked list */
AVOutputFormat *first_oformat = NULL;
AVInputFormat和AVOutputFormat的定义分别在avformat.h,代码很长,不贴出来浪费空间了。
当程序运行时,AVInputFormat对像的
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
AVInputFormat *fmt,
int buf_size,
AVFormatParameters *ap)
{
fmt = av_probe_input_format(pd, 0);//返回该文件的AVInputFormat类型
}
至于AVOutputFormat嘛,下次再说吧,晚安!
1. AVOutputFormat -- Mixer
avformat_alloc_output_context2(&avFormatContext, NULL, NULL, filename);
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/e59bbd82fe30568a3c09d1e954634cbc)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/0cdce41b6870ae51d8eb7be45045cd04)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/f6515b5a9f8ec0fb9d25e419c03f8e7d)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/fb1c402b6022ae253518096e000d3c6c)
2. AVInputFormat [b]-- DeMixer[/b]
2.1 filePath
= “1.MP4”
avformat_open_input(&m_pFormatContext, filePath, NULL, &avdic);
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/80e949ce264ab4f269ea4b6aa032a1ce)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/27ab4f0693fd7a3ff9498af6c677d377)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/5b56fb3ed3719513b743e11e016fe2bb)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/588f1e7d7f946cb38201c4dfdfc24ca4)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/bf6c7dc2c4b466b25ecaa2c72c0d25fc)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/2b43de358e4f4a0e404664006d2a8d95)
2.2 filePath = “rtsp://192.168.5.147:8554/1"
avformat_open_input(&m_pFormatContext, filePath, NULL, &avdic);
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/e4ae6d3247a14432a4a4dd3bdc1104fa)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/619195f3379673af9d296deee86a466a)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/7344c635e5d6131c06e17438b907fbd2)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/0240cb7fd3bc9ac20f773031a79af482)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/3dafcdd667a709570df33a8759f6f5cc)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/bb23bff63453cac2236f8f44b9fbfa17)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/906c01b2f208e5a56f5e9c337c9f4a2b)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/14c468c4a54a2254521f8dc2c64debce)
http://blog.csdn.net/cosmoslife/article/details/7646997
1、数据源输入(Input)->
2、文件格式解析器(Demux)->
3、音视频解码(Decoder)->
4、颜色空间转换(仅视频)->
5、渲染输出(Render Output)。
前一篇介绍的几个struct是数据源输入模块里的内容,哪么这一帖所讲的就是第二个模块即文件格式解析器里用到的内容。
AVInputFormat、AVOutputFormat与URLProtocol类似,每一种文件类型都有一个AVInputFormat和AVOutputFormat静态对像并通过av_register_input_format和av_register_output_format函数链成一个表,其表头在utils.c:
/** head of registered input format linked list */
AVInputFormat *first_iformat = NULL;
/** head of registered output format linked list */
AVOutputFormat *first_oformat = NULL;
AVInputFormat和AVOutputFormat的定义分别在avformat.h,代码很长,不贴出来浪费空间了。
当程序运行时,AVInputFormat对像的
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
AVInputFormat *fmt,
int buf_size,
AVFormatParameters *ap)
{
fmt = av_probe_input_format(pd, 0);//返回该文件的AVInputFormat类型
}
至于AVOutputFormat嘛,下次再说吧,晚安!
1. AVOutputFormat -- Mixer
avformat_alloc_output_context2(&avFormatContext, NULL, NULL, filename);
2. AVInputFormat [b]-- DeMixer[/b]
2.1 filePath
= “1.MP4”
avformat_open_input(&m_pFormatContext, filePath, NULL, &avdic);
2.2 filePath = “rtsp://192.168.5.147:8554/1"
avformat_open_input(&m_pFormatContext, filePath, NULL, &avdic);
http://blog.csdn.net/cosmoslife/article/details/7646997
相关文章推荐
- Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值
- 使用ContentProvider 管理联系人
- php的序列化和反序列化有什么好处?
- php 文件分页类
- 解析PHP多种序列化与反序列化的方法
- thinkphp3.2与phpexcel带图片生成 完美案例
- FileOutputStream类
- PHP 数组和字符串互相转换实现方法
- thinkPHP 报错
- php防注入--sql
- Yii2.0框架的介绍和简单部署
- php学习笔记一
- 什么是PHP闭包???
- 当执行php脚本时用户关闭浏览器会发生什么?
- Cisco交换机STP--解决广播风暴
- php学习过程问题记录
- laravel请求
- php 连接sql 的时候无法识别地域
- PHP中foreach()用法汇总
- php创建对象。真!变!态!