資源簡介
RTP打包與解析,荷載類型包括PS和H264

代碼片段和文件信息
#include?“PSAnalysis.h“
#include?
PSBuild::PSBuild()?:?rtp_seq_(0)
{
}
PSBuild::~PSBuild()
{
}
?/***
?*@remark:???ps頭的封裝里面的具體數據的填寫已經占位,可以參考標準
?*@param?:???pData??[in]?填充ps頭數據的地址
?*???????????s64Src?[in]?時間戳
?*@return:???0?success?others?failed
*/
int?PSBuild::MakePsHeader(char?*pData?unsigned?long?long?s64Scr)
{
unsigned?long?long?lScrExt?=?(s64Scr)?%?100;
????s64Scr?=?s64Scr?/?100;
????//?這里除以100是由于sdp協議返回的video的頻率是90000,幀率是25幀/s,所以每次遞增的量是3600
????//?所以實際你應該根據你自己編碼里的時間戳來處理以保證時間戳的增量為3600即可,
????//如果這里不對的話,就可能導致卡頓現象了
bits_buffer_s?? bitsBuffer;
bitsBuffer.i_size?=?PS_HDR_LEN;
bitsBuffer.i_data?=?0;
????bitsBuffer.i_mask?=?0x80;?//?二進制:10000000?這里是為了后面對一個字節的每一位進行操作,避免大小端夸字節字序錯亂
bitsBuffer.p_data?= (unsigned?char?*)(pData);
memset(bitsBuffer.p_data?0?PS_HDR_LEN);
????bits_write(&bitsBuffer?32?0x000001BA); /*start?codes*/
bits_write(&bitsBuffer?2? 1); /*marker?bits?‘01b‘*/
????bits_write(&bitsBuffer?3? (s64Scr>>30)&0x07);?????/*System?clock?[32..30]*/
bits_write(&bitsBuffer?1? 1); /*marker?bit*/
????bits_write(&bitsBuffer?15?(s64Scr>>15)&0x7FFF);???/*System?clock?[29..15]*/
bits_write(&bitsBuffer?1? 1); /*marker?bit*/
????bits_write(&bitsBuffer?15?s64Scr&0x7fff);?????????/*System?clock?[29..15]*/
bits_write(&bitsBuffer?1? 1); /*marker?bit*/
bits_write(&bitsBuffer?9? lScrExt&0x01ff); /*System?clock?[14..0]*/
bits_write(&bitsBuffer?1? 1); /*marker?bit*/
bits_write(&bitsBuffer?22?(255)&0x3fffff); /*bit?rate(n?units?of?50?bytes?per?second.)*/
bits_write(&bitsBuffer?2? 3); /*marker?bits?‘11‘*/
bits_write(&bitsBuffer?5? 0x1f); /*reserved(reserved?for?future?use)*/
bits_write(&bitsBuffer?3? 0); /*stuffing?length*/
return?0;
}
/***
?*@remark:???sys頭的封裝里面的具體數據的填寫已經占位,可以參考標準
?*@param?:???pData??[in]?填充ps頭數據的地址
?*@return:???0?success?others?failed
*/
int?PSBuild::MakeSysHeader(char?*pData)
{
bits_buffer_s?? bitsBuffer;
bitsBuffer.i_size?=?SYS_HDR_LEN;
bitsBuffer.i_data?=?0;
bitsBuffer.i_mask?=?0x80;
bitsBuffer.p_data?= (unsigned?char?*)(pData);
memset(bitsBuffer.p_data?0?SYS_HDR_LEN);
/*system?header*/
bits_write(?&bitsBuffer?32?0x000001BB); /*start?code*/
????bits_write(?&bitsBuffer?16?SYS_HDR_LEN-6);/*header_length?表示次字節后面的長度,后面的相關頭也是次意思*/
????bits_write(?&bitsBuffer?1 ?1);????????????/*marker_bit*/
bits_write(?&bitsBuffer?22?50000); /*rate_bound*/
????bits_write(?&bitsBuffer?1??1);????????????/*marker_bit*/
????bits_write(?&bitsBuffer?6??1);????????????/*audio_bound*/
????bits_write(?&bitsBuffer?1??0);????????????/*fixed_flag?*/
????bits_write(?&bitsBuffer?1??1);???????? /*CSPS_flag?*/
????bits_write(?&bitsBuffer?1??1);???????? /*system_audio_lock_flag*/
????bits_write(?&bitsBuffer?1??1);???????? /*system_video_lock_flag*/
????bits_write(?&bitsBuffer?1??1);???????? /*marker_bit*/
????bits_write(?&bitsBuffer?5??1);???????? /*video
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????I.A....??????6526??2015-10-29?10:07??include\PSAnalysis.h
????I.A....???????232??2014-09-11?10:43??include\RTPAnalysisLibrary.h
????I.A....??????8379??2015-11-03?15:11??include\RTPPacketAnalysis.h
????I.A....?????22598??2015-10-29?14:42??src\PSAnalysis.cpp
????I.A....?????22485??2015-11-03?15:11??src\RTPPacketAnalysis.cpp
?????目錄??????????0??2015-11-03?15:13??include
?????目錄??????????0??2015-11-03?15:13??src
-----------?---------??----------?-----??----
????????????????60220????????????????????7
- 上一篇:DTN網絡仿真工具ONE1.4.1
- 下一篇:VHDL控制進行SPI讀寫
評論
共有 條評論