MPEG4与.mp4


流媒体应用中TS和MP4格式分析应该是封包格式。不能简单理解成MPEG4的简称。要详细解释这个问题,需要提一下MPEG4和.mp4在概念上的区别。

一般来说,仅提“MPEG4”,是指一种视频压缩算法。可以把原始画面通过数学运算变换成一组二进制数据,达到有损存储的目的。但是光是这样压缩出来的数据,一般不会直接用于播放。因为它只有一帧接一帧的画面,没有其它一些播放所必须的支持数据,比如说:音频;播放速度信息(一秒应该放多少帧,才和原场景速度一致);以及影音同步数据(确保声音和画面一致,不会出现画面中的人物开了枪,结果枪声晚几秒才出现这种情况)等等。要把一个场景记录成可以播放的格式,除了把画面逐帧压缩成MPEG4以外,还需要记录音频,然后和上面提到的类似播放速度这种附加信息一起寸存储

*.mp4是就是满足这个需求的一种文件容器格式。这种格式面向最终的播放。一个常见的.mp4文件中有一个音频轨和一个视频轨,每个轨可以是若干种格式之一,任意组合后,以一种交叉的方式存贮在*.mp4文件中。常见的.mp4中用到的视频轨格式,有前面提到的MPEG4,还有可能是YUV(未压缩),H.263, H.264/AVC, XVID以及一些其它;常用的音频轨格式有AMR, QCELP, AAC, MP3等。音频和视频轨不需要同时存在。只要有其中一个,常见的播放器都能正常处理(当成声音文件或者是无声电影播放)。

.mp4格式规范是MPEG4 Part 1标准定义的。但是这个格式本身相当通用,并不是只能用来存贮MPEG4视频格式。举个例子,一个.mp4文件中包含的可能是H.263的视频轨及AMR的音频轨。这样它和MPEG4视频压缩算法就半点边都沾不上。但它绝对是一个合法的.mp4文件。从这个意义上讲,.mp4是一个独立的封包格式。也许它的原始设计意图是仅用于MPEG4,但事实上大家觉得它很好用,已经把它扩展成可以包容其它格式了。

.avi, .3gp, .3g2, .mkv等,其实基本作用和.mp4非常接近,没有本质的区别。出现这么多类似格式,很多时候并不是技术原因,而是不同组织在不同时间提出来的标准。有些甚至只是为了避免专利和知识产权冲突。不同的格式当然也有一些不同的侧重点,比如一般认为mp4和mkv这一类格式相对于avi来说,扩展性更强一些,本身在设计时就考虑了一些附加应用,比如内置字幕轨等。但如果仅用于视频和音频的播放,这些格式并不会造成最终用户在体验上有任何不同。

.rm/.rmvb其实也可以这么理解。唯一区别就是它们在设计的时候人为的加入了限制,仅允许封装real自家的视频和音频格式。我觉得不能说rm/rmvb是包括视频音频在内的一个完整格式。它仍然只是一个封包格式。视频还是由realvideo标准定义的,音频由realaudio标准定义,而且还可能有不同的版本,比如realvideo就有8.0, 9.0, 10.0等各个版本,都可以封装到rm/rmvb中。所以应该认为rm/rmvb, realvideo, realaudio是三个规范,只是real设计得来让它们可以在一起工作而已。理论上,把realvideo视频和realaudio音频封装成avi等其它格式,应该也是可行的。只不过市场意义不大;反过来,用rm/rmvb来封装MPEG4视频和AAC音频,我相信如果real肯放开人为限制,应该只需要很少的改动就可以实现。但同样,这样做没有实际的意义。

