簡體   English   中英

H264流解碼器如何確定H264編碼器正在饋送哪種流

[英]How does a H264 stream decoder decides which type of stream is being fed by H264 encoder

ITU-T H264文檔支持或至少建議兩種流類型,即RTP數據包和附件B(原始字節序列)。

我在這里的問題是,假設編碼器能夠發送兩種格式的流數據,並且在流傳輸時可以在任何時間點之間進行切換(如果不是這種情況,則是正確的),H264的方式和時間解碼器知道它需要根據RTP格式或附件B解析數據,即原始字節序列數據。

是否有任何標准協議或機制可以做到這一點。

萬一發生丟包,編碼器切換數據流方式(即從RTP到附件B,反之亦然),將會發生什么情況,此處,解碼器可能仍假定數據以舊格式進行流傳輸。

請澄清以上內容。

通常,在大多數情況下,H264編碼器會生成NAL(Netwrok抽象層)形式的數據包。 每個NALU(NAL單元)由一個NAL頭和RBSP(原始字節序列有效載荷)組成。 與H264編碼器類似,大多數解碼器都能夠理解NALU(不是真正的RTP)。 NAL標頭的大小為1個字節。

NAL單元有2種RTP打包方法。 在一種方法中,允許NAL片段化,而另一種方法不允許對NALU片段化。 在這兩種方法中,RTP頭后面都帶有NALU。 假設編碼器和解碼器都以理解RTP頭的方式實現,則由於頭的大小始終固定,因此它們應該首先解析頭。 然后,檢查RTP和/或NAL標頭以對其進行相應的處理以進行進一步的分析。

有關更多詳細信息,請參閱RFC 6184-H.264視頻的RTP有效負載格式

總而言之,RTP和NAL只是標題,它是在解碼實際視頻數據之前解析RTP或NAL標題的方法。 最好用信號通知模式(RTP或NAL),在該模式下,數據流傳輸到解碼器。 這使得解碼器的壽命很容易避免錯誤地對待任何數據包的錯誤。

在丟包的情況下,全部與解碼器彈性方法有關。 沒有用於丟包(NALU)的標准化方法。 一些解碼器確實為丟包情況提供錯誤隱藏。

添加了更多詳細信息:

您需要在解碼器端同時具有兩個標頭(RTP和NAL)解析實現。 如上所述,最好具有一種信令機制來指示將數據包發送到解碼器的模式。 由於NAL標頭是給定數據包中的子集(存在於RTP和NAL中),因此最好先搜索NAL起始碼。 解碼器在數據包中找到起始代碼后,請檢查到該點為止消耗的字節數(x)。 如果x大於RTP標頭大小,則從數據包的開頭開始以RTP模式進行解析。 如果RTP解析進行得很順利(通過針對手中的數據驗證一些RTP字段),則解碼器可以得出結論,即以RTP模式接收到數據包。 以上方法對非分段RTP打包方法有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM