Skip to content
File

Blob: firmware/vendor/str0m/tests/remb.rs

rust78 lines
1use std::net::Ipv4Addr;
2use std::time::{Duration, Instant};
3 
4use str0m::bwe::{Bitrate, BweKind};
5use str0m::media::{Direction, MediaKind};
6use str0m::{Event, Rtc, RtcError};
7use tracing::info_span;
8 
9mod common;
10use common::{TestRtc, init_crypto_default, init_log, negotiate, progress};
11 
12#[test]
13pub 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}