2011-07-19 160 views
0

我使用RTP進行視頻流式傳輸。使用RTP進行VLC流式傳輸

在接收端我越來越喜歡這個包...

(我打印1個字節值(INT))

包1:128-161-26-121-188-65 -147-141-132-103-00-00-71-00-70-18 ......

分組2:128-161-26-122-188-144-229-107-132 -103-00-00-71-64-71-48 .......

我需要知道I幀的IDR開始的位置。 我知道前12個字節是RTP頭。 但我不知道71(第12個字節)和其他值代表什麼。

是否爲NAL標題?

任何想法?

謝謝

回答

0

我假設您正在傳輸H264媒體。如果RTP頭部爲12個字節,則NAL從第13個字節開始。您應該解析RFC 3984中提到的標頭,並將有效載荷傳遞給解碼器。

您可以查看一些實現以供參考,例如FFMpeg的源代碼。

1

在12字節的標題之後,RTP有效負載啓動。

有效負載的第一個字節是NAL單元頭。它包含三個部分:

+---------------+ 
|0|1|2|3|4|5|6|7| 
+-+-+-+-+-+-+-+-+ 
|F|NRI| Type | 
+---------------+ 

RFC 3984

F:1位 forbidden_​​zero_bit。 H.264規範聲明值爲 1作爲語法違規。

NRI:2位 nal_ref_idc。值爲00表示NAL 單元的內容未被用於重構用於圖片間預測的參考圖片。這樣的NAL單元可以被丟棄而不冒險參考圖片的完整性。值大於00的值表示需要解碼NAL單元以保持參考圖片的完整性。

類型:5位 nal_unit_type。該組件指定1的表7-1中定義的NAL單元有效載荷類型 ,並在本備忘錄後面進行說明。有關所有當前定義的NAL單元類型及其 語義的 引用,請參閱1中的第7.4.1節。

的有效載荷類型,由至少顯著5個比特定義的32個可能的值,都列在表1中:

Type Packet Type name      Section 
    --------------------------------------------------------- 
    0  undefined         - 
    1-23 NAL unit Single NAL unit packet per H.264 5.6 
    24  STAP-A Single-time aggregation packet  5.7.1 
    25  STAP-B Single-time aggregation packet  5.7.1 
    26  MTAP16 Multi-time aggregation packet  5.7.2 
    27  MTAP24 Multi-time aggregation packet  5.7.2 
    28  FU-A  Fragmentation unit     5.8 
    29  FU-B  Fragmentation unit     5.8 
    30-31 undefined         - 

兩個你提到的兩個數據包的是P幀。對於I幀,NAL單元類型應該是5,所以在你的情況下,第12個字節將是0x75。 P幀的NAL單元類型爲1