• 大小: 14KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: rtp  ps  h264  

资源简介

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


评论

共有 条评论