如何基于FFMPEG和SDL写一个少于1000行代码的视频播放器

http://blog.sina.com.cn/s/blog_51396f890100nd91.html

http://lanhy2000.blog.163.com/blog/static/436786082012324114018127/

出于喜好,我很喜欢在 linux 下折腾一些影音相关方面的东西。以前在 windows 下折腾不起来,shell 不给力,ffmpeg 也是移植过去的,mplayer 更是杯具;现在在 linux 下,终于能尽情折腾了。

工欲善其事,必先利其器,正好最近整理文件,找到了以前收藏的用户手册,拿出来和大家分享。个人觉得最全面最正确的还是 man 文档,建议大家根据手册和 man 进行操作。

ffmpeg

均为英文资料。来源于 ffmpeg.org (via),官方还有开发手册等相关资料,我只摘录了比较常用的 docs(文档) , ffplay (播放器)和 faq  (问题解答),资料很齐全且简单易懂,故不做翻译。(官方还有ffserver等资料供您阅读)

docs: 在线阅读 (source)
ffplay: 在线阅读 (source)
faq:  在线阅读 (source)

ffmpeg 中文资料比较少,大部分都是讲解如何转码的,所以学习起来压力不大。最简单方式:

1
ffmpeg -i infile.format   outfile.format

输入文件.格式 ,输出文件.格式,然后转码,当然参数都是default啦。剩下的就是在 输入文件 输出文件 间加参数了,

1
ffmpeg  {[infile options]  [-i infile]}   {[outfile options] outfile}

参数较多,我写了个html,用以总结参数以及相关用法,还有几个小例子,您可以在这里浏览到这个页面。(如果大家有需求,我以后再写个相关教程以飨读者)

mplayer (mencoder)

说起来mplayer和ffmpeg算是同根同源了,所以 mplayer 用法和 ffplay 相似,mencoder 和 ffmpeg相似,所以您只需要学习了解mplayer 相关用法,即可熟练掌握 mencoder。

mencoder

http://baike.baidu.com/link?url=MDGPHhABwA3OzNo3YsmqIgPyqydesH28SYyc1tOI5TXi3wu1NPoNdNSj5_zQigYPE8h8q3X4_83ftiVId-vuC_

手册下载

vlc

本来是个一套流媒体解决方案中的客户端。 但客户端却比整套方案更早流行了起来,成为最著名的跨平台媒体播放器和框架之一。video lan比较著名的就是vlc和x264了。

前几天 linuxtoy 也介绍了几个 vlc 的教程:FLOSSManuals 上的教程ThinkDigit 的 Tips and Tricks 系列之 VLC 篇How-To Geek 上一篇关于怎样用 VLC 来 Rip DVD 的教程

我也分享以下我的 pdf 教程 下载地址

NET 2.0 调用FFMPEG,并异步读取输出信息的代码

ffmpeg

http://baike.baidu.com/link?url=jz8EzaHuIh5mRg9T9m4Zo7sTqarNI3HcwNMxEzXqLTqznfk82Tv5xaclvE6mRYUA

项目组成

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了领先的音/视频编码库libavcodec等。
libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构
和读取音视频帧等功能;
libavcodec:用于各种类型声音/图像编解码;
libavutil:包含一些公共的工具函数;
libswscale:用于视频场景比例缩放、色彩映射转换;
libpostproc:用于后期效果处理;
ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
ffsever:一个 HTTP 多媒体即时广播串流服务器;
ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;
 
 
源码下载:
http://www.ffmpeg.org/download.html
编译安装:
http://trac.ffmpeg.org/wiki/UbuntuCompilationGuide
 

<车载物联网项目,视频采集传输部分,第一天> FFmpeg的安装过程

http://blog.csdn.net/yangxuefeng09/article/details/9905419

 
 
 
 
Yasm是一个完全重写的NASM汇编。目前,它支持x86和AMD64指令集,接受NASM和气体汇编语法,产出二进 制, ELF32 , ELF64 , COFF , Mach - O的( 32和64 ) , RDOFF2 ,的Win32和Win64对象的格 式,并生成STABS 调试信息的来源,DWARF 2 ,CodeView 8格式。
 
