Cleanup rtp utils in media/base
Remove unused functions GetRtpHeader/GetRtpHeaderLength Replace usage of SetRtpHeader with webrtc::RtpPacket Move SetRtpSsrc next to the only place it is used. Bug: None Change-Id: I3ecc244b1a2bdb2d68e0dbdb34dd60160a3101f8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/225547 Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34447}
This commit is contained in:
parent
e09a174746
commit
fb1a0f0e1f
@ -18,6 +18,7 @@
|
||||
#include "media/base/media_channel.h"
|
||||
#include "media/base/rtp_utils.h"
|
||||
#include "rtc_base/byte_order.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/copy_on_write_buffer.h"
|
||||
#include "rtc_base/dscp.h"
|
||||
#include "rtc_base/message_handler.h"
|
||||
@ -127,10 +128,7 @@ class FakeNetworkInterface : public MediaChannel::NetworkInterface,
|
||||
rtp_packets_.push_back(*packet);
|
||||
if (conf_) {
|
||||
for (size_t i = 0; i < conf_sent_ssrcs_.size(); ++i) {
|
||||
if (!SetRtpSsrc(packet->MutableData(), packet->size(),
|
||||
conf_sent_ssrcs_[i])) {
|
||||
return false;
|
||||
}
|
||||
SetRtpSsrc(conf_sent_ssrcs_[i], *packet);
|
||||
PostMessage(ST_RTP, *packet);
|
||||
}
|
||||
} else {
|
||||
@ -182,6 +180,11 @@ class FakeNetworkInterface : public MediaChannel::NetworkInterface,
|
||||
}
|
||||
|
||||
private:
|
||||
void SetRtpSsrc(uint32_t ssrc, rtc::CopyOnWriteBuffer& buffer) {
|
||||
RTC_CHECK_GE(buffer.size(), 12);
|
||||
rtc::SetBE32(buffer.MutableData() + 8, ssrc);
|
||||
}
|
||||
|
||||
void GetNumRtpBytesAndPackets(uint32_t ssrc, int* bytes, int* packets) {
|
||||
if (bytes) {
|
||||
*bytes = 0;
|
||||
|
||||
@ -25,8 +25,6 @@
|
||||
|
||||
namespace cricket {
|
||||
|
||||
static const uint8_t kRtpVersion = 2;
|
||||
static const size_t kRtpFlagsOffset = 0;
|
||||
static const size_t kRtpPayloadTypeOffset = 1;
|
||||
static const size_t kRtpSeqNumOffset = 2;
|
||||
static const size_t kRtpTimestampOffset = 4;
|
||||
@ -120,8 +118,6 @@ void UpdateRtpAuthTag(uint8_t* rtp,
|
||||
memcpy(auth_tag, output, tag_length);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
bool GetUint8(const void* data, size_t offset, int* value) {
|
||||
if (!data || !value) {
|
||||
return false;
|
||||
@ -147,36 +143,7 @@ bool GetUint32(const void* data, size_t offset, uint32_t* value) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SetUint8(void* data, size_t offset, uint8_t value) {
|
||||
if (!data) {
|
||||
return false;
|
||||
}
|
||||
rtc::Set8(data, offset, value);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SetUint16(void* data, size_t offset, uint16_t value) {
|
||||
if (!data) {
|
||||
return false;
|
||||
}
|
||||
rtc::SetBE16(static_cast<uint8_t*>(data) + offset, value);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SetUint32(void* data, size_t offset, uint32_t value) {
|
||||
if (!data) {
|
||||
return false;
|
||||
}
|
||||
rtc::SetBE32(static_cast<uint8_t*>(data) + offset, value);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GetRtpFlags(const void* data, size_t len, int* value) {
|
||||
if (len < kMinRtpPacketLen) {
|
||||
return false;
|
||||
}
|
||||
return GetUint8(data, kRtpFlagsOffset, value);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
bool GetRtpPayloadType(const void* data, size_t len, int* value) {
|
||||
if (len < kMinRtpPacketLen) {
|
||||
@ -210,34 +177,6 @@ bool GetRtpSsrc(const void* data, size_t len, uint32_t* value) {
|
||||
return GetUint32(data, kRtpSsrcOffset, value);
|
||||
}
|
||||
|
||||
bool GetRtpHeaderLen(const void* data, size_t len, size_t* value) {
|
||||
if (!data || len < kMinRtpPacketLen || !value)
|
||||
return false;
|
||||
const uint8_t* header = static_cast<const uint8_t*>(data);
|
||||
// Get base header size + length of CSRCs (not counting extension yet).
|
||||
size_t header_size = kMinRtpPacketLen + (header[0] & 0xF) * sizeof(uint32_t);
|
||||
if (len < header_size)
|
||||
return false;
|
||||
// If there's an extension, read and add in the extension size.
|
||||
if (header[0] & 0x10) {
|
||||
if (len < header_size + sizeof(uint32_t))
|
||||
return false;
|
||||
header_size +=
|
||||
((rtc::GetBE16(header + header_size + 2) + 1) * sizeof(uint32_t));
|
||||
if (len < header_size)
|
||||
return false;
|
||||
}
|
||||
*value = header_size;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GetRtpHeader(const void* data, size_t len, RtpHeader* header) {
|
||||
return (GetRtpPayloadType(data, len, &(header->payload_type)) &&
|
||||
GetRtpSeqNum(data, len, &(header->seq_num)) &&
|
||||
GetRtpTimestamp(data, len, &(header->timestamp)) &&
|
||||
GetRtpSsrc(data, len, &(header->ssrc)));
|
||||
}
|
||||
|
||||
bool GetRtcpType(const void* data, size_t len, int* value) {
|
||||
if (len < kMinRtcpPacketLen) {
|
||||
return false;
|
||||
@ -262,24 +201,6 @@ bool GetRtcpSsrc(const void* data, size_t len, uint32_t* value) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SetRtpSsrc(void* data, size_t len, uint32_t value) {
|
||||
return SetUint32(data, kRtpSsrcOffset, value);
|
||||
}
|
||||
|
||||
// Assumes version 2, no padding, no extensions, no csrcs.
|
||||
bool SetRtpHeader(void* data, size_t len, const RtpHeader& header) {
|
||||
if (!IsValidRtpPayloadType(header.payload_type) || header.seq_num < 0 ||
|
||||
header.seq_num > static_cast<int>(UINT16_MAX)) {
|
||||
return false;
|
||||
}
|
||||
return (SetUint8(data, kRtpFlagsOffset, kRtpVersion << 6) &&
|
||||
SetUint8(data, kRtpPayloadTypeOffset, header.payload_type & 0x7F) &&
|
||||
SetUint16(data, kRtpSeqNumOffset,
|
||||
static_cast<uint16_t>(header.seq_num)) &&
|
||||
SetUint32(data, kRtpTimestampOffset, header.timestamp) &&
|
||||
SetRtpSsrc(data, len, header.ssrc));
|
||||
}
|
||||
|
||||
bool IsValidRtpPayloadType(int payload_type) {
|
||||
return payload_type >= 0 && payload_type <= 127;
|
||||
}
|
||||
|
||||
@ -26,13 +26,6 @@ const size_t kMinRtpPacketLen = 12;
|
||||
const size_t kMaxRtpPacketLen = 2048;
|
||||
const size_t kMinRtcpPacketLen = 4;
|
||||
|
||||
struct RtpHeader {
|
||||
int payload_type;
|
||||
int seq_num;
|
||||
uint32_t timestamp;
|
||||
uint32_t ssrc;
|
||||
};
|
||||
|
||||
enum RtcpTypes {
|
||||
kRtcpTypeSR = 200, // Sender report payload type.
|
||||
kRtcpTypeRR = 201, // Receiver report payload type.
|
||||
@ -53,14 +46,9 @@ bool GetRtpPayloadType(const void* data, size_t len, int* value);
|
||||
bool GetRtpSeqNum(const void* data, size_t len, int* value);
|
||||
bool GetRtpTimestamp(const void* data, size_t len, uint32_t* value);
|
||||
bool GetRtpSsrc(const void* data, size_t len, uint32_t* value);
|
||||
bool GetRtpHeaderLen(const void* data, size_t len, size_t* value);
|
||||
|
||||
bool GetRtcpType(const void* data, size_t len, int* value);
|
||||
bool GetRtcpSsrc(const void* data, size_t len, uint32_t* value);
|
||||
bool GetRtpHeader(const void* data, size_t len, RtpHeader* header);
|
||||
|
||||
bool SetRtpSsrc(void* data, size_t len, uint32_t value);
|
||||
// Assumes version 2, no padding, no extensions, no csrcs.
|
||||
bool SetRtpHeader(void* data, size_t len, const RtpHeader& header);
|
||||
|
||||
// Checks the packet header to determine if it can be an RTP or RTCP packet.
|
||||
RtpPacketType InferRtpPacketType(rtc::ArrayView<const char> packet);
|
||||
|
||||
@ -23,24 +23,7 @@ namespace cricket {
|
||||
|
||||
static const uint8_t kRtpPacketWithMarker[] = {
|
||||
0x80, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
|
||||
// 3 CSRCs (0x01020304, 0x12345678, 0xAABBCCDD)
|
||||
// Extension (0xBEDE, 0x1122334455667788)
|
||||
static const uint8_t kRtpPacketWithMarkerAndCsrcAndExtension[] = {
|
||||
0x93, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
0x01, 0x02, 0x03, 0x04, 0x12, 0x34, 0x56, 0x78, 0xAA, 0xBB, 0xCC, 0xDD,
|
||||
0xBE, 0xDE, 0x00, 0x02, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
|
||||
static const uint8_t kInvalidPacket[] = {0x80, 0x00};
|
||||
static const uint8_t kInvalidPacketWithCsrc[] = {
|
||||
0x83, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
0x01, 0x02, 0x03, 0x04, 0x12, 0x34, 0x56, 0x78, 0xAA, 0xBB, 0xCC};
|
||||
static const uint8_t kInvalidPacketWithCsrcAndExtension1[] = {
|
||||
0x93, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0x01, 0x02, 0x03, 0x04, 0x12, 0x34,
|
||||
0x56, 0x78, 0xAA, 0xBB, 0xCC, 0xDD, 0xBE, 0xDE, 0x00};
|
||||
static const uint8_t kInvalidPacketWithCsrcAndExtension2[] = {
|
||||
0x93, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
0x01, 0x02, 0x03, 0x04, 0x12, 0x34, 0x56, 0x78, 0xAA, 0xBB, 0xCC, 0xDD,
|
||||
0xBE, 0xDE, 0x00, 0x02, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};
|
||||
|
||||
// PT = 206, FMT = 1, Sender SSRC = 0x1111, Media SSRC = 0x1111
|
||||
// No FCI information is needed for PLI.
|
||||
@ -121,59 +104,12 @@ TEST(RtpUtilsTest, GetRtp) {
|
||||
EXPECT_TRUE(GetRtpSsrc(kPcmuFrame, sizeof(kPcmuFrame), &ssrc));
|
||||
EXPECT_EQ(1u, ssrc);
|
||||
|
||||
RtpHeader header;
|
||||
EXPECT_TRUE(GetRtpHeader(kPcmuFrame, sizeof(kPcmuFrame), &header));
|
||||
EXPECT_EQ(0, header.payload_type);
|
||||
EXPECT_EQ(1, header.seq_num);
|
||||
EXPECT_EQ(0u, header.timestamp);
|
||||
EXPECT_EQ(1u, header.ssrc);
|
||||
|
||||
EXPECT_FALSE(GetRtpPayloadType(kInvalidPacket, sizeof(kInvalidPacket), &pt));
|
||||
EXPECT_FALSE(GetRtpSeqNum(kInvalidPacket, sizeof(kInvalidPacket), &seq_num));
|
||||
EXPECT_FALSE(GetRtpTimestamp(kInvalidPacket, sizeof(kInvalidPacket), &ts));
|
||||
EXPECT_FALSE(GetRtpSsrc(kInvalidPacket, sizeof(kInvalidPacket), &ssrc));
|
||||
}
|
||||
|
||||
TEST(RtpUtilsTest, SetRtpHeader) {
|
||||
uint8_t packet[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
|
||||
RtpHeader header = {9, 1111, 2222u, 3333u};
|
||||
EXPECT_TRUE(SetRtpHeader(packet, sizeof(packet), header));
|
||||
|
||||
// Bits: 10 0 0 0000
|
||||
EXPECT_EQ(128u, packet[0]);
|
||||
size_t len;
|
||||
EXPECT_TRUE(GetRtpHeaderLen(packet, sizeof(packet), &len));
|
||||
EXPECT_EQ(12U, len);
|
||||
EXPECT_TRUE(GetRtpHeader(packet, sizeof(packet), &header));
|
||||
EXPECT_EQ(9, header.payload_type);
|
||||
EXPECT_EQ(1111, header.seq_num);
|
||||
EXPECT_EQ(2222u, header.timestamp);
|
||||
EXPECT_EQ(3333u, header.ssrc);
|
||||
}
|
||||
|
||||
TEST(RtpUtilsTest, GetRtpHeaderLen) {
|
||||
size_t len;
|
||||
EXPECT_TRUE(GetRtpHeaderLen(kPcmuFrame, sizeof(kPcmuFrame), &len));
|
||||
EXPECT_EQ(12U, len);
|
||||
|
||||
EXPECT_TRUE(GetRtpHeaderLen(kRtpPacketWithMarkerAndCsrcAndExtension,
|
||||
sizeof(kRtpPacketWithMarkerAndCsrcAndExtension),
|
||||
&len));
|
||||
EXPECT_EQ(sizeof(kRtpPacketWithMarkerAndCsrcAndExtension), len);
|
||||
|
||||
EXPECT_FALSE(GetRtpHeaderLen(kInvalidPacket, sizeof(kInvalidPacket), &len));
|
||||
EXPECT_FALSE(GetRtpHeaderLen(kInvalidPacketWithCsrc,
|
||||
sizeof(kInvalidPacketWithCsrc), &len));
|
||||
EXPECT_FALSE(GetRtpHeaderLen(kInvalidPacketWithCsrcAndExtension1,
|
||||
sizeof(kInvalidPacketWithCsrcAndExtension1),
|
||||
&len));
|
||||
EXPECT_FALSE(GetRtpHeaderLen(kInvalidPacketWithCsrcAndExtension2,
|
||||
sizeof(kInvalidPacketWithCsrcAndExtension2),
|
||||
&len));
|
||||
}
|
||||
|
||||
TEST(RtpUtilsTest, GetRtcp) {
|
||||
int pt;
|
||||
EXPECT_TRUE(GetRtcpType(kRtcpReport, sizeof(kRtcpReport), &pt));
|
||||
|
||||
@ -7002,18 +7002,14 @@ TEST_F(WebRtcVideoChannelTest, ReceiveDifferentUnsignaledSsrc) {
|
||||
channel_->SetDefaultSink(&renderer);
|
||||
|
||||
// Receive VP8 packet on first SSRC.
|
||||
uint8_t data[kMinRtpPacketLen];
|
||||
cricket::RtpHeader rtpHeader;
|
||||
rtpHeader.payload_type = GetEngineCodec("VP8").id;
|
||||
rtpHeader.seq_num = rtpHeader.timestamp = 0;
|
||||
rtpHeader.ssrc = kIncomingUnsignalledSsrc + 1;
|
||||
cricket::SetRtpHeader(data, sizeof(data), rtpHeader);
|
||||
rtc::CopyOnWriteBuffer packet(data, sizeof(data));
|
||||
ReceivePacketAndAdvanceTime(packet, /* packet_time_us */ -1);
|
||||
webrtc::RtpPacket rtp_packet;
|
||||
rtp_packet.SetPayloadType(GetEngineCodec("VP8").id);
|
||||
rtp_packet.SetSsrc(kIncomingUnsignalledSsrc + 1);
|
||||
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
|
||||
// VP8 packet should create default receive stream.
|
||||
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
|
||||
FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0];
|
||||
EXPECT_EQ(rtpHeader.ssrc, recv_stream->GetConfig().rtp.remote_ssrc);
|
||||
EXPECT_EQ(rtp_packet.Ssrc(), recv_stream->GetConfig().rtp.remote_ssrc);
|
||||
// Verify that the receive stream sinks to a renderer.
|
||||
webrtc::VideoFrame video_frame =
|
||||
webrtc::VideoFrame::Builder()
|
||||
@ -7026,15 +7022,13 @@ TEST_F(WebRtcVideoChannelTest, ReceiveDifferentUnsignaledSsrc) {
|
||||
EXPECT_EQ(1, renderer.num_rendered_frames());
|
||||
|
||||
// Receive VP9 packet on second SSRC.
|
||||
rtpHeader.payload_type = GetEngineCodec("VP9").id;
|
||||
rtpHeader.ssrc = kIncomingUnsignalledSsrc + 2;
|
||||
cricket::SetRtpHeader(data, sizeof(data), rtpHeader);
|
||||
rtc::CopyOnWriteBuffer packet2(data, sizeof(data));
|
||||
ReceivePacketAndAdvanceTime(packet2, /* packet_time_us */ -1);
|
||||
rtp_packet.SetPayloadType(GetEngineCodec("VP9").id);
|
||||
rtp_packet.SetSsrc(kIncomingUnsignalledSsrc + 2);
|
||||
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
|
||||
// VP9 packet should replace the default receive SSRC.
|
||||
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
|
||||
recv_stream = fake_call_->GetVideoReceiveStreams()[0];
|
||||
EXPECT_EQ(rtpHeader.ssrc, recv_stream->GetConfig().rtp.remote_ssrc);
|
||||
EXPECT_EQ(rtp_packet.Ssrc(), recv_stream->GetConfig().rtp.remote_ssrc);
|
||||
// Verify that the receive stream sinks to a renderer.
|
||||
webrtc::VideoFrame video_frame2 =
|
||||
webrtc::VideoFrame::Builder()
|
||||
@ -7048,15 +7042,13 @@ TEST_F(WebRtcVideoChannelTest, ReceiveDifferentUnsignaledSsrc) {
|
||||
|
||||
#if defined(WEBRTC_USE_H264)
|
||||
// Receive H264 packet on third SSRC.
|
||||
rtpHeader.payload_type = 126;
|
||||
rtpHeader.ssrc = kIncomingUnsignalledSsrc + 3;
|
||||
cricket::SetRtpHeader(data, sizeof(data), rtpHeader);
|
||||
rtc::CopyOnWriteBuffer packet3(data, sizeof(data));
|
||||
ReceivePacketAndAdvanceTime(packet3, /* packet_time_us */ -1);
|
||||
rtp_packet.SetPayloadType(126);
|
||||
rtp_packet.SetSsrc(kIncomingUnsignalledSsrc + 3);
|
||||
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
|
||||
// H264 packet should replace the default receive SSRC.
|
||||
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
|
||||
recv_stream = fake_call_->GetVideoReceiveStreams()[0];
|
||||
EXPECT_EQ(rtpHeader.ssrc, recv_stream->GetConfig().rtp.remote_ssrc);
|
||||
EXPECT_EQ(rtp_packet.Ssrc(), recv_stream->GetConfig().rtp.remote_ssrc);
|
||||
// Verify that the receive stream sinks to a renderer.
|
||||
webrtc::VideoFrame video_frame3 =
|
||||
webrtc::VideoFrame::Builder()
|
||||
@ -7084,14 +7076,10 @@ TEST_F(WebRtcVideoChannelTest,
|
||||
EXPECT_EQ(0u, fake_call_->GetVideoReceiveStreams().size());
|
||||
|
||||
// Receive packet on an unsignaled SSRC.
|
||||
uint8_t data[kMinRtpPacketLen];
|
||||
cricket::RtpHeader rtp_header;
|
||||
rtp_header.payload_type = GetEngineCodec("VP8").id;
|
||||
rtp_header.seq_num = rtp_header.timestamp = 0;
|
||||
rtp_header.ssrc = kSsrcs3[0];
|
||||
cricket::SetRtpHeader(data, sizeof(data), rtp_header);
|
||||
rtc::CopyOnWriteBuffer packet(data, sizeof(data));
|
||||
ReceivePacketAndAdvanceTime(packet, /* packet_time_us */ -1);
|
||||
webrtc::RtpPacket rtp_packet;
|
||||
rtp_packet.SetPayloadType(GetEngineCodec("VP8").id);
|
||||
rtp_packet.SetSsrc(kSsrcs3[0]);
|
||||
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
|
||||
// Default receive stream should be created.
|
||||
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
|
||||
FakeVideoReceiveStream* recv_stream0 =
|
||||
@ -7106,10 +7094,8 @@ TEST_F(WebRtcVideoChannelTest,
|
||||
EXPECT_EQ(kSsrcs3[0], recv_stream0->GetConfig().rtp.remote_ssrc);
|
||||
|
||||
// Receive packet on a different unsignaled SSRC.
|
||||
rtp_header.ssrc = kSsrcs3[1];
|
||||
cricket::SetRtpHeader(data, sizeof(data), rtp_header);
|
||||
packet.SetData(data, sizeof(data));
|
||||
ReceivePacketAndAdvanceTime(packet, /* packet_time_us */ -1);
|
||||
rtp_packet.SetSsrc(kSsrcs3[1]);
|
||||
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
|
||||
// New default receive stream should be created, but old stream should remain.
|
||||
ASSERT_EQ(2u, fake_call_->GetVideoReceiveStreams().size());
|
||||
EXPECT_EQ(recv_stream0, fake_call_->GetVideoReceiveStreams()[0]);
|
||||
@ -8715,14 +8701,10 @@ TEST_F(WebRtcVideoChannelTest,
|
||||
EXPECT_FALSE(rtp_parameters.encodings[0].ssrc);
|
||||
|
||||
// Receive VP8 packet.
|
||||
uint8_t data[kMinRtpPacketLen];
|
||||
cricket::RtpHeader rtpHeader;
|
||||
rtpHeader.payload_type = GetEngineCodec("VP8").id;
|
||||
rtpHeader.seq_num = rtpHeader.timestamp = 0;
|
||||
rtpHeader.ssrc = kIncomingUnsignalledSsrc;
|
||||
cricket::SetRtpHeader(data, sizeof(data), rtpHeader);
|
||||
rtc::CopyOnWriteBuffer packet(data, sizeof(data));
|
||||
ReceivePacketAndAdvanceTime(packet, /* packet_time_us */ -1);
|
||||
webrtc::RtpPacket rtp_packet;
|
||||
rtp_packet.SetPayloadType(GetEngineCodec("VP8").id);
|
||||
rtp_packet.SetSsrc(kIncomingUnsignalledSsrc);
|
||||
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
|
||||
|
||||
// The |ssrc| member should still be unset.
|
||||
rtp_parameters = channel_->GetDefaultRtpReceiveParameters();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user