webrtc_sys/
rtp_sender.rs

1// Copyright 2025 LiveKit, Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use std::any::Any;
16
17use crate::impl_thread_safety;
18
19#[cxx::bridge(namespace = "livekit")]
20pub mod ffi {
21
22    extern "C++" {
23        include!("livekit/webrtc.h");
24        include!("livekit/rtp_parameters.h");
25        include!("livekit/media_stream.h");
26
27        type MediaType = crate::webrtc::ffi::MediaType;
28        type RtpEncodingParameters = crate::rtp_parameters::ffi::RtpEncodingParameters;
29        type RtpParameters = crate::rtp_parameters::ffi::RtpParameters;
30        type MediaStreamTrack = crate::media_stream::ffi::MediaStreamTrack;
31    }
32
33    unsafe extern "C++" {
34        include!("livekit/rtp_sender.h");
35
36        type RtpSender;
37
38        fn set_track(self: &RtpSender, track: SharedPtr<MediaStreamTrack>) -> bool;
39        fn track(self: &RtpSender) -> SharedPtr<MediaStreamTrack>;
40        fn get_stats(
41            self: &RtpSender,
42            ctx: Box<SenderContext>,
43            on_stats: fn(ctx: Box<SenderContext>, json: String),
44        );
45        fn ssrc(self: &RtpSender) -> u32;
46        fn media_type(self: &RtpSender) -> MediaType;
47        fn id(self: &RtpSender) -> String;
48        fn stream_ids(self: &RtpSender) -> Vec<String>;
49        fn set_streams(self: &RtpSender, stream_ids: &Vec<String>);
50        fn init_send_encodings(self: &RtpSender) -> Vec<RtpEncodingParameters>;
51        fn get_parameters(self: &RtpSender) -> RtpParameters;
52        fn set_parameters(self: &RtpSender, parameters: RtpParameters) -> Result<()>;
53
54        fn _shared_rtp_sender() -> SharedPtr<RtpSender>;
55    }
56
57    extern "Rust" {
58        type SenderContext;
59    }
60}
61
62#[repr(transparent)]
63pub struct SenderContext(pub Box<dyn Any + Send>);
64
65impl_thread_safety!(ffi::RtpSender, Send + Sync);