回到mp4, 现在市场上对这种东西的称呼其实是不准确的。比如某产品号称“支持MP4播放”,到底是什么意思呢?如果它是指可以播放*.mp4这种文件,那里面的音频和视频格式它能支持多少种组合呢?理论上,我把一个场景的画面一帧接一帧,不加压缩的直接存放(你可以大致想象成把一堆BMP文件一个接一个的复制在一起),加个简单的文件头,也可以生成一个巨大的mp4文件,还可以省掉音频。播放这种文件是没有任何技术可言的,但它的文件名也确实是*.mp4。现在假设我生产了一台设备,仅支持这种格式,是不是也可以在盒子上印上“支持MP4”呢?你买回去,复制一个网上下载的.mp4文件(MPEG4视频和AAC音频应该是一个比较流行的组合),结果发现根本不能播放。现在你来找我,我告诉你说我只能支持“视频为未压缩YUV以及不带音频轨的mp4文件”,算不算骗人呢?就算不举这么极端的例子,一般.mp4文件中常见的视频音频格式也有多种,一个产品要做到支持所有的格式是很难的。所以,如果要准确的描述,应该写清楚类似“支持视频格式为MPEG4或H.264/AVC,音频为AMR或AAC的*.mp4文件”。

更严格一些,还应该写清楚MPEG4支持到哪种profile, AMR是NB还是WB,AAC是LC还是HE等更多细节。几年前刚出来的手持媒体播放器,有些号称支持“xvid视频轨和mp3音频轨的.avi文件”。你以为写得够清楚了吧,结果把下载的一些符合这个格式的文件复制上去,有些能放,有些不能放,有些放一段黑一段。原因就在于,设备支持的是“不带B帧的xvid”(即simple profile),而一般以PC播放为目的的xvid,在压缩时都是用到了B帧的。B帧可以提高画质和文件大小控制精度,但对编码和解码的运算要求都提高了。一些设备硬件能力达不到这个要求的设备,就在这些小地方省略一些细节。最终结果就是,用户如果真要把下载的视频弄上去播放,还要再转换一次。用户看到盒子上的说明,以为他说的xvid是“我平时下载的那种xvid”,但厂家实际上暗示的是“我们只支持带某种限制的xvid,你平时下载那种一般都不符合我的要求”。

当然,随着软硬件水平的提高以及市场竞争,这种误导型的说明正在减少。不过如果有比较确切的格式需求,最好还是先搞清楚这些细节。

N73,据我了解,应该只支持视频为MPEG4 Simple Profile / Advanced SP及H.263 Profile 0 & 3,音频为AMR-NB/WB或者AAC-LC, HE-AAC的mp4文件。如果你放一个视频格式为H.264/AVC的mp4上去,是无法播放出画面来的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MP4文件格式的解析,以及MP4文件的分割算法

mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime。以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的“媒体头”。当然,流媒体点播也可以采…

MP4文件格式详解

一、基本概念 1.mp4概述 MP4文件中的所有数据都装在box(QuickTime中为atom)中,也就是说MP4文件由若干个box组成,每个box有类型和长度,可以将box理解为一个数据对象块。box中可以包含另一个box,这种box称为c…

H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

SkySeraph Apr 1st 2012 Email:skyseraph00163.com 一、MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二、MP4封装格式核心概念 1 MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象编码的第12部分: ISO 基本媒体文件格式/Info…

AAC音频格式分析

关于AAC音频格式基本情况,可参考维基百科http://en.wikipedia.org/wiki/Advanced_Audio_Coding AAC音频格式分析 AAC音频格式有ADIF和ADTS: ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数…

tar压缩隐藏文件

如果想tar 压缩包含隐藏文件的目录,同时排除掉部分无用的目录 tar -czvf 20161009.tar.gz * .[!.]* --exclude .git 在Linux下打包tar文件时添加密码的方法 在当前目录下有一个pma目录的文件夹: 1、使用tar对文件压缩加密: 代码如下: # tar -zcvf - pma…

linux 怎么把^M去掉

在linux下,不可避免的会用VIM打开一些windows下编辑过的文本文件。我们会发现文件的每行结尾都会有一个^M符号,这是因为 DOS下的编辑器和Linux编辑器对文件行末的回车符处理不一致, 对于回车符的定义: windows:0D0A un…

关于cp命令中拷贝所有的写法

