Skip to content

Commit 4fe9221

Browse files
committed
peer_connection: Pass packet to handle_unknown_rtp_packet
More robust when used with interceptors that modify read packets.
1 parent a1611af commit 4fe9221

File tree

2 files changed

+9
-15
lines changed

2 files changed

+9
-15
lines changed

webrtc/src/peer_connection/peer_connection_internal.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -1050,17 +1050,15 @@ impl PeerConnectionInternal {
10501050

10511051
let mut buf = vec![0u8; self.setting_engine.get_receive_mtu()];
10521052
let n = rtp_stream.read(&mut buf).await?;
1053-
let mut b = &buf[..n];
10541053

1054+
let packet = rtp::packet::Packet::unmarshal(&mut &buf[..n]).unwrap();
10551055
let (mut mid, mut rid, mut rsid, payload_type) = handle_unknown_rtp_packet(
1056-
b,
1056+
&packet.header,
10571057
mid_extension_id as u8,
10581058
sid_extension_id as u8,
10591059
rsid_extension_id as u8,
10601060
)?;
10611061

1062-
let packet = rtp::packet::Packet::unmarshal(&mut b).unwrap();
1063-
10641062
// TODO: Can we have attributes on the first packets?
10651063
buffered_packets.push_back((packet, Attributes::new()));
10661064

@@ -1092,7 +1090,7 @@ impl PeerConnectionInternal {
10921090
if mid.is_empty() || (rid.is_empty() && rsid.is_empty()) {
10931091
let (pkt, _) = rtp_interceptor.read(&mut buf, &a).await?;
10941092
let (m, r, rs, _) = handle_unknown_rtp_packet(
1095-
&buf[..n],
1093+
&pkt.header,
10961094
mid_extension_id as u8,
10971095
sid_extension_id as u8,
10981096
rsid_extension_id as u8,

webrtc/src/rtp_transceiver/mod.rs

+6-10
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ use portable_atomic::{AtomicBool, AtomicU8};
1414
use serde::{Deserialize, Serialize};
1515
use smol_str::SmolStr;
1616
use tokio::sync::{Mutex, OnceCell};
17-
use util::Unmarshal;
1817

1918
use crate::api::media_engine::MediaEngine;
2019
use crate::error::{Error, Result};
@@ -527,33 +526,30 @@ pub(crate) async fn satisfy_type_and_direction(
527526
/// handle_unknown_rtp_packet consumes a single RTP Packet and returns information that is helpful
528527
/// for demuxing and handling an unknown SSRC (usually for Simulcast)
529528
pub(crate) fn handle_unknown_rtp_packet(
530-
buf: &[u8],
529+
header: &rtp::header::Header,
531530
mid_extension_id: u8,
532531
sid_extension_id: u8,
533532
rsid_extension_id: u8,
534533
) -> Result<(String, String, String, PayloadType)> {
535-
let mut reader = buf;
536-
let rp = rtp::packet::Packet::unmarshal(&mut reader)?;
537-
538-
if !rp.header.extension {
534+
if !header.extension {
539535
return Ok((String::new(), String::new(), String::new(), 0));
540536
}
541537

542-
let payload_type = rp.header.payload_type;
538+
let payload_type = header.payload_type;
543539

544-
let mid = if let Some(payload) = rp.header.get_extension(mid_extension_id) {
540+
let mid = if let Some(payload) = header.get_extension(mid_extension_id) {
545541
String::from_utf8(payload.to_vec())?
546542
} else {
547543
String::new()
548544
};
549545

550-
let rid = if let Some(payload) = rp.header.get_extension(sid_extension_id) {
546+
let rid = if let Some(payload) = header.get_extension(sid_extension_id) {
551547
String::from_utf8(payload.to_vec())?
552548
} else {
553549
String::new()
554550
};
555551

556-
let srid = if let Some(payload) = rp.header.get_extension(rsid_extension_id) {
552+
let srid = if let Some(payload) = header.get_extension(rsid_extension_id) {
557553
String::from_utf8(payload.to_vec())?
558554
} else {
559555
String::new()

0 commit comments

Comments
 (0)