From 0d8a3082fe32e9dd89deea9f051f6e53df591646 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 27 Jan 2024 18:34:29 +0100 Subject: update client native --- client-native-gui/Cargo.toml | 14 +++++----- client-native-gui/src/main.rs | 59 ++++++++++++++++++++++++++++++++----------- 2 files changed, 51 insertions(+), 22 deletions(-) (limited to 'client-native-gui') diff --git a/client-native-gui/Cargo.toml b/client-native-gui/Cargo.toml index a93c0e6..346343c 100644 --- a/client-native-gui/Cargo.toml +++ b/client-native-gui/Cargo.toml @@ -6,15 +6,15 @@ edition = "2021" [dependencies] client-native-lib = { path = "../client-native-lib" } -clap = { version = "4.4.7", features = ["derive"] } +clap = { version = "4.4.18", features = ["derive"] } async-std = "1.12.0" -tokio = { version = "1.33.0", features = ["full"] } -env_logger = "0.10.0" +tokio = { version = "1.35.1", features = ["full"] } +env_logger = "0.11.1" log = "0.4" -anyhow = "1.0.75" -crossbeam-channel = "0.5.8" +anyhow = "1.0.79" +crossbeam-channel = "0.5.11" -egui = "0.23.0" -eframe = "0.23.0" +egui = "0.25.0" +eframe = "0.25.0" libmpv = { git = "https://github.com/sirno/libmpv-rs.git", branch = "upgrade-libmpv" } 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, target: Arc>>, ) -> 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()); - - 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"); + 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"); + } + } } } } + _ => bail!("codec not supported"), } } -- cgit v1.2.3-70-g09d2