2013-06-11 13 views
1

我知道我可以在SO上找到關於此的其他答案,但是我想從某個真正瞭解MPEG-1/MPEG-2(或MP3,顯然)的人那裏得到澄清。在MPEG-1/MPEG-2幀的有效載荷中是否可以找到假同步字?

MPEG-1/2幀的開始是從字節邊界開始的12個設置位,所以字節fff*,其中*是任何半字節。這12位被稱爲同步字。這是在任何MPEG-1/2流中查找幀開始的有用特徵。

我的第一個問題是:在形式上,是否可以在頭部外部的MPEG-1/2幀的有效載荷中找到僞同步字?

如果是這樣,這是我的第二個問題:爲什麼同步字機制甚至存在呢?如果我們無法確定在閱讀fff時發現新框架,該同步字的目的是什麼?

請不要在你的答案中考慮ID3;我已經知道可以在ID3v2有效載荷中找到的同步字,但這是有據可查的。

回答

0

我工作在MPEG-2流,更確切地說Transport Streams(TS):我想我們可以找到相似之處。

TS由傳輸包組成,它有一個頭部,以同步字節0x47開始。
我們也可以在TP的有效載荷內找到0x47,但我們知道它不是同步字節,因爲它沒有對齊(TP的固定大小爲188字節)。

  • 同步字提供了一個入口點給查看流的人,並允許程序同步他的進程與流,因此名稱。
  • 它還允許快速瀏覽和解析流:在TS中,您可以從數據包跳轉到另一個數據包(檢查標頭,檢查同步字節,跳過188字節等)
  • 最後,這是一個安全措施可以幫助你(傳輸例如或者在過程中流中,如果一個bug造成了不好的對齊)發現錯誤

這些爭論是關於TS,但我想的一樣去與你的情況:發現同步有效負載中的單詞不應該成爲問題,因爲您應該始終能夠區分有效負載和標題,大多數情況下可以使用長度信息(或者因爲大小在TP中是固定的,或者因爲您有一個TLV格式)。

+2

MP3幀中的MP3幀可能具有不同的大小,並且是有記錄的公式來從其頭中知道幀大小。但是你仍然需要知道這個標題在哪裏。假設您連接到某個MP3流源,並且您首先收到的是幀的中間部分。你怎麼知道下一個'fff'是一個同步字還是一些有效載荷? – eepp

相關問題