流媒體應用中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上去,是無法播放出畫面來的。