use ironrdp::rdpsnd::pdu::{AudioFormat, WaveFormat};
use ironrdp::rdpsnd::server::{RdpsndServerHandler, RdpsndServerMessage};
use ironrdp::server::SoundServerFactory;
struct AudioHandler;
impl RdpsndServerHandler for AudioHandler {
fn get_formats(&self) -> &[AudioFormat] {
&[
AudioFormat {
format: WaveFormat::PCM,
n_channels: 2,
n_samples_per_sec: 44100,
n_avg_bytes_per_sec: 176400,
n_block_align: 4,
bits_per_sample: 16,
data: None,
},
]
}
fn start(&mut self, client_format: &ClientAudioFormatPdu) -> Option<u16> {
// Start audio streaming
Some(0) // Format index
}
fn stop(&mut self) {
// Stop audio streaming
}
}
struct AudioFactory;
impl SoundServerFactory for AudioFactory {
fn build_backend(&self) -> Box<dyn RdpsndServerHandler> {
Box::new(AudioHandler)
}
}
impl ServerEventSender for AudioFactory {
fn set_sender(&mut self, sender: UnboundedSender<ServerEvent>) {
// Store sender to push audio frames
}
}
let sound = Box::new(AudioFactory);
let server = server_builder
.with_sound_factory(Some(sound))
.build();