2017-04-19 123 views
0

我正在從樹莓派上的相機讀取H.264流。我試圖通過websockets將它傳遞給Broadway以在網頁中呈現。H.264解碼無法解析異常幀頭

該流包含NAL單元,並且我在[0,0,0,1]開始前綴代碼上對它進行分塊,以分別發送並解碼NAL單元。我認爲這很好,但百老匯無法解碼我最終的結果。

挖掘到the parsing code I've based this on不過,它似乎在期待第5字節(開始前綴碼後,直中)爲:

  • 0x65 - I幀
  • 的0x41 - P幀
  • ×67 - 一個SPS框架
  • 0x68 - 一個PPS框架

我見過很多這樣提過的其他地方。所有我經歷了,雖然來的單位似乎開始(按順序):

  • ×27 0x64(第一部)
  • 0×28 0xEE(第二單元)
  • 0x25均爲0x88(第三單元,然後間歇後上)
  • 爲0x21 0x9A執行(每一個其他的流單元)

做這些報頭在H.264碼流是什麼意思?他們是否提出了一些我需要做的事情來符合百老匯的預期?

(如果完整的代碼會爲了更好的理解是有用的,看到https://github.com/pimterry/pi-cam/tree/d801de9b

+1

瞭解NALU的第一個字節[here](http://yumichan.net/video-processing/video-compression/introduction-to-h264-nal-unit/) –

回答

0

這是一個紅鯡魚:這裏我實際的問題是,一些現有的丟幀邏輯的意思,我是不及格百老匯在流中的頭幾幀,並沒有渲染。重播所有新連接的SPS和PPS幀,並確保它們永不掉線,很好地解決了這個問題。

我也沒找出什麼,這些字節,雖然,這幫助,並可能對他人有用的參考:

Hex Binary  NAL type Meaning 
0x65 = 11 00101 = type 5 Coded slice of an IDR picture (I-frame) 
0x41 = 10 00001 = type 1 Coded slice of a non-IDR picture (P-frame) 

0x27 = 01 00111 = type 7 Sequence parameter set (B-frame) 
0x28 = 01 01000 = type 8 Picture parameter set (B-frame) 
0x25 = 01 00101 = type 5 Coded slice of an IDR picture (B-frame) 
0x21 = 01 00001 = type 1 Coded slice of a non-IDR picture (B-frame) 

特別感謝Jaromanda X雖然 - NAL單元的文章[這裏]和nal_ref_idc文章使這項工作變得更容易。