一个完整的多媒体文件是由音频和视频2部分组成的。H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式。字幕文件只是其中附带部分。
把视频编码和音频编码打包成一个完整的多媒体文件,可以有不同的方式,这种方式便是所谓的封装方式, 不同的封装方式有不同的后缀。由于有些封装方式具有很强的灵活性,它可以把各种不同的音视频文件打包成一个文件,因此会出现这么一种情况,虽然文件的后缀 是相同的,但有些可以正常播放,而有些不能播放,毕竟任何一种播放软件都不是万能的。部分先进的封装方式还可以同时封装多个音频编码文件,甚至同时封装进 字幕文件,如MKV封装方式。MKV文件可以做到一个文件包括多种语种发音,多语字幕以适合不同的人观看。
----------------------------------------------------------------------------------------------
目前有最常见的编码方式:
mpeg1:vcd使用的就是这种编码格式,分辨率是352*288,压缩比低
mpeg2:一般DVD使用,有NTSC(720*480)和PAL (720*576),和mpeg1一样属于即将被淘汰的编码格式。
mpeg4 :目前使用最多的技术,avi文件始祖,大大提高压缩比,而质量堪比DVD
divx:基于mpeg4开发的,有一定算法优化
xvid:divx技术*之后被人破解开发的,也是基于mpeg4的编码技术, 更先进,采用开放源码,画质更好
h.261:早期的低码率编码,应用于352x288和176x144,现在已不用
h.263:在低码率下能够提供比H.261更好的图像效果,改进一些算法
h.263+:h.263的改进型
h.264 :H.264集中了以往标准的优点,高效压缩,
RV.10 RV.13 RV.20 RV.30 RV40: real 公司推出的应用于网络的高压缩编码,是不同时期rm和rmvb的编码
-----------------------------------------------------------------------------------------
封装格式(也叫容器):所谓封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个 放视频轨和音频轨的文件夹也可以。说得通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个碗,或者一个锅,用来盛放饭菜的容器。
AVI:微软在90年代初创立的封装标准,是当时为对抗quicktime格式(mov)而推出的,只能支持固定CBR恒定
定比特率编码的声音文件。
ts和ps:PS封装只能在HDDVD原版,
mov: MOV是Quicktime封装
WMV:微软推出的,作为市场竞争
mkv:万能封装器,有良好的兼容和跨平台性、纠错性,可带外挂字幕。
flv: 这种封装方式可以很好的保护原始地址,不容易被下载到,目前一些视频分享网站都采用这种封装方式
rmvb/rm:Real Video,由RealNetworks开发的应用于rmvb和rm的不同封装方式。rm是固定码率,rmvb是动态
码率(就是静态画面采用用低码率,动态采用高码率)
MP4:主要应用于mpeg4的封装,主要在手机上使用。
3GP:目前主要应用于H.263的封装,主要在3G手机上使用
----------------------------------------------------------------------------------------------
理论上可以把任意一个视频文件和一个音频文件打包成一个完整的多媒体文件,但不同的封装方式有其不同的计算方式,它所要求的是在高压缩率的同时又要兼顾高 的清晰度效果。所以无论哪种封装方式都不会把任意的一个视频文件和一个音频文件打包在一起。例如MKV封装容器,基本无论什么样的组合都可以!但一般 MKV用的最多的就是H264+AAC组合,此组合文件体积最小,清晰度最高。因此网上很多MKV视频都是高清晰度的。
下面是一些常见的组合方式:
封装容器 视频流编码格式 音频流编码格式
AVI Xvid MP3
AVI Divx MP3
Matroska(后缀就是MKV) Xvid MP3
Matroska(后缀就是MKV) Xvid AAC
Matroska(后缀就是MKV) H264 AAC
MP4 Xvid MP3
MP4 H264 AAC
3GP H.263 AAC
--------------------------------------------------------------------------------------------
各种编码对应的最佳码率
编码规范和封装格式多种多样,是因为它们对应的最佳码率不同。640x272低分辨率的主要是Real Video,最佳码率在350-600Kbps,封装文件格式为RM或者RMVB,我们经常在网上下载的300M左右的电影基本都是RealVideo规 范的RMVB文件;分辨率提升为1024x438时,一般就开始使用Xvid编码了,码率也在800-1300Kbps不等,封装文件经常是AVI,文件 体积在700MB左右;而720P影片,我们经常下载的X264/AVC编码MKV封装文件,码率5-6MB,音频部分可以达到5.1音效,影音效果很不 错,但文件体积都在4.3GB上下,一张DVD碟的容量,网上下载往往需要数天;1080P影片经常采用的有H.264编码和VC1编码,码率 30Mbps上下,体积达到22-40GB,虽然效果震撼,但是不方便网络共享。对于容量8GB左右的MP4,综合视频来源以及体积,最适合的是Xvid 编码、码率在1300Kbps左右、文件体积700MB-1.4GB的AVI,以及同样码率和体积的RV40编码RMVB,还有码率 350-600Kbps的RMVB。
比较常用的有以下封装格式
1 AVI
AVI容器-成熟的老技术
AVI是微软1992年推出用于对抗苹果Quicktime的技术,尽管国际学术界公认AVI已经属于被淘汰的技术,但是由于windows的通用性,和简单易懂的开发API,还在被广泛使用。
AVI的文件结构、分为头部, 主体和索引三部分. 主体中图像数据和声音数据是交互存放的。从尾部的索引可以索引跳到自己想放的位置。
AVI本身只是提供了这么一个框架,内部的图像数据和声音顺据格式可以是任意的编码形式。因为索引放在了文件尾部,所以在播internet流媒体时已属 力不从心。很简单的例子,从网络上下载的片子,如果没有下载完成,是很难正常播放出来。另外一个问题是AVI对高码率VBR音频文件支持不好。
VBR全称是Variable BitRate,就是动态比特率,可以根据当前的需要定义不同的比特率,避免了浪费,并且提高了利用率。随之问题也就来了,因为容器里的图像和声音是分开 的,所以播放时需要一个图像和声音的同步过程,如果CBR音轨的话因为码率是定值,同步不成为问题,可是VBR音轨是不断的在变换,而AVI没有时间戳去 让VBR音轨和图像同步,这样就会产生图像声音不同步的问题。后来VirtualDub提出了一种新的方法扩充了AVI对VBR音频的兼容,但是在高码率 时会产生丢失数据的问题,从而导致有损音效,这一点问题到现在都没有比较完美的解决方法。并且更加令人遗憾的是,对TrueHD, DTS-HD等音效更是完全不能支持。
2 ts和ps封装
因为HDDVD以及BD之争,尽管两家在编码上都统一采用MPEG2/VC-1/H.264,可在封装格式上又有所分岐。DVD论坛官方 所认可的HDDVD使用的是PS封装,即Program Stream(程序流),这和之前DVD所采用的MPEG2 Program Stream封装是一样的,PS流的后缀名是VOB以及EVO等。而BD在没有DVD论坛官方认证的情况下,自然不是PS封装,而是使用了MPEG2的另 一封装TS封装,即Transport Stream(传输流),TS流的后缀名为TS。它们都是MPEG2系统部分的两个不同的语法结构,而在现在仅仅在作为封装使用。TS流对于PS流来说更 易传输,不过由于其性质,也更易出错,所以在以前一般存储方面都是使用PS流,当然现在随着容错/纠错技术的提高,TS的适用范围越来越广。
现在网上大多流传以TS封装的HDTV remux版,PS封装只能在HDDVD原版才看到,所以我们来着重分析一下TS封装格式。
电视节目是你任何时候打开电视机都能解码(收看)的,所以,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码 的。从结构上来说,TS是由头文件和主体所组成的,扩充过的TS流还包括时间戳。这样不管是什么格式的VBR音轨,都很容易通过时间戳来同步图像。当然, 对新的声音格式来说,需要新的分离器,解码器来实现解码。目前在不断改进开发中。
TS不像AVI,从诞生那天起,就考虑到了网络播放,所以很快成为了世界标准并广泛应用于电视台数字播放,手机等各个领域。
REMUX版本
Remux的意思是无损的提取出HD-DVD 和 BluRay-DVD里面的视频数据和音频数据,封装到我们熟悉的TS或者AVI文件中
3 MOV封装
不少HDRIP使用的封装格式一般是AVI,MKV和MOV。MOV是Quicktime封装,这一封装和AVI几乎是同一时代的,缺陷也不少,现在很少有人使用。
HDRIP:重新编码,即有损压缩过之后的视频。
4 MKV封装
MKV是Matroska的简称,它是一种新的多媒体封装格式,比较常见的搭配是X264+MKV。MKV封装十分新颖,而且也非常开放,它对比AVI的优势体现在以下几点:
1:可变帧率:这需要编码的配合,试想一下在回放变化比较慢(比如说静物)时以比较低的FPS来代替,可以节省不少资源。
2:错误检测以及修复:这无疑提供了纠错和容错性,在网络传输的今天尤为需要。
3:软字幕:经常看DVDrip以及HDrip的朋友了解到,字幕一般都是以其它文件形式存在,在MKV里它可以内嵌在封装里,但不会和视频混淆,也可以多字幕随意选择。这样在传输保存时比较方便。
4:流式传输:这和TS流的原因基本一致,通过时间戳来管理视频以及音频的同步问题,做到即下即看。
5:菜单:交互式的操作使得MKV更加人性化。
6:强大的兼容性:MKV最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流,即使是非常封闭的RealMedia及QuickTime也被它包括进去了,堪称万能的媒体容器。
7:开放性和跨平台性:Matroska使用的是一种开放的架构,拥有众多的先进特性,并且能跨平台使用。
不过Matroska相对于以上我们介绍的缺点也是显而易见的,它没有深厚的背景可以依托,这决定了它不可能在商业领域里有所作为。不过从 DVDrip里我们看到并非标准才是唯一,真正先进的技术在标准化商业化的道路上碰到很多非技术壁垒,而在网上而言,根本不存在这样那样的顾虑,所以 MKV可以网上快速流行起来。
不过MKV的缺点也是显而易见的,分离器方面比较好的仅有HAALI分离器,再加上民间标准的缘故,我们很难在PC以外的地方见到它的存在。
http://www.cnblogs.com/xkfz007/articles/2612932.html
h264 封装 RTMP中FLV数据的解析 rtmp协议简单解析以及用其发送h264的flv文件的更多相关文章
-
(转)rtmp协议简单解析以及用其发送h264的flv文件
Adobe公司太坑人了,官方文档公布的信息根本就不全,如果只按照他上面的写的话,是没法用的.按照文档上面的流程,server和client连接之后首先要进行握手,握手成功之后进行一些交互,其实就是交互 ...
-
django中ORM的model对象和querryset 简单解析
欢迎大家查看我的博客,我会不定时的用大白话发一些看了就能懂的文章,大家多多支持!如您对此文章内容有独特见解,欢迎与笔者练习一起探讨学习!原创文创!转载请注明出处! ORM是干嘛的? 介绍orm之前我应 ...
-
Main函数中的参数argc,argv的使用简单解析
本篇文章是对Main函数中的参数argc,argv的使用进行了简单的分析介绍,需要的朋友参考下: C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int a ...
-
Python 数据分析中金融数据的来源库和简单操作
目录 金融数据 pandas-datareader TuShare 金融学图表 案例 金融数据 数据分析离不开数据的获取,这里介绍几种常用的获取金融方面数据的方法. pandas-datareader ...
-
L2tp协议简单解析
1.L2TP简介 L2TP(Layer 2 Tunneling Protocol,二层隧道协议)是VPDN(Virtual PrivateDial-up Network,虚拟私有拨号网)隧道协议的一种 ...
-
Http协议简单解析及web请求过程
HTTP协议: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统. 基于HTTP协议的客户端/服务器请求响应机制的信息交换过程包含下面几个步骤: 1) ...
-
gin框架中的数据解析与绑定
Json数据解析与绑定 客户端传参,后端接收并解析到结构体 func Login(context *gin.Context) { // 声明接收的变量 var login LoginJson // 将 ...
-
ffmpeg 从内存中读取数据(或将数据输出到内存)
更新记录(2014.7.24): 1.为了使本文更通俗易懂,更新了部分内容,将例子改为从内存中打开. 2.增加了将数据输出到内存的方法. 从内存中读取数据 ffmpeg一般情况下支持打开一个本地文件, ...
-
ffmpeg 从内存中读取数据(或将数据输出到内存)(转)
更新记录(2014.7.24): 1.为了使本文更通俗易懂,更新了部分内容,将例子改为从内存中打开. 2.增加了将数据输出到内存的方法. 从内存中读取数据 ffmpeg一般情况下支持打开一个本地文件, ...
随机推荐
-
Ajax接收不到PHP return后的结果的原因
PHP在处理ajax返回值的时候,如果使用return如 return $result会失败,echo $result却没问题. 解释原因如下: 1.ajax请求从服务器端读取返回值,而且这些返回值必 ...
-
JAVA的POI操作Excel
1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组 ...
-
对于C#中的一些点滴你真的理解了吗?
废话不多说看题目,看看我们自己真的理解了吗? 1.如下代码输出的结果是什么? public class A{ public virtual void Func(int number=10) { Co ...
-
Android KitKat 4.4 Wifi移植之Wifi driver
本文讲述在Linux 3.10下Realek RTL8723A Linux Wifi 驱动的移植. Prerequisites 硬件平台:Atmel SAMA5 软件平台:Linux 3.10 + A ...
-
synchronized 与 volatile 原理 —— 内存屏障的重要实践
单例模式的双重校验锁的实现: 第一种: private static Singleton _instance; public static synchronized Singleton getInst ...
-
JSP总结(三)——JSP中九大内置对象(汇总)
注:后缀为汇总的基本上是整理一些网上的. 一.九大内置对象分类: 1. request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request ...
-
卷积神经网络特征图可视化(自定义网络和VGG网络)
借助Keras和Opencv实现的神经网络中间层特征图的可视化功能,方便我们研究CNN这个黑盒子里到发生了什么. 自定义网络特征可视化 代码: # coding: utf-8 from keras.m ...
-
[Scikit-learn] 1.1 Generalized Linear Models - Lasso Regression
Ref: http://blog.csdn.net/daunxx/article/details/51596877 Ref: https://www.youtube.com/watch?v=ipb2M ...
-
virtio-netdev 数据包的发送
在前面几文中已经大体介绍了virtio的重要组成,包含virtio net设备的创建,vring的创建,与virtio设备的交互方式,我们就从网络数据包的发送角度来看下virtio的详细使用流程. [ ...
-
多项式乘法,FFT与NTT
多项式: 多项式?不会 多项式加法: 同类项系数相加: 多项式乘法: A*B=C $A=a_0x^0+a_1x^1+a_2x^2+...+a_ix^i+...+a_{n-1}x^{n-1}$ $B=b ...