1. 程式人生 > >基於RTP的H264視訊資料打包解包類

基於RTP的H264視訊資料打包解包類

      最近考慮使用RTP替換原有的高清視訊傳輸協議,遂上網查詢有關H264視訊RTP打包、解包的文件和程式碼。功夫不負有心人,找到不少有價值的文件和程式碼。參考這些資料,寫了H264 RTP打包類、解包類,實現了單個NAL單元包和FU_A分片單元包。對於丟包處理,採用簡單的策略:丟棄隨後的所有資料包,直到收到關鍵幀。測試效果還不錯,程式碼貼上來,若能為同道中人借鑑一二,足矣。兩個類的使用說明如下(省略了錯誤處理過程):

 DWORD H264SSRC ;
 CH264_RTP_PACK pack ( H264SSRC ) ;
 BYTE *pVideoData ;
 DWORD Size, ts ;
 bool IsEndOfFrame ;
 WORD wLen ;
 pack.Set ( pVideoData, Size, ts, IsEndOfFrame ) ;
 BYTE *pPacket ;
 while ( pPacket = pack.Get ( &wLen ) )
 {
  // rtp packet process
  // ...
 }


 HRESULT hr ;
 CH264_RTP_UNPACK unpack ( hr ) ;
 BYTE *pRtpData ;
 WORD inSize;
 int outSize ;
 BYTE *pFrame = unpack.Parse_RTP_Packet ( pRtpData, inSize, &outSize ) ;
 if ( pFrame != NULL )
 {
  // frame process
  // ...
 }