http://baike.baidu.com/link?url=IlpLE_WHHPbawIktx6OhCpM67kRtKW713zSx6XzpdX3sVaQgDqXM8EknH3-_d5rL
AAC(Advanced Audio Coding)实际上是高级音频编码的缩写,AAC是由Fraunhofer IIS-A、杜比和AT&T共同开发的一种音频格式,它是MPEG-2规范的一部分。AAC所采用的运算法则与MP3的运算法则有所不同,AAC通过结合其他的功能来提高编码效率。AAC的音频算法在压缩能力上远远超过了以前的一些压缩算法(比如MP3等)。它还同时支持多达48个音轨、15个低频音轨、更多种采样率比特率、多种语言的兼容能力、更高的解码效率。总之,AAC可以在比MP3文件缩小30%的前提下提供更好的音质,被手机界称为“21世纪数据压缩方式”。 

因为“AAC”是一个大家族,他们是共分为9种规格,以适应不同场合的需要: 

a) MPEG-2 AAC LC 低复杂度规格 (Low Complexity) 

b) MPEG-2 AAC Main 主规格 

c) MPEG-2 AAC SSR 可变取样率规格 (Scaleable Sample Rate) 

d) MPEG-4 AAC LC 低复杂度规格(Low Complexity),现在的手机比较常见的MP4文件中的音频部份就包括了该规格音频文件 

e) MPEG-4 AAC Main 主规格 

f) MPEG-4 AAC SSR 可变取样率规格 (Scaleable Sample Rate) 

g) MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition) 

h) MPEG-4 AAC LD 低延迟规格(Low Delay) 

i) MPEG-4 AAC HE 高效率规格(High Efficiency) ===》又称为AAC+

上述的规格中,主规格“Main”包含了除增益控制之外的全部功能,其音质是最好,而低复杂度规格则是比较简单,没有了增益控制,但提高了编码效率,至“SSR”对“LC”规格大体是相同,但是多了增益的控制功能,另外,MPEG-4/AAC/LTP/LD/HE,都是用在低码率下编码,特别是“HE”是有Nero ACC编码器支持,是近来多用的一种编码率种,不过通常来说,Main规格和LC规格的音质相差是不大,因此目前使用最多的AAC规格多数是“LC”规格,因为要考虑手机目前的内存能力未达合理水平。 

由于AAC格式家族比较庞大,要了解他,首先要清楚其各有不同的编码器,在目前是包括了商业的,免费的 AAC 格式音频编码器,其中几个主要的有如下 : 

a) FhG Fraunhofer IIS研发的权威编码器,拥有很好的音质,可惜不对外开放了。 

b) Nero AAC可能是目前最完美的AAC编码器了,(千千静听就是用的此编码器)同时支持"LC AAC/HE AAC"规格,Nero AAC编码器提供了品质最好的"VBR LC AAC"格式,同时亦对面"HE AAC"规格保证了在低码率下也有良好的表现,目前索尼爱立信W800和K750等手机都支持该编码器。 

c) QuickTime/iTune Apple公司的两款Media软件都提供了AAC编码功能,其编码技术来自“DolbyLaboratories”,是目前音质最好的中码编率编码器,它编码的48kbps立体声音质比其它AAC编码器好20 - 25%,甚至64 kbps的Dolby AAC音效可媲美128 kbps的MP3。 

d) FAAC也是一种很好的命令行编码器,只支持“LC”规格,但音质相当不错,与一般商业用的编码器接近水平,而这个软件更是免费来的,索尼爱立信W800和K750等手机也是同样支持这个编码器。 

另外还有Psytel,Coding Technologies,HHI/z Plane(Compaact),Dolby AAC等AAC编码器,而其它如Panasonic,Nokia,AT&T,NEC等公司也都有独家开发的编码器,在大家弄清楚这些AAC格式音频规格和编码器之后,我们就不难知道为什么同一款Nokia手机会支持看起来都是AAC格式音频的诸多文件格式了,比如Nokia 6230i就是既支持AAC格式也支持M4A格式和MP4格式的机型,而这些音频文件格式其实都是属于AAC家族成员的!
MP3与Lame
http://biosea.blog.hexun.com/4436555_d.html

1、Lame是什么?
  Lame是目前最好的MP3编码引擎。从1998年12月至今,Lame已被越来越多人的公认为是MP3压缩的最佳利器。Lame编码出来的MP3音色纯厚、空间宽广、
