您的位置:首页 > 其它

深入分析FFmpeg之一-打开媒体文件并读取文件头信息

2014-01-03 15:41 399 查看



三哥的技术专栏,转载请注明出处!!!


分析了一段时间的ffmpeg源代码,是时候写个笔记做个总结了。所以决定写一系列关于分析FFmpeg架构及API使用的笔记,现在计划涵盖的内容包括从打开一个媒体文件(access)到demux,然后到decode,最后render出来这整个过程,循序渐进,当然也包括转码过程, 其中每个过程我都会尽量仔细分析并对源代码注释,并给出相应的实例代码。希望能够让刚接触ffmpeg的朋友获得一些帮助,因为ffmpeg方面的资料确实很少,自己学习的时候也走了不少弯路。


FFmpeg版本2.1, 我的操作环境是Ubuntu12.04 X64, GCC4.6.1.  

ffmpeg是一套功能非常不可思议的开源的多媒体框架,而且开发速度很快,如果感兴趣可以加入到ffmpeg开发的邮件列表,甚至为ffmpeg做出自己的贡献。

首先可以去ffmpeg的官网下载最新版的ffmpeg,我这里的版本是2.1,因为ffmpeg是开源的,依赖于gcc,所以最好在linux下编译和开发,如果实在想用windows,那么也可以在windows上安装cygwin(一个仿linux的环境),不过笔者还是建议在linux下编译和开发。编译和安装都很简单,这里还是废话一下,执行.configure来产生Makefile,然后执行make;makeinstall安装ffmpeg库到系统,之后就可以进行ffmpeg的开发了,当然知识想调用ffmpeg的SDK的话可以不用下载源码,仅仅下载SDK(包括ffmpeg的几个库和相应的include文件).

下面一段代码非常简单,仅仅几行就可以读出媒体文件的信息,这段程序主要是用了ffmpeg中的libavformat库下面先贴出程序的执行效果



点击(此处)折叠或打开

#include <libavformat/avformat.h>

//#include <libswscale/swscale.h>

static ShowUseage(const char* p)

{

    printf("you must specify an input file as: %s youfile.avi!!!\n", p);

}

int main(int argc, char* argv[])

{

    AVFormatContext *pFormatContext = NULL;

    if(argc<2)

    {

        ShowUseage(argv[0]);

        return -1;

    }

    char *filepath = argv[1];

    av_register_all();

    //pFormatContext = avformat_alloc_context();

    if(avformat_open_input(&pFormatContext,filepath,NULL,NULL)!=0) //Open the media file and read the header

    {

        printf("Can not open the media file you specified!\n");

        return -1;

    }

    printf("****************file information*****************\n");

    av_dump_format(pFormatContext,0,filepath,0); //dump input information to the stdio

    printf("*************************************************\n");

    avformat_close_input(&pFormatContext);

    return 0;

}

阅读(576) | 评论(0) | 转发(0) |

0
上一篇:C++中关于全局对象的初始化顺序

下一篇:FFmpeg深入分析之零-基础

相关热门文章
《Linux性能及调优指南》1.3 L...

automake,autoconf使用详解...

关于multipart方式上传文件的...

大数据的存储和标准化...

Linux 运行时内核分析

test123

编写安全代码——小心有符号数...

使用openssl api进行加密解密...

一段自己打印自己的c程序...

sql relay的c++接口

socket编程开启混杂模式的目的...

C++ 嵌套类是干什么的?...

C++ 单例怎么写?

sizeof 这个操作符都有什么特...

Oracle VM server 如何删除vm ...

给主人留下些什么吧!~~

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: