流媒体应用中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肯放开人为限制,应该只需要很少的改动就可以实现。但同样,这样做没有实际的意义。