|
|
@ -101,15 +101,15 @@ void VideoStream::sendSpsPps(uint8_t *sps, uint8_t *pps, int sps_len, int pps_le |
|
|
|
//sps
|
|
|
|
//sps
|
|
|
|
packet->m_body[i++] = 0xE1; |
|
|
|
packet->m_body[i++] = 0xE1; |
|
|
|
//sps len
|
|
|
|
//sps len
|
|
|
|
packet->m_body[i++] = (sps_len >> 8) & 0xff; |
|
|
|
packet->m_body[i++] = (sps_len >> 8) & 0xFF; |
|
|
|
packet->m_body[i++] = sps_len & 0xff; |
|
|
|
packet->m_body[i++] = sps_len & 0xFF; |
|
|
|
memcpy(&packet->m_body[i], sps, sps_len); |
|
|
|
memcpy(&packet->m_body[i], sps, sps_len); |
|
|
|
i += sps_len; |
|
|
|
i += sps_len; |
|
|
|
|
|
|
|
|
|
|
|
//pps
|
|
|
|
//pps
|
|
|
|
packet->m_body[i++] = 0x01; |
|
|
|
packet->m_body[i++] = 0x01; |
|
|
|
packet->m_body[i++] = (pps_len >> 8) & 0xff; |
|
|
|
packet->m_body[i++] = (pps_len >> 8) & 0xFF; |
|
|
|
packet->m_body[i++] = (pps_len) & 0xff; |
|
|
|
packet->m_body[i++] = (pps_len) & 0xFF; |
|
|
|
memcpy(&packet->m_body[i], pps, pps_len); |
|
|
|
memcpy(&packet->m_body[i], pps, pps_len); |
|
|
|
|
|
|
|
|
|
|
|
//video
|
|
|
|
//video
|
|
|
@ -132,27 +132,29 @@ void VideoStream::sendFrame(int type, uint8_t *payload, int i_payload) { |
|
|
|
i_payload -= 3; |
|
|
|
i_payload -= 3; |
|
|
|
payload += 3; |
|
|
|
payload += 3; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int i = 0; |
|
|
|
int bodySize = 9 + i_payload; |
|
|
|
int bodySize = 9 + i_payload; |
|
|
|
auto *packet = new RTMPPacket(); |
|
|
|
auto *packet = new RTMPPacket(); |
|
|
|
RTMPPacket_Alloc(packet, bodySize); |
|
|
|
RTMPPacket_Alloc(packet, bodySize); |
|
|
|
|
|
|
|
|
|
|
|
packet->m_body[0] = 0x27; // 2:None key frame 7:AVC
|
|
|
|
|
|
|
|
if (type == NAL_SLICE_IDR) { |
|
|
|
if (type == NAL_SLICE_IDR) { |
|
|
|
packet->m_body[0] = 0x17; // 1:Key frame 7:AVC
|
|
|
|
packet->m_body[i++] = 0x17; // 1:Key frame 7:AVC
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
packet->m_body[i++] = 0x27; // 2:None key frame 7:AVC
|
|
|
|
} |
|
|
|
} |
|
|
|
//AVC NALU
|
|
|
|
//AVC NALU
|
|
|
|
packet->m_body[1] = 0x01; |
|
|
|
packet->m_body[i++] = 0x01; |
|
|
|
//timestamp
|
|
|
|
//timestamp
|
|
|
|
packet->m_body[2] = 0x00; |
|
|
|
packet->m_body[i++] = 0x00; |
|
|
|
packet->m_body[3] = 0x00; |
|
|
|
packet->m_body[i++] = 0x00; |
|
|
|
packet->m_body[4] = 0x00; |
|
|
|
packet->m_body[i++] = 0x00; |
|
|
|
//packet len
|
|
|
|
//packet len
|
|
|
|
packet->m_body[5] = (i_payload >> 24) & 0xff; |
|
|
|
packet->m_body[i++] = (i_payload >> 24) & 0xFF; |
|
|
|
packet->m_body[6] = (i_payload >> 16) & 0xff; |
|
|
|
packet->m_body[i++] = (i_payload >> 16) & 0xFF; |
|
|
|
packet->m_body[7] = (i_payload >> 8) & 0xff; |
|
|
|
packet->m_body[i++] = (i_payload >> 8) & 0xFF; |
|
|
|
packet->m_body[8] = (i_payload) & 0xff; |
|
|
|
packet->m_body[i++] = (i_payload) & 0xFF; |
|
|
|
|
|
|
|
|
|
|
|
memcpy(&packet->m_body[9], payload, static_cast<size_t>(i_payload)); |
|
|
|
memcpy(&packet->m_body[i], payload, static_cast<size_t>(i_payload)); |
|
|
|
|
|
|
|
|
|
|
|
packet->m_hasAbsTimestamp = 0; |
|
|
|
packet->m_hasAbsTimestamp = 0; |
|
|
|
packet->m_nBodySize = bodySize; |
|
|
|
packet->m_nBodySize = bodySize; |
|
|
|