今天在编写一个脚本的时候,发现一个比较奇怪的问题:就是在使用cp拷贝当前目录下所有文件到目标目录的时候,源和目标大大不同。原来一直没有留意有这样的问题,后来查了些资料,才知道以前一直使用的格式有误,…

cp -r 和 cp -R 的区别

今天倒腾linux根文件系统的时候发现 cp -r /dev /dev_bak 时,竟然会 将磁盘设备中的数据进行一次拷贝,而不是仅仅建立设备文件。于是到网上搜了一把,收获不小。http://www.loveunix.net/html/200407/33920.html这里有人问同样的问题&#xff…

Makefile选项CFLAGS,LDFLAGS,LIBS

CFLAGS 表示用于 C 编译器的选项, CXXFLAGS 表示用于 C 编译器的选项。 这两个变量实际上涵盖了编译和汇编两个步骤。 CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS-I/usr/include -I/path/include。同样地…

smbclient和挂载samba共享目录

1,列出某个IP地址所提供的共享文件夹 smbclient -L 198.168.0.1 -U marsaber%12332112345672,像FTP客户端一样使用smbclient smbclient //192.168.0.1/tmp -U marsaber%1233211234567 执行smbclient命令成功后,进入smbclient环境,出现提示符…

linux 下source命令

当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录;这时就想到用 source 命令,如:source /etc/profile对source进行了 学习 ,并且用它与sh 执行脚本进行了对比,现在总结一下。source命令&#x…

make Image uImage与zImage的区别

内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。 那么uImage又是什么的&#…

ubuntu下tftp的安装、配置、使用

1. 安装$ apt-get install tftp-hpa tftpd-hpa2. 建立目录$ mkdir /tftpboot # 这是建立tftp传输目录。$ sudo chmod 0777 /tftpboot$ sudo touch test.txt # test.txt文件最好输入内容以便区分3. 配置$ sudo vi /etc/default/tftpd-hpa# /etc/default/tftpd-hpaTFTP_USERNAME&…

ubuntu下搭建nfs服务器

1.1 搭建NFS服务器 NFS(Network FileSystem,网络文件系统)是由SUN公司发展,并于1984年推出的技术,用于在不同机器,不同操作系统之间通过网络互相分享各自的文件。NFS设计之初就是为了在不同的系统间使…

uboot的常用命令详解

U-Boot还提供了更加详细的命令帮助,通过help命令还可以查看每个命令的参数说明。由于开发过程的需要,有必要先把U-Boot命令的用法弄清楚。接下来,根据每一条命令的帮助信息,解释一下这些命令的功能和参数。 进入uboot的命令行提示…

minicom 串口信息过长分行显示

有时串口输出一行信息比较多,一行显示不下,这个时候,我们可以用minicom的本身组合键设置,超过一行时自动卷起。 minicom 组合键的用法是:先按CtrlA组合键,然后松开这两个键,再按Z键。另外还有一…

uboot 的 bootcmd 和bootargs参数详解

U-boot的环境变量值得注意的有两个: bootcmd 和bootargs。 bootargsconsolettyS1,115200n8 mem32M0x0 ispmem8M0x2000000 rmem24M0x2800000 init/linuxrc rootfstypesquashfs root/dev/mtdblock2 rw mtdpartsjz_sfc:256k(boot),2560k(kernel),2048k(root),-(appfs) …

MTD和 uboot中的bootargs 下属 mtdparts

MTD 设备是象闪存芯片、小型闪存卡、记忆棒等之类的设备,它们在嵌入式设备中的使用正在不断增长。 MTD 驱动程序是在 Linux 下专门为嵌入式环境开发的新的一类驱动程序。相对于常规块设备驱动程序,使用 MTD 驱动程序的主要优点在于 MTD 驱动程序是专门为…

Linux应用程序在内存中的地址布局

栈:局部变量(初始化的和未初始化的,但不包含局部静态变量)、局部只读变量(const)堆:动态分配的区域(如使用malloc函数申请的区域)BSS段:存储未初始化的全局变…

比较zImage和uImage的区别

一、vmlinuz vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。 vmlinuz的建立有两种方式。一是编译内核时通过“make…