File
Blob: firmware/vendor/str0m/tests/remb.rs
| 1 | use std::net::Ipv4Addr; |
| 2 | use std::time::{Duration, Instant}; |
| 3 | |
| 4 | use str0m::bwe::{Bitrate, BweKind}; |
| 5 | use str0m::media::{Direction, MediaKind}; |
| 6 | use str0m::{Event, Rtc, RtcError}; |
| 7 | use tracing::info_span; |
| 8 | |
| 9 | mod common; |
| 10 | use common::{TestRtc, init_crypto_default, init_log, negotiate, progress}; |
| 11 | |
| 12 | #[test] |
| 13 | pub fn remb() -> Result<(), RtcError> { |
| 14 | init_log(); |
| 15 | init_crypto_default(); |
| 16 | |
| 17 | let now = Instant::now(); |
| 18 | let l_rtc = Rtc::builder().build(now); |
| 19 | let r_rtc = Rtc::builder().build(now); |
| 20 | |
| 21 | let mut l = TestRtc::new_with_rtc(info_span!("L"), l_rtc); |
| 22 | let mut r = TestRtc::new_with_rtc(info_span!("R"), r_rtc); |
| 23 | |
| 24 | l.add_host_candidate((Ipv4Addr::new(1, 1, 1, 1), 1000).into()); |
| 25 | r.add_host_candidate((Ipv4Addr::new(2, 2, 2, 2), 2000).into()); |
| 26 | |
| 27 | let mid = negotiate(&mut l, &mut r, |change| { |
| 28 | change.add_media(MediaKind::Video, Direction::SendOnly, None, None, None) |
| 29 | }); |
| 30 | |
| 31 | loop { |
| 32 | if l.is_connected() || r.is_connected() { |
| 33 | break; |
| 34 | } |
| 35 | progress(&mut l, &mut r)?; |
| 36 | } |
| 37 | |
| 38 | //wait for srtp success |
| 39 | let settle_time = l.duration() + Duration::from_millis(20); |
| 40 | loop { |
| 41 | progress(&mut l, &mut r)?; |
| 42 | |
| 43 | if l.duration() > settle_time { |
| 44 | break; |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | r.direct_api() |
| 49 | .stream_rx_by_mid(mid, None) |
| 50 | .expect("Should has rx") |
| 51 | .request_remb(Bitrate::bps(123456)); |
| 52 | |
| 53 | let settle_time = l.duration() + Duration::from_millis(20); |
| 54 | loop { |
| 55 | progress(&mut l, &mut r)?; |
| 56 | |
| 57 | if l.duration() > settle_time { |
| 58 | break; |
| 59 | } |
| 60 | } |
| 61 | |
| 62 | let l_remb: Vec<_> = l |
| 63 | .events |
| 64 | .iter() |
| 65 | .filter_map(|(_, e)| { |
| 66 | if let Event::EgressBitrateEstimate(event) = e { |
| 67 | Some(event) |
| 68 | } else { |
| 69 | None |
| 70 | } |
| 71 | }) |
| 72 | .collect(); |
| 73 | |
| 74 | assert_eq!(l_remb, vec![&BweKind::Remb(mid, Bitrate::bps(123456))]); |
| 75 | |
| 76 | Ok(()) |
| 77 | } |