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.pswp.cn/news/383468.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383468.shtml
英文地址,請注明出處:http://en.pswp.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…