[fix] fix crash due to rtp extension

This commit is contained in:
dijunkun
2025-01-21 17:30:00 +08:00
parent 477fd1f13b
commit ea592f5a58
28 changed files with 981 additions and 144 deletions

View File

@@ -449,6 +449,14 @@ void RtpCodec::Encode(uint8_t* buffer, uint32_t size,
RtpPacket rtp_packet;
rtp_packet.SetVerion(version_);
rtp_packet.SetHasPadding(has_padding_);
has_extension_ = true;
uint32_t abs_send_time =
std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::system_clock::now().time_since_epoch())
.count();
rtp_packet.SetAbsoluteSendTimestamp(abs_send_time);
rtp_packet.SetHasExtension(has_extension_);
rtp_packet.SetMarker(1);
rtp_packet.SetPayloadType(RtpPacket::PAYLOAD_TYPE(payload_type_));
@@ -490,6 +498,14 @@ void RtpCodec::Encode(uint8_t* buffer, uint32_t size,
RtpPacket rtp_packet;
rtp_packet.SetVerion(version_);
rtp_packet.SetHasPadding(has_padding_);
has_extension_ = true;
uint32_t abs_send_time =
std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::system_clock::now().time_since_epoch())
.count();
rtp_packet.SetAbsoluteSendTimestamp(abs_send_time);
rtp_packet.SetHasExtension(has_extension_);
rtp_packet.SetMarker(index == packet_num - 1 ? 1 : 0);
rtp_packet.SetPayloadType(RtpPacket::PAYLOAD_TYPE(payload_type_));
@@ -541,6 +557,14 @@ void RtpCodec::Encode(uint8_t* buffer, uint32_t size,
RtpPacket rtp_packet;
rtp_packet.SetVerion(version_);
rtp_packet.SetHasPadding(has_padding_);
has_extension_ = true;
uint32_t abs_send_time =
std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::system_clock::now().time_since_epoch())
.count();
rtp_packet.SetAbsoluteSendTimestamp(abs_send_time);
rtp_packet.SetHasExtension(has_extension_);
rtp_packet.SetMarker(1);
rtp_packet.SetPayloadType(RtpPacket::PAYLOAD_TYPE(payload_type_));
@@ -569,6 +593,14 @@ void RtpCodec::Encode(uint8_t* buffer, uint32_t size,
RtpPacket rtp_packet;
rtp_packet.SetVerion(version_);
rtp_packet.SetHasPadding(has_padding_);
has_extension_ = true;
uint32_t abs_send_time =
std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::system_clock::now().time_since_epoch())
.count();
rtp_packet.SetAbsoluteSendTimestamp(abs_send_time);
rtp_packet.SetHasExtension(has_extension_);
rtp_packet.SetMarker(index == packet_num - 1 ? 1 : 0);
rtp_packet.SetPayloadType(RtpPacket::PAYLOAD_TYPE(payload_type_));

View File

@@ -35,7 +35,7 @@ void RtpPacket::ParseRtpData() {
RtpPacket::RtpPacket() : buffer_(new uint8_t[DEFAULT_MTU]), size_(DEFAULT_MTU) {
memset(buffer_, 0, DEFAULT_MTU);
ParseRtpData();
// ParseRtpData();
}
RtpPacket::RtpPacket(uint32_t size) : buffer_(new uint8_t[size]), size_(size) {}

View File

@@ -213,12 +213,12 @@ class RtpPacket {
void SetCsrcs(std::vector<uint32_t> &csrcs) { csrcs_ = csrcs; }
void SetExtensionProfile(uint16_t extension_profile) {
extension_profile_ = extension_profile;
// extension_profile_ = extension_profile;
}
void SetExtensionData(uint8_t *extension_data, uint16_t extension_len) {
extension_len_ = extension_len;
extension_data_ = new uint8_t[extension_len_];
memcpy(extension_data_, extension_data, extension_len_);
// extension_len_ = extension_len;
// extension_data_ = new uint8_t[extension_len_];
// memcpy(extension_data_, extension_data, extension_len_);
}
void SetAbsoluteSendTimestamp(uint32_t abs_send_time) {
@@ -228,9 +228,10 @@ class RtpPacket {
// Allocate memory for the extension data if not already allocated
if (extension_data_ == nullptr) {
extension_data_ = new uint8_t[4]; // 2 bytes for profile, 2 bytes for
// length, 3 bytes for abs_send_time
extension_len_ = 4;
extension_data_ =
(uint8_t *)malloc(5); // 2 bytes for profile, 2 bytes for length, 3
// bytes for abs_send_time
extension_len_ = 5;
}
// Set the extension profile to 0xBEDE (one-byte header)