低音清晰、细节表现良好,它独创的心理音响模型技术保证了CD音频还原的真实性,配合APX(APX)参数,可以取得音质几乎媲美CD音频的小体积文件。
对于一个免费引擎来说,Lame的优势不言而喻。

默认情况下,Lame只支持从*.wav(波形文件)压缩到*.mp3。网上也提供一些修改版,加入了从*.ape格式直接压缩成*.mp3。需要注意的 是,MP3的转换最好是采用高质量的音源格式,如CD转录后的wav、ape、flac等,而诸如wma、rm等已经经过压缩的音源转换成MP3则豪无意 义。

2、上边提到的VBR和ABR是什么?还有CBR?
 
 VBR(Variable
Bitrate)动态比特率。也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率。这是Xing发展的算法,他们将一首歌的复
杂部分用高Bitrate编码,简单部分用低Bitrate编码。主意虽然不错,可惜Xing编码器的VBR算法很差,音质与CBR相去甚远。幸运的
是,Lame完美地优化了VBR算法,使之成为MP3的最佳编码模式。这是以质量为前提兼顾文件大小的方式,推荐编码模式。

  ABR(Average
Bitrate)平均比特率,是VBR的一种插值参数。Lame针对CBR不佳的文件体积比和VBR生成文件大小不定的特点独创了这种编码模式。ABR也
被称为“Safe
VBR”,它是在指定的平均Bitrate内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量。举
例来说,当指定用192kbps
ABR对一段wav文件进行编码时,Lame会将该文件的85%用192kbps固定编码,然后对剩余15%进行动态优化:复杂部分用高于192kbps
来编码、简单部分用低于192kbps来编码。与192kbps CBR相比,192kbps
ABR在文件大小上相差不多,音质却提高不少。ABR编码在速度上是VBR编码的2到3倍,在128-256kbps范围内质量要好于CBR。可以做为
VBR和CBR的一种折衷选择。

CBR(Constant Bitrate),常数比特率,指文件从头到尾都是一种位速率。相对于VBR和ABR来讲,它压缩出来的文件体积很大,但音质却不会有明显的提高。

对MP3来说Bitrate是最重要的因素,它用来表示每秒钟的音频数据占用了多少个bit(bit per second,简称bps)。这个值越高,音质就越好。

http://baike.baidu.com/link?url=uu2N1znwR0vrh7bpkiKAha9CSozQ_Wy7QWj6661ZT8FqsZil9AzhquXRbCqjOodqzJs0GYZtiWL-srbN4MdmxK

Opus编码器 是一个有损声音编码的格式,由互联网工程任务组(IETF)进来开发,适用于网络上的实时声音传输,标准格式为RFC 6716。Opus 格式是一个开放格式,使用上没有任何专利或限制。

Opus的前身是celt编码器。在当今的有损音频格式争夺上,拥有众多不同编码器的AAC格式打败了同样颇有潜力的Musepack、Vorbis等格 式,而在Opus格式诞生后,情况似乎不同了。通过诸多的对比测试,低码率下Opsu完胜曾经优势明显的HE AAC,中码率就已经可以媲敌码率高出30%左右的AAC格式,而高码率下更接近原始音频。Opus格式音频可以使用GStreamer, libavcodec(ffmpeg),Foobar2000,Firefox(15 Beta或更新)等播放,推荐Foobar2000 1.1.14 beta 1或者更新的版本播放

http://baike.baidu.com/link?url=J5K0LmIShYGGkrbiNMAWvXLhjh9AN-ZQYfBw4fCesKjqZol1dOv7dkchOBUtkJBu

SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码 就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。

SDL内置了调用OpenGL的函数。
通过使用SDL_image、SDL_ttf、SDL_mixer、SDL_net等外部扩展库,可以轻松实现JPG、PNG、TIFF图像的加载使用,TrueType字体的使用,MP3文件的使用、网络相关的使用等。

