我正在C#中使用Axis IP Camera實現RTSP。一切工作正常,但是當我嘗試顯示視頻時,我得到了很多綠色修補程序的第一幀。我懷疑我不是首先將i-fram發送給客戶端的問題。在RTP數據包中搜索i幀
因此,我想知道檢測RTP數據包中的i幀所需的算法。
感謝,
元帥
我正在C#中使用Axis IP Camera實現RTSP。一切工作正常,但是當我嘗試顯示視頻時,我得到了很多綠色修補程序的第一幀。我懷疑我不是首先將i-fram發送給客戶端的問題。在RTP數據包中搜索i幀
因此,我想知道檢測RTP數據包中的i幀所需的算法。
感謝,
元帥
這取決於視頻媒體類型。如果以H.264爲例,您可以查看NAL單元頭來檢查最終單元類型。
綠色補丁確實可能是由於未先收到iframe而導致的。
當啓動RTSP會話時,服務器通常以配置數據和第一個I幀啓動RTP流。
可以想象,您的Axis攝像頭設置爲「始終組播」 - 在這種情況下,RTSP通信導致SDP描述,該描述告訴客戶端接收組播流的所有必要網絡和流媒體細節。
由於組播流總是存在,所以最有可能首先接收一些P-或B-幀(取決於GOP大小)。
您可以像檢測Ralf所建議的I幀那樣通過NAL單元類型識別它們來檢測RTP客戶端中的這些P/B幀。只需跳過RTP客戶端中的所有幀,直到您收到第一個I幀。 現在您可以將所有後續幀轉發給解碼器。
或者你給改變你的相機設置!
jens。
ps:別忘了你的RTP流中有碎片 - 這意味着除了RTP頭之外還有一些碎片信息。在識別框架之前,您必須重新組裝它。
這可能是回答您的問題: http://stackoverflow.com/questions/1957427/detect-mpeg4-h264-i-frame-idr-in-rtp-stream – 2012-05-30 06:14:34