流媒體應用中TS和MP4格式分析應該是封包格式。不能簡單理解成MPEG4的簡稱。要詳細解釋這個問題,需要提一下MPEG4和.mp4在概念上的區(qū)別。
一般來說,僅提“MPEG4”,是指一種視頻壓縮算法。可以把原始畫面通過數(shù)學運算變換成一組二進制數(shù)據(jù),達到有損存儲的目的。但是光是這樣壓縮出來的數(shù)據(jù),一般不會直接用于播放。因為它只有一幀接一幀的畫面,沒有其它一些播放所必須的支持數(shù)據(jù),比如說:音頻;播放速度信息(一秒應該放多少幀,才和原場景速度一致),以及影音同步數(shù)據(jù)(確保聲音和畫面一致,不會出現(xiàn)畫面中的人物開了槍,結果槍聲晚幾秒才出現(xiàn)這種情況)等等。要把一個場景記錄成可以播放的格式,除了把畫面逐幀壓縮成MPEG4以外,還需要記錄音頻,然后和上面提到的類似播放速度這種附加信息一起寸存儲。
*.mp4是就是滿足這個需求的一種文件容器格式,這種格式面向最終的播放。一個常見的.mp4文件中有一個音頻軌和一個視頻軌,每個軌可以是若干種格式之一,任意組合后,以一種交叉的方式存貯在*.mp4文件中。常見的.mp4中用到的視頻軌格式,有前面提到的MPEG4,還有可能是YUV(未壓縮),H.263, H.264/AVC, XVID以及一些其它;常用的音頻軌格式有AMR, QCELP, AAC, MP3等。音頻和視頻軌不需要同時存在。只要有其中一個,常見的播放器都能正常處理(當成聲音文件或者是無聲電影播放)。
.mp4格式規(guī)范是MPEG4 Part 1標準定義的。但是這個格式本身相當通用,并不是只能用來存貯MPEG4視頻格式。舉個例子,一個.mp4文件中包含的可能是H.263的視頻軌及AMR的音頻軌。這樣它和MPEG4視頻壓縮算法就半點邊都沾不上。但它絕對是一個合法的.mp4文件。從這個意義上講,.mp4是一個獨立的封包格式。也許它的原始設計意圖是僅用于MPEG4,但事實上大家覺得它很好用,已經(jīng)把它擴展成可以包容其它格式了。
象.avi, .3gp, .3g2, .mkv等,其實基本作用和.mp4非常接近,沒有本質的區(qū)別。出現(xiàn)這么多類似格式,很多時候并不是技術原因,而是不同組織在不同時間提出來的標準。有些甚至只是為了避免專利和知識產(chǎn)權沖突。不同的格式當然也有一些不同的側重點,比如一般認為mp4和mkv這一類格式相對于avi來說,擴展性更強一些,本身在設計時就考慮了一些附加應用,比如內(nèi)置字幕軌等。但如果僅用于視頻和音頻的播放,這些格式并不會造成最終用戶在體驗上有任何不同。
.rm/.rmvb其實也可以這么理解。唯一區(qū)別就是它們在設計的時候人為的加入了限制,僅允許封裝real自家的視頻和音頻格式。我覺得不能說rm/rmvb是包括視頻音頻在內(nèi)的一個完整格式。它仍然只是一個封包格式。視頻還是由realvideo標準定義的,音頻由realaudio標準定義,而且還可能有不同的版本,比如realvideo就有8.0, 9.0, 10.0等各個版本,都可以封裝到rm/rmvb中。所以應該認為rm/rmvb, realvideo, realaudio是三個規(guī)范,只是real設計得來讓它們可以在一起工作而已。理論上,把realvideo視頻和realaudio音頻封裝成avi等其它格式,應該也是可行的。只不過市場意義不大;反過來,用rm/rmvb來封裝MPEG4視頻和AAC音頻,我相信如果real肯放開人為限制,應該只需要很少的改動就可以實現(xiàn)。但同樣,這樣做沒有實際的意義。