近期项目涉及到流媒体等开发,因为有过开发经验深知其难度所在,没办法仅仅能又一次拾起,最新版的SDK被改的一塌糊涂,只是大体的开发思路都是一样的,看多少书查多少资料都无用,一步一步的编写代码 才是学好的关键。



我会把每一天的学习经过,更新到博文上,希望能给很多其它想学习的人带来帮助,篇尾附上project     以及最新版本号SDK。

FFMPEG被大多数的人命令行来使用,事实上在真正的流媒体开发中,要想灵活运用其开发流媒体应用层序,必须使用官方SDK开发  ,实际上我们市面上好多产品

都是基于FFMPEG,比方 XX影音  。。

FFMPEG官网  http://www.ffmpeg.org/

API地址       http://www.ffmpeg.org/doxygen/trunk/index.html

因为在windows下编译很痛苦,所以还是推荐大家去直接下载编译好的二进制文件,注意官网上并没有直接完整的开发包,你须要分别取下载Linux或者windows下的

共享库 对于windows下还须要下载 .lib导入库,因为我是windows下 这里我就提供windows下载地址

http://ffmpeg.zeranoe.com/builds/   这个页面能够下载到 动态库和到入库 。

。由于FFMPEG已经交由别的组织维护了。。

在以下这个页面找吧 另一点就是 既然用人家的东西 记住一定要遵循LGPL或GPL许可证...别给国人丢脸  

人家老外都这么说了 

Donating shows that you benefit from my work and are thankful for the time I spend on it. So if you like my work and would like to see more, feel free to donate, if you can't right now don't worry about it and just enjoy
using FFmpeg on Windows. Thank you to everyone who has donated in the past!

具体不废话了,怎样配置项目啥的,这都是新手级别的问题,我就不具体说明了 直接上代码加凝视     我会提供源码下载 。。。project配置好的 大家下载研究即可

// ffmpeg_test.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"  

#include <windows.h>
#ifdef _CPPRTTI
extern "C"
{
#endif
#include "libavcodec/avcodec.h" //编解码器
#include "libavformat/avformat.h" //格式上下文
#include "libavformat/avio.h" //音视频IO
#include "libavutil/file.h" //处理文件
#ifdef _CPPRTTI
};
#endif void SetStdClr(WORD wd)
{
SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE),wd );
} int _tmain(int argc, _TCHAR* argv[])
{
//注冊全部 编码器 解析器 二进制流过滤器
av_register_all();
avcodec_register_all();
SetStdClr(FOREGROUND_RED | FOREGROUND_GREEN);
AVFormatContext *pContext=NULL;//格式上下文
int errNo=0 ;
pContext=avformat_alloc_context();
//打开输入文件 新接口
if(0==avformat_open_input(&pContext,".\\test.mp4",nullptr,NULL)){
printf("打开文件输入成功!\n");
}else
return 0;
//从上下文检索流信息
if(0==avformat_find_stream_info(pContext,NULL))
{
printf("获取流信息成功!\n");
}else
return 0 ;
//循环多个流
SetStdClr(FOREGROUND_RED | FOREGROUND_BLUE);
for (unsigned int i=0;i<pContext->nb_streams;i++)
{ //媒体流
AVStream *pStream = pContext->streams[i];
//帧率信息 为有理数/无理数
AVRational frame =pStream->r_frame_rate; // 时间比率单位
AVRational timeBase = pStream->time_base; //流的持续时间 比特率
int64_t duration= pStream->duration ;
printf("媒体持续时间%d\n",duration);
//获取编码类型
AVCodecContext *pCodecContext=pStream->codec ;
//获取 媒体类型
/************************************************************************/
/*
enum AVMediaType {
AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA
AVMEDIA_TYPE_VIDEO,
AVMEDIA_TYPE_AUDIO,
AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous
AVMEDIA_TYPE_SUBTITLE,
AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse
AVMEDIA_TYPE_NB
};
*/
/************************************************************************/
AVMediaType avMediaType=pCodecContext->codec_type;
//编码器ID
AVCodecID codecID=pCodecContext->codec_id ;
if(avMediaType == AVMEDIA_TYPE_AUDIO)
{
//假设是视频
int audioChannels = pCodecContext->channels;
int samplerate = pCodecContext->sample_rate;
PixelFormat pixelFormat = pCodecContext->pix_fmt;
printf("Stream%d音频\n",i);
printf("音频採样频率%d/%d\n",timeBase.num,timeBase.den);
printf("音频时间单位%d/%d\n",timeBase.num,timeBase.den);
printf("音频通道数%d\n",audioChannels); }
else if(avMediaType == AVMEDIA_TYPE_VIDEO)
{
//假设是音频
int videoWidth = pCodecContext->width;
int videoHeight = pCodecContext->height;
AVSampleFormat sampleFmt = pCodecContext->sample_fmt;
printf("Stream%d视频\n",i);
printf("帧率帧率%d/%d\n",frame.den,frame.num);
printf("视频时间单位%d/%d\n",timeBase.num,timeBase.den);
printf("图像宽度:%d\t高度:%d\t%\n",videoWidth,videoHeight);
printf("图像宽度:%d\t高度:%d\t%\n",videoWidth,videoHeight);
}
switch(codecID)
{
case AV_CODEC_ID_AAC:
printf("编码器FAAC\n");
break;
case AV_CODEC_ID_H264:
printf("编码器H264\n");
break;
} }
//释放上下文环境
if(!pContext)
{
avformat_close_input(&pContext);
}
return 0;
}

执行结果例如以下:

project下载地址

