资源简介
基于H.265的RTP封装。
代码片段和文件信息
#include “StdAfx.h“
#include “h265rtpsv.h“
#include
#pragma comment(lib “ws2_32.lib“)
h265rtpsv::h265rtpsv(void)
{
m_maxpayloadsize = 1440;
m_mode = PACK_MODE_RTPPAYLOAD;
m_current_ts = 0;/*or some random value*/
m_last_seq = 0;
m_aps_allowed = FALSE;
m_pNaluBuf = NULL;
m_pNaluBufItertor = NULL;
m_uNaluBufSize = 0;
m_uNaluDataLen = 0;
m_bframeEndInNaluBuf = FALSE;
m_pRtpBuf = NULL;
m_pRtpBufItertor = NULL;
m_uRtpBufSize = 0;
m_uRtpDataLen = 0;
m_uNaluCountInRtpBuf = 0;
//m_cLowestlayerId = 0;
//m_cLowestTId = 0;
}
h265rtpsv::~h265rtpsv(void)
{
if (m_pNaluBuf)
{
delete [] m_pNaluBuf;
m_pNaluBuf = NULL;
}
if (m_pRtpBuf)
{
delete [] m_pRtpBuf;
m_pRtpBuf = NULL;
}
}
void h265rtpsv::SetMaxPayloadSize( unsigned int size )
{
m_maxpayloadsize = size;
}
void h265rtpsv::SetMode( int mode/* PACK_MODE_RAW or PACK_MODE_3984 */ )
{
m_mode = mode;
}
void h265rtpsv::EnableAPs( BOOL yesno )
{
m_aps_allowed = yesno;
}
void h265rtpsv::Reset()
{
TRACE(“h265rtpsv::Reset!\n“);
m_current_ts = 0;
m_last_seq = 0;
m_uNaluDataLen = 0;
m_uRtpDataLen = 0;
m_bframeEndInNaluBuf = FALSE;
m_pNaluBufItertor = NULL;
m_pRtpBufItertor = NULL;
m_uNaluCountInRtpBuf = 0;
//m_cLowestlayerId = 0;
//m_cLowestTId = 0;
}
/*process NALUs and pack them into rtp payloads */
BOOL h265rtpsv::InputNalu( const char* nalu unsigned long nlen BOOL frameend
char*& pl unsigned long& plen BOOL& bMark BOOL& bHavemore )
{
pl = NULL;
plen = 0;
bMark = FALSE;
bHavemore = FALSE;
switch(m_mode)
{
case PACK_MODE_RAW_H265:
{ // do nothing but a check
if (!nalu)
return FALSE;
char* raw = (char*)nalu;
unsigned long rawlen = nlen;
if (rawlen > 4)
{
if (memcmp(raw NALU_STARTBYTES32 4) == 0)
{
raw += 4;
rawlen -= 4;
}
else if (memcmp(raw NALU_STARTBYTES24 3) == 0)
{
raw += 3;
rawlen -= 3;
}
}
if (nlen > m_maxpayloadsize)
{
TRACE(“This H264 packet does not fit into mtu: size=%i\n“ nlen);
return FALSE;
}
pl = raw;
plen = rawlen;
bMark = frameend;
bHavemore = FALSE;
return TRUE;
}
break;
case PACK_MODE_RTPPAYLOAD:
{ // do pack
char* raw = (char*)nalu;
unsigned long rawlen = nlen;
if (!raw)
{
raw = m_pNaluBuf;
rawlen = m_uNaluDataLen;
if (!raw)
{
return FALSE;
}
}
else
{
m_uNaluDataLen = 0;
m_pNaluBufItertor = NULL;
}
if (rawlen > 4)
{
if (memcmp(raw NALU_STARTBYTES32 4) == 0)
{
raw += 4;
rawlen -= 4;
}
else if (memcmp(raw NALU_STARTBYTES24 3) == 0)
{
raw += 3;
rawlen -= 3;
}
}
if (m_aps_allowed)
{
if (m_uRtpDataLen > 0)
{
if (m_uRtpDataLen+rawlen+2 < m_maxpayloadsize)
{
unsigned short size = hto
- 上一篇:基于PCL开源库fpfh+icp算法实现点云配准
- 下一篇:组态王秒计时器制做
相关资源
- MT6771T_LTE-A_Smartphone_Application_Processor
- 在QT中使用RTP进行视频的采集和传输
- 流媒体相关协议标准RTP/RTSP/RTCP PDF文档
- 海思rtp封包发送
- smartprinter3.6免注册
- web3.0海康视频在线实时监控支持h.26
- HEVC/h.265视频编码解码
- H.265金山云演进之路
- RtspRtcpRtpLoad_h264.tar.gz
- 简单的RTSP RTP RTCP推送H264码流服务器实
- rtsp 服务器代码,VC可编译使用,RTS
- H265标准文档最新版,2018.2
- T-REC-H.265-201410-I!!PDF-E.pdf
- 新一代高效视频编码H.265HEVC原理、标
- 编译FFmpeg3.2.2生成的库文件及头文件
- DDS-RTPS 实时发布订阅协议 DDS互操作协
- h264码流rtp传输demo
- linux 使用jrtplib收发h.264视频文件
- live555 RTSP RTCP RTP。live555类关系图,
- udp码流接收录制工具
- H264流媒体RTP打包源代码和相关资料
- SmartPrinter3.6破解版(附带命令行与批
- H265/264码流分析工具
- HEVC编解码器参考代码HM9.1
- linux+QT下基于RTP协议的实时视频传输客
- 基于ARM的嵌入式网络视频监控系统的
- 微积分_Stewart_第六版Calculus6th edition
- 接收RTP包保存为h264文件
- H264编解码rtp发送
- onvif协议源码rtsp,rtp,gb28181等等协议
评论
共有 条评论