diff options
author | metamuffin <metamuffin@disroot.org> | 2024-01-27 18:34:29 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-01-27 18:34:29 +0100 |
commit | 0d8a3082fe32e9dd89deea9f051f6e53df591646 (patch) | |
tree | 47a2a82d4f38403d3a1945b666210183c8b26a69 /client-native-gui/src/main.rs | |
parent | 19d21b7e7a96e679e6879529c3afd4a45bbd762b (diff) | |
download | keks-meet-0d8a3082fe32e9dd89deea9f051f6e53df591646.tar keks-meet-0d8a3082fe32e9dd89deea9f051f6e53df591646.tar.bz2 keks-meet-0d8a3082fe32e9dd89deea9f051f6e53df591646.tar.zst |
update client native
Diffstat (limited to 'client-native-gui/src/main.rs')
-rw-r--r-- | client-native-gui/src/main.rs | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/client-native-gui/src/main.rs b/client-native-gui/src/main.rs index 17a300b..d8543d4 100644 --- a/client-native-gui/src/main.rs +++ b/client-native-gui/src/main.rs @@ -6,6 +6,7 @@ pub mod chat; +use anyhow::bail; use async_std::task::block_on; use chat::Chat; use clap::Parser; @@ -15,7 +16,10 @@ use client_native_lib::{ protocol::{ProvideInfo, RelayMessage}, webrtc::{ rtcp::payload_feedbacks::picture_loss_indication::PictureLossIndication, - rtp::{codecs::h264::H264Packet, packetizer::Depacketizer}, + rtp::{ + codecs::{h264::H264Packet, h265::H265Packet}, + packetizer::Depacketizer, + }, track::track_remote::TrackRemote, }, Config, EventHandler, @@ -476,22 +480,47 @@ async fn track_to_raw( track: Arc<TrackRemote>, target: Arc<RwLock<VecDeque<u8>>>, ) -> anyhow::Result<()> { - let mut cached_packet = H264Packet::default(); - loop { - let (packet, _) = track.read_rtp().await?; - if !packet.payload.is_empty() { - let raw_payload = cached_packet.depacketize(&packet.payload)?; - // let raw_payload = packet.payload; - if raw_payload.len() != 0 { - debug!("writing {} bytes", raw_payload.len()); + match track.codec().capability.mime_type.as_str() { + "video/H265" => { + let mut cached_packet = H265Packet::default(); + loop { + let (packet, _) = track.read_rtp().await?; + if !packet.payload.is_empty() { + let raw_payload = cached_packet.depacketize(&packet.payload)?; + // let raw_payload = packet.payload; + if raw_payload.len() != 0 { + debug!("writing {} bytes", raw_payload.len()); + + let mut target = target.write().unwrap(); + if target.len() < 10_000_000 { + target.extend(raw_payload.into_iter()); + } else { + warn!("buffer is getting too big, dropping some data"); + } + } + } + } + } + "video/H264" => { + let mut cached_packet = H264Packet::default(); + loop { + let (packet, _) = track.read_rtp().await?; + if !packet.payload.is_empty() { + let raw_payload = cached_packet.depacketize(&packet.payload)?; + // let raw_payload = packet.payload; + if raw_payload.len() != 0 { + debug!("writing {} bytes", raw_payload.len()); - let mut target = target.write().unwrap(); - if target.len() < 10_000_000 { - target.extend(raw_payload.into_iter()); - } else { - warn!("buffer is getting too big, dropping some data"); + let mut target = target.write().unwrap(); + if target.len() < 10_000_000 { + target.extend(raw_payload.into_iter()); + } else { + warn!("buffer is getting too big, dropping some data"); + } + } } } } + _ => bail!("codec not supported"), } } |