基於RTP的H264視訊資料打包解包類
阿新 • • 發佈:2019-02-02
最近考慮使用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
// ...
}