http://download.csdn.net/detail/yue7603835/8268095

基于FFMPEG SDK流媒体开发1---解码媒体文件流信息的更多相关文章

  1. FFMPEG SDK流媒体开发2---分离.mp4等输入流音视频而且进行解码输出

    对于FFMPEG SDK  提供的Demuxing 为我们实现多路复用  提供了非常多方便,以下的案案例 实现的是 分离一个媒体文件的音频 视频流 而且解码输出 到  不同的文件里. 对于音频被还原回 ...

  2. 基于ffmpeg的流媒体服务器

    OS:ubuntu 12.04ffmpeg:N-47141-g4063bb2x264:0.133.2334 a3ac64b目标:使用ffserver建立流媒体服务器使用ffmpeg对本地文件流化(x2 ...

  3. 流媒体Red5服务自定义媒体文件路径

    4. 创建类实现自定义媒体访问路径 使用bean对自己的项目进行配置,更换默认的视频播放目录和视频录制目录.在0.6版的时候, 我们可以直接在red5-web.properties中写入playbac ...

  4. FFMPEG SDK 开发介绍(原创)

    来源:http://blog.sina.com.cn/s/blog_62a8419a01016exv.html 本文是作者在使用ffmpeg sdk开发过程中的实际经验,现在与大家分享,欢迎学习交流. ...

  5. 用C/C++开发基于VLC SDK的视频播放器

    在windows系统如果开发万能播放器,一般都是基本DirectShow来开发,开发也很简单,但缺点也很多,一个文件格式是否能够播放完全取决于你 是否安装了正确的解析器和解码器,即使现在有了万能解器安 ...

  6. FFmpeg SDK开发模型之中的一个:解码器

    简单介绍 本例解说了怎样使用ffmpeg SDK解码媒体文件: 參考源代码是ffmpeg 自带的apiexample.c 一.源代码#include <stdlib.h>#include ...

  7. 流媒体开发之--HLS--M3U8解析(2): HLS草案

    目录 1 简介 2 2 概述 2 3 播放列表文件 3 3.1 介绍 3 3.2新标签 4 3.2.1 EXT-X-TARGETDURATION 4 3.2.2 EXT-X-MEDIA-SEQUENC ...

  8. Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器

    基于NDK开发Android平台RTSP播放器 最近做了不少android端的开发,有推流.播放.直播.对讲等各种应用,做了RTMP.RTSP.HTTP-FLV.自定义等各种协议,还是有不少收获和心得 ...

  9. EasyDarwin开源音频解码项目EasyAudioDecoder:基于ffmpeg的安卓音频(AAC、G726)解码库(第一部分,ffmpeg-android的编译)

    ffmpeg是一套开源的,完整的流媒体解决方案.基于它可以很轻松构建一些强大的应用程序.对于流媒体这个行业,ffmpeg就像圣经一样的存在.为了表达敬意,在这里把ffmpeg官网的一段简介搬过来,ff ...

随机推荐

  1. MySQL(C#的链接姿势)

    介绍 这篇随笔主要介绍MySQL的基础API的使用姿势 基本使用姿势: 第一步:登陆数据库 string connStr = "Database=start;datasource=127.0 ...

  2. 如何用纯 CSS 创作一种按钮被瞄准的交互特效

    效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. 在线演示 https://codepen.io/zhang-ou/pen/ELWMLr 可交互视频教程 此视 ...

  3. ThinkPHP foreach标签

    $optionvalue = array( 'MSGTYPE_TEXT'=>'文本消息', 'MSGTYPE_EVENT_SCAN'=>'扫描事件', 'MSGTYPE_EVENT_sub ...

  4. POJ 2485 Highways (求最小生成树中最大的边)

    Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has no public h ...

  5. Vue微信自定义分享时安卓系统config:ok,ios系统config:invalid signature签名错误,或者安卓和ios二次分享时均config:ok但是分享无效的解决办法

    简述需求:要求指定页面可以进行微信自定义分享(自定义标题,描述,图片,链接),剩下的页面隐藏所有基础接口.二次分享依然可以正常使用,切换至其他页面也可以正常进行自定义分享. 这两天在做微信自定义分享的 ...

  6. LINUX常用文件说明

    一.网络配置 1.修改主机名 /etc/sysconfig/network或/etc/hosts 2.开启或关闭网卡 ifconfig eth0 down/up 3.linuxa下查看一个网卡绑定的所 ...

  7. 【02】使用Firebug查看和编辑HTML和CSS

    使用Firebug查看和编辑HTML和CSS 描述 在本章节的教程中,我们将讨论如何使用Firebug查看和编辑HTML和CSS. 使用Firebug查看和编辑HTML 在你要查看的元素上右击鼠标然后 ...

  8. Flask设计带认证token的RESTful API接口[翻译]

    上一篇文章, 使用python的Flask实现一个RESTful API服务器端  简单地演示了Flask实的现的api服务器,里面提到了因为无状态的原则,没有session cookies,如果访问 ...

  9. 【转】关于大型网站技术演进的思考(十三)--网站静态化处理—CSI(5)

    讲完了SSI,ESI,下面就要讲讲CSI了 ,CSI是浏览器端的动静整合方案,当我文章发表后有朋友就问我,CSI技术是不是就是通过ajax来加载数据啊,我当时的回答只是说你的理解有点片面,那么到底什么 ...

  10. [luoguP2016] 战略游戏(DP)

    传送门 f[i][0]表示不选当前节点,当前节点的所有儿子节点都选f[i][1]表示选当前节点,儿子节点可选可不选 #include <cstdio> #include <cstri ...