2011-03-08 110 views
1

我正在C#中使用Axis IP Camera實現RTSP。一切工作正常,但是當我嘗試顯示視頻時,我得到了很多綠色修補程序的第一幀。我懷疑我不是首先將i-fram發送給客戶端的問題。在RTP數據包中搜索i幀

因此,我想知道檢測RTP數據包中的i幀所需的算法。

感謝,

元帥

+0

這可能是回答您的問題: http://stackoverflow.com/questions/1957427/detect-mpeg4-h264-i-frame-idr-in-rtp-stream – 2012-05-30 06:14:34

回答

0

這取決於視頻媒體類型。如果以H.264爲例,您可以查看NAL單元頭來檢查最終單元類型。

綠色補丁確實可能是由於未先收到iframe而導致的。

+0

嗨拉爾夫,感謝您的回覆....我正在使用MPEG4流。現在我已經設法檢測i幀的算法,但正如你所說的「綠色斑塊確實可能是由於沒有首先接收到iframe引起的。」,我如何確保我總是首先收到i幀? ? – Marshal 2011-03-09 01:33:50

+0

像jenseb提到的最簡單的事情是簡單地刪除所有幀,直到你檢測到第一個i幀。我對軸相機不熟悉,但也許可以配置i幀頻率以確保不必等待太久。 – Ralf 2011-03-09 13:29:11

1

當啓動RTSP會話時,服務器通常以配置數據和第一個I幀啓動RTP流。

可以想象,您的Axis攝像頭設置爲「始終組播」 - 在這種情況下,RTSP通信導致SDP描述,該描述告訴客戶端接收組播流的所有必要網絡和流媒體細節。

由於組播流總是存在,所以最有可能首先接收一些P-或B-幀(取決於GOP大小)。

您可以像檢測Ralf所建議的I幀那樣通過NAL單元類型識別它們來檢測RTP客戶端中的這些P/B幀。只需跳過RTP客戶端中的所有幀,直到您收到第一個I幀。 現在您可以將所有後續幀轉發給解碼器。

或者你給改變你的相機設置!

jens。

ps:別忘了你的RTP流中有碎片 - 這意味着除了RTP頭之外還有一些碎片信息。在識別框架之前,您必須重新組裝它。