完善rtp打包

This commit is contained in:
xiongziliang
2019-09-06 23:22:04 +08:00
parent 9f1a91cda6
commit 203edc5cec
2 changed files with 30 additions and 24 deletions

View File

@@ -177,7 +177,8 @@ void H265RtpEncoder::inputFrame(const Frame::Ptr &frame) {
uiStamp %= cycleMS;
int maxSize = _ui32MtuSize - 3;
if (iLen > maxSize) { //超过MTU
//超过MTU,按照FU方式打包
if (iLen > maxSize) {
//获取帧头数据1byte
unsigned char s_e_type;
bool bFirst = true;
@@ -187,10 +188,13 @@ void H265RtpEncoder::inputFrame(const Frame::Ptr &frame) {
if (iLen < nOffset + maxSize) { //是否拆分结束
maxSize = iLen - nOffset;
mark = true;
s_e_type = 1 << 6 | naluType;
//FU end
s_e_type = (1 << 6) | naluType;
} else if (bFirst) {
s_e_type = 1 << 7 | naluType;
//FU start
s_e_type = (1 << 7) | naluType;
} else {
//FU mid
s_e_type = naluType;
}
@@ -199,11 +203,11 @@ void H265RtpEncoder::inputFrame(const Frame::Ptr &frame) {
auto rtp = makeRtp(getTrackType(), nullptr, maxSize + 3, mark, uiStamp);
//rtp payload 负载部分
uint8_t *payload = (uint8_t*)rtp->data() + rtp->offset;
//FU-A 第1个字节
//FU 第1个字节表明为FU
payload[0] = 49 << 1;
//FU-A 第2个字节貌似固定为1
//FU 第2个字节貌似固定为1
payload[1] = 1;
//FU-A 第3个字节
//FU 第3个字节
payload[2] = s_e_type;
//H265 数据
memcpy(payload + 3,pcData + nOffset, maxSize);