最近在研究音视频编解码这一块儿,看到@bitbit大神写的【各种音视频编解码学习详解】这篇文章,非常感谢,佩服的五体投地。奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读。大神博客传送门:https://www.cnblogs.com/skyofbitbit/p/3651270.html。若读过@bitbit大神写的【各种音视频编解码学习详解】这篇文章,就不用向后看啦
用于在 Flash 中压缩视频。FLV流媒体格式是一种新的视频格式,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上有效使用等 缺点。一般FLV文件包在SWF PLAYER 的壳里,并且FLV可以很好的保护原始地址,不容易被下载到,从而起到保护版权的作用。
Flash介绍
Flash Video是一个文件容器格式,是Adobe Flash播放器版本6-10用于在互联网上传递视频。Flash视频内容也可以封装在SWF文件。Flash视频有两种不同的文件格式:FLV和 F4V。FLV文件中,同SWF文件一样音频和视频数据采用相同方式进行编码。晚出现的F4V,它的格式是基于ISO为基础的媒体文件格式,并在 Flash Player 9 update 3中开始得到支持。这些格式Adobe Flash播放器都能支持,并由Adobe公司开发,其中FLV最找石油Macromedia公司开发的。
Flash视频FLV文件所包含的媒体的编码通常采用Sorenson Spark和VP6视频压缩格式。最新发布的Flash播放器支持H.264视频和HE-AAC音频。所有的这些编解码目前受到专利的限制。
Sorenson编解码看参考以下两种专用的视频编解码:Sorenson Video或者Sorenson Spark。Sorenson Video也被称为Sorenson Codec,Sorenson Video Quantizer或者SVQ。Sorenson Spark也称为Sorenson H.263。这些编解码都是有Sorenson 媒体公司设计(及以前的Sorenson Vision公司)。Sorenson Video在Apple的QuickTime中使用,SorensonSpark在Adobe Flash(以前的MacromediaFlash)中使用。
Flash视频通过广泛使用的Adobe Flash播放器和浏览器的plugin或者其他的第三方程序,使它能在绝大多是的操作系统都可以使用。
通常Flash视频FLV文件包含的视频比特流是一个专有的H.263视频标准的变体,FourCC为 FLV1(Sorenson Spark)。SorensonSpark是一个FLV文件老式编解码,但被广泛应用和兼容,因此它是第一个被Flash Player支持的视频编解码。这是在Flash Player 6和7要求的视频压缩格式。Flash Player 8和更新的版本支持On2 TrueMotion VP6视频比特流回放(FourCC VP6F或者FLV4)。On2 VP6是FlashPlayer 8或者更高版本优先使用的视频压缩格式。On2 VP6可以提供能够提供比Sorenson Spark更高视觉质量,尤其在低比特流中。另外它的计算更为复杂,因此在某些古老的系统配置中无法很好使用。
Flash 9 update 3,在2007年12月3日释放,提供了新的Flash视频文件格式F4V,支持H.264视频标准(也即MPEG-4part 10或者AVC),H.264需要更复杂的技术,但是提供更加卓著质量/比特流比例。具体而言,Flash播放器现在支持H.264视频压缩(MPEG- 4 Part 10),AAC音频压缩(MPEG-3 Part 3),F4V,MP4(MPEG-4 Part14),M4V,3GP和MOV多媒体容器格式,3GPP Timed Text标准(MEPG-4 Part 17)(这是一个标准的的字幕格式,能够部分解析ID3的’ilist’,等同于iTunes使用的metadata存储。不支持MPEG-4 Part 2视频(例如有DivX或者Xvid创建)。Jonathan Gay,一个Flash的主要程序员在接收BBC新闻采访时表示:公司最初想在Flash中使用H.264,但是被每年5百万美金(3.5百万英镑)的专 利许可费而却步。
Flash Video FLV文件格式支持两个成为“screenshare‘(Screen Video)编解码的版本,这是一种用于桌面演示的编码格式。这两种格式都是基于tmap平铺方式,可以通过减少色深进行有损编码,并使用zlib压缩。 第二个版本之在Flash播放器8以及更新的版本支持。
在Flash视频文件中,通常使用MP3作为音频编码然而,在Flash视频FLV文件通过麦克风录音使用专用 的Nellymoser Asao编解码(Flash Player 10 在2008年发布,也支持开源的Speex编解码)。FLV文件支持不压缩的音频或ADPCM音频格式。最新的Flahs Player 9 支持AAC(HE-AAC/AAC SBR,AAC Main Profile,和AAC-LC)。
编码为Flash Video文件有一个编码工具提供,包括Adobe的Flash Professional和Creative Suite产品,On2的Flix编码工具,SorensonSqueeze,FFmepg和其他第三方工具。
容器
在2002年发布的Flash Player6增加了对SWF文件格式的支持。在2003年,FlashPlayer7增加了对FLV文件格式的直接支持。由于FLV文件格式的限制,Adobe System公司在2007年提出下面列出的新的文件格式,是基于ISO基本媒体文件格式(MPEG-4 Part 12)。Flash播放器不检查文件的扩展名,而直接查看文件,检查属于那种格式。
文件扩展名 |
Mime Type |
描述 |
.f4v |
video/mp4 |
Video for Adobe Flash Player |
.f4p |
video/mp4 |
Protected Video for Adobe Flash Player |
.f4a |
video/mp4 |
Audio for Adobe Flash Player |
.f4b |
video/mp4 |
Audio Book for Adobe Flash Player |
在Flash Player6及以后的版本对SWF文件的支持,使得可以与Adobe Flash媒体服务器通过RTMP来进行音频,视频和数据的交互。Flash媒体服务器的数据支持采用FLV文件格式的文件(MIME类型为 video/x-flv)。从Flash Player 9 Update 3开始创建的SWF文件,Flash Player可以播发新的F4V文件格式。
媒体格式
在FLV文件中支持的媒体类型:
在F4V文件中支持的媒体类型:
在Flash Player和Flash Video中支持的音视频压缩格式 |
||||
Flash Player version |
Released |
File format |
Video compression formats |
Audio compression formats |
6 |
2002 |
SWF |
Sorenson Spark, Screen video |
MP3, ADPCM, Nellymoser |
7 |
2003 |
SWF, FLV |
Sorenson Spark, Screen video |
MP3, ADPCM, Nellymoser |
8 |
2005 |
SWF, FLV |
On2 VP6, Sorenson Spark, Screen video, Screen video 2 |
MP3, ADPCM, Nellymoser |
9.0.115.0 |
2007 |
SWF, FLV |
On2 VP6, Sorenson Spark, Screen video, Screen video 2, H.264[*] |
MP3, ADPCM, Nellymoser, AAC[*] |
SWF, F4V, ISO base media file format |
H.264 |
AAC, MP3 |
||
10 |
2008 |
SWF, FLV |
On2 VP6, Sorenson Spark, Screen video, Screen video 2, H.264[*] |
MP3, ADPCM, Nellymoser, Speex, AAC[*] |
SWF, F4V, ISO base media file format |
H.264 |
AAC, MP3 |
[*]在FLV文件格式中使用H.264和AAC压缩有一些限制,Flash Player的作者强烈推荐大家使用新的F4V文件格式。
Flash传递的几种方式
一、作为一个标准的flv文件。
二、嵌入SWF文件,使用Flash认证工具(在FlashPlayer 6及以后的版本支持)。
三、通过HTTP的渐进流下载(progressive download)。这种方式使用ActionScript,包括客户端侧的一个外部托管Flash Video文件用于播放。然而,和使用RTMP的媒体流不一样,HTTP“流”不支持实时广播。HTTP流要求一个定制的播放器以及包含每个关键帧精确开 始字节位置以及时间码的特定FlashVideo元数据的加入。使用这些特定的信息,定制Flash Video播放器可以要求在任何指定的关键帧中开始播放。例如,Google Video,Youtube和BitGravity支持渐进流下载,可以在缓存满之前查看视频的任何部分。在服务器侧,这种“假HTTP流“方式实现相当 简单,例如可以采用Apache的PHP模块,使用lighttpd。
四、采用RTMP协议的流,可提供的有Flash媒体服务器(以前称为Flash Communication Server),VCS,Electro Server,Helix Universal Serval,Wowza Pro,用于.NET的WebORB,用于Java的WebORB,以及开源的Red5服务器。在2008年4月,这个协议有流录像提供,不需要重新编码 的screencast软件。
RTMP,实时消息协议,Real Time Message Protocol是一个有Adobe System为在互联网的音频,视频和数据流开发的私有协议,运行在Flash播放器和服务器之间。RTMP协议有三个方式:
1、 通过在TCP上,使用1935端口的“纯”协议。
2、 用于在穿越防火墙时,在HTTP请求中封装的RTMPT。
3、 在HTTPS的安全连接中使用的RTPMS。
注:上述材料来源于wiki的整理。