2015-12-07 29 views
2

如RFC 6184 https://tools.ietf.org/html/rfc6184#section-5.6第5.6節所述,單個NAL單元數據包只能包含一個NAL單元。解碼器在H264解碼中如何確定單個NAL單元的大小

我的問題是,現在在接收端的解碼器如何識別單個NAL單元的大小或知道單個NAL單元分組中的NAL單元的末端。

但是在其他打包模式(如STAP等)中,NAL單元的大小作爲RTP有效負載的一部分存在。

+0

如果只有一個NAL /數據包,那麼它的大小就是有效負載的大小。你到底在問什麼? – aergistal

+0

@aergistal我希望我們都在與RFC 6184中提到的Single NAL單元數據包格式相關的頁面上。現在關於我的問題,讓我困惑的是Single NAL單元被封裝在RTP數據包中一次RTP報頭被解碼器去除,RTP有效載荷具有單個NAL單元,現在這裏前8位是NAL單元報頭,其餘的是NAL單元數據,即幀相關信息。我們如何知道幀相關信息已經結束,直到我認爲有NAL數據的地方,還可以有RTP填充。 –

+1

RTP填充的存在和長度在[RTP頭](http://www.siptutorial.net/RTP/images/header.gif)中指定。當P位置位時,RTP填充的最後一個字節是最後應該忽略的字節數。 – aergistal

回答

2

我的問題是現在在接收端的解碼器如何識別單個NAL單元的大小或知道單個NAL單元分組中的NAL單元的末端。

OS /套接字API會告訴您接收到的UDP(RTP)數據包的大小。在TCP流傳輸的情況下,RTP數據包的大小通常被預置於RTP數據包(均在RTSPRFC4571中)。 處理完RTP header後,有效載荷中的NAL單元single nal unit mode

雖然典型的RTP頭是12字節,但您應該根據RFC3550解析它,因爲大小取決於CSRC和RTP頭擴展。

在STAP的情況下,您需要知道一個RTP包中有多個NALU的大小。因此你必須通過閱讀大小來解析每一個。

+0

同意在STAP,MTAP和FU-A/B的情況下,總是有使用長度或開始/結束位來識別NAL單元大小的方法。在TCP和UDP的情況下,我可能會更多地閱讀RTP。但在這之前還有一點懷疑:1)你通過UDP的有效載荷大小確定了RTP數據包的大小,但是在從中除去RTP頭之後剩下的就是單個NAL單元。現在這個單一的NAL單元具有8位標題,其餘的是可能包含RTP填充的NAL數據,現在這裏解碼器如何確定其應該考慮NAL數據的長度。 –

+0

另外,我想補充一點,我們說在TCP作爲傳輸機制的情況下,RTP數據包的大小通常被預先添加到RTP數據包中,但我怎麼知道RTP數據包沒有被填充字節。這意味着在這種情況下NAL數據以及RTP有效載荷中的字節填充,我怎麼知道NAL單元的末端。 –

+0

通常,您從編碼器獲得的NAL單元是您在SNU模式下作爲有效載荷放置的內容,同樣,RTP有效載荷也是您反饋給解碼器的內容。如果您確實需要填充,請參閱有關填充的部分:https://tools.ietf.org/html/rfc3550#section-5.1 – Ralf