ffmpeg & mplayer & vlc 手册(转)的更多相关文章

  1. Install FFmpeg, Mplayer, Mencoder, MP4Box, Flvtool2

    You can use the following tutorial to install ffmpeg and other video modules in your centos server.F ...

  2. SRS流媒体服务器搭建+ffmpeg推流VLC取流观看

    一.编译SRS https://github.com/winlinvip/simple-rtmp-server 目前有1.0-release.2.0.3.0等版本 2.0官方文档地址:https:// ...

  3. MPlayer 使用手册中文版

    播放文件 使用 MPlayer 播放媒体文件最简单的方式是: mplayer <somefile> MPlayer 会自动检测文件的类型并加以播放,如果是音频文件,则会在命令行中显示该播放 ...

  4. ffmpeg 、Vlc参数

    ffmpeg.exe -loglevel error -probesize 32 -vsync passthrough -framerate 20 -f gdigrab -i desktop -fil ...

  5. ffmpeg 速查手册

    ref : http://linux.51yip.com/search/ffmpeg ffmpeg是一个源于Linux的工具软件,是FLV视频转换器,可以轻易地实现FLV向其它格式avi.asf. m ...

  6. How to install ffmpeg,mp4box,mplayer,mencoder,flvtool2,ffmpeg-php on centos

    1. Enable RPM Fusion yum repository The CentOS rpm packages of ffmpeg, mplayer, mencoder and MP4Box ...

  7. 谷歌修复了 FFmpeg 中上千个 bug

    谷歌在科技业界中几乎每天都会创造出新闻素材,它的触手涉及到了生活中的多个领域.最近谷歌将其Google +社交网络与邮件服务Gmail相结合.然而今天谷歌宣布他们修复了FFmpeg的上千个bug.   ...

  8. ffmpeg相关资源

    FFPLAY的原理(一) http://blog.csdn.net/shenbin1430/article/details/4291893 ubuntu12.04下命令安装ffplay等: sudo ...

  9. crosss compile VLC with OpenMAX on ARM board(RockChip RK3399),in order to use Hard Acceleration when decode video

    reference:http://www.x90x90x90.com/en/raspberry-pi-3-howto-compile-vlc-with-hardware-acceleration/ 1 ...

随机推荐

  1. BZOJ3619 [Zjoi2014]璀灿光华 构造+dfs

    题意:有一个\(a^3\)个小正方体组成的大正方体,其中有n个正方体会向上下左右前后六个方向中的一个发出光,正方体是透光的,被照亮的正方体有个美丽值\(g_{i}\),给出正方体的相邻关系,问美丽值之 ...

  2. 【贪心】BZOJ3668-[NOI2014]起床困难综合症

    [题目大意] 给定n次操作(与,或,异或),在0~m中选择一个数,使这个数经过n次操作后得到的值最大. [思路] 水题orz 枚举这个数每一位的取值是0还是1,然后根据它经过n次操作后的结果判断: ( ...

  3. mac安装redis拓展

    安装 下载源码 编译安装 添加拓展 添加权限重启 安装 在mac上安装了php7.1.7 php -m 查看安装的拓展,没有redis,以前可以brew install php71-redis简单命令 ...

  4. BZOJ 2818: Gcd 筛法

    2818: Gcd 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2818 Description 给定整数N,求1<=x,y< ...

  5. HDU 5297 Y sequence 容斥 迭代

    Y sequence 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5297 Description Yellowstar likes integer ...

  6. Ubantu14.04下编译OpenCV3.0.0以及读取图片例子

    以前一直使用opencv 2.x的版本,现在3.0的已经发布成正式版了,尝试在Linux下安装. 收集了一篇不错的经验教程: Ubuntu14.04下安装OpenCV3.0经验. 编译的过程大概需要3 ...

  7. react-native-communications 电话、短信、邮件、浏览器

    第一种方法:Linking:调用系统的电话.短信.邮件.浏览器等功能 Linking.canOpenURL(this.props.url).then(supported => { if (!su ...

  8. 不错的VS2010扩展——JSEnhancements,让js和css也折叠

    在Visaul Studio 2010中写js或css代码,缺少像写C#代码时的那种折叠功能,当代码比较多时,就很不方便. 今天发现,已经有VS2010扩展支持这个功能,它就是——JSEnhancem ...

  9. Spring Bean InitializingBean和DisposableBean实例

    在Spring中,InitializingBean和DisposableBean是两个标记接口,为Spring执行时bean的初始化和销毁某些行为时的有用方法. 对于Bean实现 Initializi ...

  10. JavaScript学习10:动态载入脚本和样式

    我们在写Web页面的时候,须要引入非常多的JavaScript脚本文件和CSS样式文件,尤其是在站点需求量非常大的时候,脚本的需求量也随之变大,这样一来,站点的性能就会大打折扣.因此就出现了动态载入的 ...