具体H264字节流拆包和RTP封包方法如下.docVIP

具体H264字节流拆包和RTP封包方法如下.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
具体H264字节流拆包和RTP封包方法如下

可以通过生成SDP文件给播放器在指定端口接收数据播放,如果你不用动态调整编码器什么的就不用考虑另外发送RTCP. 而且RTCP必须自己实现RTSP服务结合起来用,没有实现RTSP服务,就谈不上实现RTCP. 具体H264字节流拆包和RTP封包方法如下: UINT MediaStreamH264::TransportData(PBYTE pData, UINT dataSize, int pts) { PBYTE p_buffer = pData; int i_buffer = dataSize; UINT writeSize = 0; while( i_buffer 4 ( p_buffer[0] != 0 || p_buffer[1] != 0 || p_buffer[2] != 1 ) ) { i_buffer--; p_buffer++; } /* Split nal units */ while( i_buffer 4 ) { int i_offset; int i_size = i_buffer; int i_skip = i_buffer; /* search nal end */ for( i_offset = 4; i_offset+2 i_buffer ; i_offset++) { if( p_buffer[i_offset] == 0 p_buffer[i_offset+1] == 0 p_buffer[i_offset+2] == 1 ) { /* we found another startcode */ i_size = i_offset - ( p_buffer[i_offset-1] == 0 ? 1 : 0); i_skip = i_offset; break; } } /* TODO add STAP-A to remove a lot of overhead with small slice/sei/... */ UINT iWrite = TransportH264Nal(p_buffer, i_size, pts, (i_size = i_buffer) ); if (iWrite 0 ) writeSize += iWrite; i_buffer -= i_skip; p_buffer += i_skip; } return writeSize; } UINT MediaStreamH264::TransportH264Nal(const PBYTE pNal, UINT nalSize, INT32 pts, BOOL isLast) { ATLock atlock(m_tlockRun); if (m_bRun == FALSE) return 0; if( nalSize 5 ) return 0; UINT mtu = m_nMTU; const int i_max = mtu - RTP_HEADER_SIZE; /* payload max in one packet */ int i_nal_hdr; int i_nal_type; i_nal_hdr = pNal[3]; i_nal_type = i_nal_hdr0x1f; string sps; string pps; if( i_nal_type == 7 || i_nal_type == 8 ) { /* XXX Why do you want to remove them ? It will break streaming with * SPS/PPS change (broadcast) ? */ return 0; } /* Skip start code */ PBYTE p_data = pNal; int i_data = nalSize; p_data += 3; i_data -= 3; int writeSize = 0; if( i_data = i_max ) { /* Single NAL unit packet */ //writeSize = m_pRtpTransport-SetRtpData(p_data, i_data, pts, isLast); writeSize = m_pRtpTransport-Write(p_data, i_data, m_nRtpPayloadType, pts, 0, isLast); if (writeSize = 0) return 0; re

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档