Commit 3a0c9723 authored by Sebastian Dröge's avatar Sebastian Dröge 🍵

WebRTC/SDP WIP

parent 9a3ef2e9
...@@ -12,6 +12,7 @@ members = [ ...@@ -12,6 +12,7 @@ members = [
"gstreamer-sdp", "gstreamer-sdp",
"gstreamer-video", "gstreamer-video",
"gstreamer-pbutils", "gstreamer-pbutils",
"gstreamer-webrtc",
"examples", "examples",
"tutorials", "tutorials",
] ]
...@@ -5,7 +5,7 @@ version = "1.0" ...@@ -5,7 +5,7 @@ version = "1.0"
min_cfg_version = "1.8" min_cfg_version = "1.8"
target_path = "gstreamer-sdp" target_path = "gstreamer-sdp"
work_mode = "normal" work_mode = "normal"
concurrency = "send+sync" concurrency = "send"
generate_safety_asserts = true generate_safety_asserts = true
doc_target_path = "docs/gstreamer-sdp/docs.md" doc_target_path = "docs/gstreamer-sdp/docs.md"
...@@ -28,7 +28,7 @@ generate = [ ...@@ -28,7 +28,7 @@ generate = [
"GstSdp.MIKEYSecSRTP", "GstSdp.MIKEYSecSRTP",
"GstSdp.MIKEYTSType", "GstSdp.MIKEYTSType",
"GstSdp.MIKEYType", "GstSdp.MIKEYType",
"GstSdp.SDPResult" "GstSdp.SDPResult",
] ]
manual = [ manual = [
...@@ -38,3 +38,23 @@ manual = [ ...@@ -38,3 +38,23 @@ manual = [
name = "Gst.Caps" name = "Gst.Caps"
status = "manual" status = "manual"
ref_mode = "ref" ref_mode = "ref"
[[object]]
name = "GstSdp.SDPMessage"
status = "generate"
use_boxed_functions = true
[[object.function]]
name = "new"
# special return type...
ignore = true
[[object.function]]
name = "uninit"
# unsafe
ignore = true
[[object]]
name = "GstSdp.SDPMedia"
status = "generate"
[options]
girs_dir = "gir-files"
library = "GstWebRTC"
version = "1.0"
min_cfg_version = "1.14"
target_path = "gstreamer-webrtc"
work_mode = "normal"
concurrency = "send+sync"
generate_safety_asserts = true
external_libraries = [
"GLib",
"GObject",
"Gst",
"GstSdp",
]
generate = [
"GstWebRTC.WebRTCDTLSTransportState",
"GstWebRTC.WebRTCICEGatheringState",
"GstWebRTC.WebRTCICEConnectionState",
"GstWebRTC.WebRTCICERole",
"GstWebRTC.WebRTCICEComponent",
"GstWebRTC.WebRTCSDPType",
]
manual = [
"GObject.Object",
"Gst.Structure",
"GstSdp.SDPMessage",
]
[[object]]
name = "GstWebRTC.WebRTCDTLSTransport"
status = "generate"
trait = false
[[object]]
name = "GstWebRTC.WebRTCICETransport"
status = "generate"
trait = false
[[object]]
name = "GstWebRTC.WebRTCRTPReceiver"
status = "generate"
trait = false
[[object]]
name = "GstWebRTC.WebRTCRTPSender"
status = "generate"
trait = false
[[object]]
name = "GstWebRTC.WebRTCRTPTransceiver"
status = "generate"
trait = false
[[object]]
name = "GstWebRTC.WebRTCSessionDescription"
status = "generate"
trait = false
This diff is collapsed.
...@@ -2,6 +2,12 @@ ...@@ -2,6 +2,12 @@
// from gir-files (https://github.com/gtk-rs/gir-files @ ???) // from gir-files (https://github.com/gtk-rs/gir-files @ ???)
// DO NOT EDIT // DO NOT EDIT
mod s_d_p_media;
pub use self::s_d_p_media::SDPMedia;
mod s_d_p_message;
pub use self::s_d_p_message::SDPMessage;
mod enums; mod enums;
pub use self::enums::MIKEYCacheType; pub use self::enums::MIKEYCacheType;
pub use self::enums::MIKEYEncAlg; pub use self::enums::MIKEYEncAlg;
......
// This file was generated by gir (https://github.com/gtk-rs/gir @ d1e0127)
// from gir-files (https://github.com/gtk-rs/gir-files @ ???)
// DO NOT EDIT
use SDPResult;
use ffi;
use glib::translate::*;
use glib_ffi;
use gst;
use std::mem;
use std::ptr;
glib_wrapper! {
pub struct SDPMedia(Boxed<ffi::GstSDPMedia>);
match fn {
copy => |ptr| ffi::gst_sdp_media_copy(mut_override(ptr)),
free => |ptr| ffi::gst_sdp_media_free(ptr),
}
}
impl SDPMedia {
pub fn add_attribute<'a, P: Into<Option<&'a str>>>(&mut self, key: &str, value: P) -> SDPResult {
let value = value.into();
let value = value.to_glib_none();
unsafe {
from_glib(ffi::gst_sdp_media_add_attribute(self.to_glib_none_mut().0, key.to_glib_none().0, value.0))
}
}
pub fn add_bandwidth(&mut self, bwtype: &str, bandwidth: u32) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_add_bandwidth(self.to_glib_none_mut().0, bwtype.to_glib_none().0, bandwidth))
}
}
pub fn add_connection(&mut self, nettype: &str, addrtype: &str, address: &str, ttl: u32, addr_number: u32) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_add_connection(self.to_glib_none_mut().0, nettype.to_glib_none().0, addrtype.to_glib_none().0, address.to_glib_none().0, ttl, addr_number))
}
}
pub fn add_format(&mut self, format: &str) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_add_format(self.to_glib_none_mut().0, format.to_glib_none().0))
}
}
pub fn as_text(&self) -> Option<String> {
unsafe {
from_glib_full(ffi::gst_sdp_media_as_text(self.to_glib_none().0))
}
}
pub fn attributes_len(&self) -> u32 {
unsafe {
ffi::gst_sdp_media_attributes_len(self.to_glib_none().0)
}
}
pub fn attributes_to_caps(&self, caps: &gst::Caps) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_attributes_to_caps(self.to_glib_none().0, caps.to_glib_none().0))
}
}
pub fn bandwidths_len(&self) -> u32 {
unsafe {
ffi::gst_sdp_media_bandwidths_len(self.to_glib_none().0)
}
}
pub fn connections_len(&self) -> u32 {
unsafe {
ffi::gst_sdp_media_connections_len(self.to_glib_none().0)
}
}
pub fn formats_len(&self) -> u32 {
unsafe {
ffi::gst_sdp_media_formats_len(self.to_glib_none().0)
}
}
//pub fn get_attribute(&self, idx: u32) -> /*Ignored*/Option<SDPAttribute> {
// unsafe { TODO: call ffi::gst_sdp_media_get_attribute() }
//}
pub fn get_attribute_val(&self, key: &str) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_media_get_attribute_val(self.to_glib_none().0, key.to_glib_none().0))
}
}
pub fn get_attribute_val_n(&self, key: &str, nth: u32) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_media_get_attribute_val_n(self.to_glib_none().0, key.to_glib_none().0, nth))
}
}
//pub fn get_bandwidth(&self, idx: u32) -> /*Ignored*/Option<SDPBandwidth> {
// unsafe { TODO: call ffi::gst_sdp_media_get_bandwidth() }
//}
pub fn get_caps_from_media(&self, pt: i32) -> Option<gst::Caps> {
unsafe {
from_glib_full(ffi::gst_sdp_media_get_caps_from_media(self.to_glib_none().0, pt))
}
}
//pub fn get_connection(&self, idx: u32) -> /*Ignored*/Option<SDPConnection> {
// unsafe { TODO: call ffi::gst_sdp_media_get_connection() }
//}
pub fn get_format(&self, idx: u32) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_media_get_format(self.to_glib_none().0, idx))
}
}
pub fn get_information(&self) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_media_get_information(self.to_glib_none().0))
}
}
//pub fn get_key(&self) -> /*Ignored*/Option<SDPKey> {
// unsafe { TODO: call ffi::gst_sdp_media_get_key() }
//}
pub fn get_media(&self) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_media_get_media(self.to_glib_none().0))
}
}
pub fn get_num_ports(&self) -> u32 {
unsafe {
ffi::gst_sdp_media_get_num_ports(self.to_glib_none().0)
}
}
pub fn get_port(&self) -> u32 {
unsafe {
ffi::gst_sdp_media_get_port(self.to_glib_none().0)
}
}
pub fn get_proto(&self) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_media_get_proto(self.to_glib_none().0))
}
}
pub fn init(&mut self) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_init(self.to_glib_none_mut().0))
}
}
//pub fn insert_attribute(&mut self, idx: i32, attr: /*Ignored*/&mut SDPAttribute) -> SDPResult {
// unsafe { TODO: call ffi::gst_sdp_media_insert_attribute() }
//}
//pub fn insert_bandwidth(&mut self, idx: i32, bw: /*Ignored*/&mut SDPBandwidth) -> SDPResult {
// unsafe { TODO: call ffi::gst_sdp_media_insert_bandwidth() }
//}
//pub fn insert_connection(&mut self, idx: i32, conn: /*Ignored*/&mut SDPConnection) -> SDPResult {
// unsafe { TODO: call ffi::gst_sdp_media_insert_connection() }
//}
pub fn insert_format(&mut self, idx: i32, format: &str) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_insert_format(self.to_glib_none_mut().0, idx, format.to_glib_none().0))
}
}
//#[cfg(any(feature = "v1_8_1", feature = "dox"))]
//pub fn parse_keymgmt(&self, mikey: /*Ignored*/MIKEYMessage) -> SDPResult {
// unsafe { TODO: call ffi::gst_sdp_media_parse_keymgmt() }
//}
pub fn remove_attribute(&mut self, idx: u32) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_remove_attribute(self.to_glib_none_mut().0, idx))
}
}
pub fn remove_bandwidth(&mut self, idx: u32) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_remove_bandwidth(self.to_glib_none_mut().0, idx))
}
}
pub fn remove_connection(&mut self, idx: u32) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_remove_connection(self.to_glib_none_mut().0, idx))
}
}
pub fn remove_format(&mut self, idx: u32) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_remove_format(self.to_glib_none_mut().0, idx))
}
}
//pub fn replace_attribute(&mut self, idx: u32, attr: /*Ignored*/&mut SDPAttribute) -> SDPResult {
// unsafe { TODO: call ffi::gst_sdp_media_replace_attribute() }
//}
//pub fn replace_bandwidth(&mut self, idx: u32, bw: /*Ignored*/&mut SDPBandwidth) -> SDPResult {
// unsafe { TODO: call ffi::gst_sdp_media_replace_bandwidth() }
//}
//pub fn replace_connection(&mut self, idx: u32, conn: /*Ignored*/&mut SDPConnection) -> SDPResult {
// unsafe { TODO: call ffi::gst_sdp_media_replace_connection() }
//}
pub fn replace_format(&mut self, idx: u32, format: &str) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_replace_format(self.to_glib_none_mut().0, idx, format.to_glib_none().0))
}
}
pub fn set_information(&mut self, information: &str) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_set_information(self.to_glib_none_mut().0, information.to_glib_none().0))
}
}
pub fn set_key(&mut self, type_: &str, data: &str) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_set_key(self.to_glib_none_mut().0, type_.to_glib_none().0, data.to_glib_none().0))
}
}
pub fn set_media(&mut self, med: &str) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_set_media(self.to_glib_none_mut().0, med.to_glib_none().0))
}
}
pub fn set_port_info(&mut self, port: u32, num_ports: u32) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_set_port_info(self.to_glib_none_mut().0, port, num_ports))
}
}
pub fn set_proto(&mut self, proto: &str) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_set_proto(self.to_glib_none_mut().0, proto.to_glib_none().0))
}
}
pub fn uninit(&mut self) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_media_uninit(self.to_glib_none_mut().0))
}
}
pub fn new() -> (SDPResult, SDPMedia) {
assert_initialized_main_thread!();
unsafe {
let mut media = ptr::null_mut();
let ret = from_glib(ffi::gst_sdp_media_new(&mut media));
(ret, from_glib_full(media))
}
}
pub fn set_media_from_caps(caps: &gst::Caps, media: &mut SDPMedia) -> SDPResult {
assert_initialized_main_thread!();
unsafe {
from_glib(ffi::gst_sdp_media_set_media_from_caps(caps.to_glib_none().0, media.to_glib_none_mut().0))
}
}
}
impl Default for SDPMedia {
fn default() -> Self {
Self::new()
}
}
unsafe impl Send for SDPMedia {}
// This file was generated by gir (https://github.com/gtk-rs/gir @ d1e0127)
// from gir-files (https://github.com/gtk-rs/gir-files @ ???)
// DO NOT EDIT
use SDPMedia;
use SDPResult;
use ffi;
use glib::translate::*;
use glib_ffi;
use gobject_ffi;
use gst;
use std::mem;
use std::ptr;
glib_wrapper! {
pub struct SDPMessage(Boxed<ffi::GstSDPMessage>);
match fn {
copy => |ptr| gobject_ffi::g_boxed_copy(ffi::gst_sdp_message_get_type(), ptr as *mut _) as *mut ffi::GstSDPMessage,
free => |ptr| gobject_ffi::g_boxed_free(ffi::gst_sdp_message_get_type(), ptr as *mut _),
get_type => || ffi::gst_sdp_message_get_type(),
}
}
impl SDPMessage {
pub fn add_attribute<'a, P: Into<Option<&'a str>>>(&mut self, key: &str, value: P) -> SDPResult {
let value = value.into();
let value = value.to_glib_none();
unsafe {
from_glib(ffi::gst_sdp_message_add_attribute(self.to_glib_none_mut().0, key.to_glib_none().0, value.0))
}
}
pub fn add_bandwidth(&mut self, bwtype: &str, bandwidth: u32) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_message_add_bandwidth(self.to_glib_none_mut().0, bwtype.to_glib_none().0, bandwidth))
}
}
pub fn add_email(&mut self, email: &str) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_message_add_email(self.to_glib_none_mut().0, email.to_glib_none().0))
}
}
pub fn add_media(&mut self, media: &mut SDPMedia) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_message_add_media(self.to_glib_none_mut().0, media.to_glib_none_mut().0))
}
}
pub fn add_phone(&mut self, phone: &str) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_message_add_phone(self.to_glib_none_mut().0, phone.to_glib_none().0))
}
}
pub fn add_time(&mut self, start: &str, stop: &str, repeat: &[&str]) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_message_add_time(self.to_glib_none_mut().0, start.to_glib_none().0, stop.to_glib_none().0, repeat.to_glib_none().0))
}
}
pub fn add_zone(&mut self, adj_time: &str, typed_time: &str) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_message_add_zone(self.to_glib_none_mut().0, adj_time.to_glib_none().0, typed_time.to_glib_none().0))
}
}
pub fn as_text(&self) -> Option<String> {
unsafe {
from_glib_full(ffi::gst_sdp_message_as_text(self.to_glib_none().0))
}
}
pub fn attributes_len(&self) -> u32 {
unsafe {
ffi::gst_sdp_message_attributes_len(self.to_glib_none().0)
}
}
pub fn attributes_to_caps(&self, caps: &gst::Caps) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_message_attributes_to_caps(self.to_glib_none().0, caps.to_glib_none().0))
}
}
pub fn bandwidths_len(&self) -> u32 {
unsafe {
ffi::gst_sdp_message_bandwidths_len(self.to_glib_none().0)
}
}
pub fn dump(&self) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_message_dump(self.to_glib_none().0))
}
}
pub fn emails_len(&self) -> u32 {
unsafe {
ffi::gst_sdp_message_emails_len(self.to_glib_none().0)
}
}
//pub fn get_attribute(&self, idx: u32) -> /*Ignored*/Option<SDPAttribute> {
// unsafe { TODO: call ffi::gst_sdp_message_get_attribute() }
//}
pub fn get_attribute_val(&self, key: &str) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_message_get_attribute_val(self.to_glib_none().0, key.to_glib_none().0))
}
}
pub fn get_attribute_val_n(&self, key: &str, nth: u32) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_message_get_attribute_val_n(self.to_glib_none().0, key.to_glib_none().0, nth))
}
}
//pub fn get_bandwidth(&self, idx: u32) -> /*Ignored*/Option<SDPBandwidth> {
// unsafe { TODO: call ffi::gst_sdp_message_get_bandwidth() }
//}
//pub fn get_connection(&self) -> /*Ignored*/Option<SDPConnection> {
// unsafe { TODO: call ffi::gst_sdp_message_get_connection() }
//}
pub fn get_email(&self, idx: u32) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_message_get_email(self.to_glib_none().0, idx))
}
}
pub fn get_information(&self) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_message_get_information(self.to_glib_none().0))
}
}
//pub fn get_key(&self) -> /*Ignored*/Option<SDPKey> {
// unsafe { TODO: call ffi::gst_sdp_message_get_key() }
//}
pub fn get_media(&self, idx: u32) -> Option<SDPMedia> {
unsafe {
from_glib_none(ffi::gst_sdp_message_get_media(self.to_glib_none().0, idx))
}
}
//pub fn get_origin(&self) -> /*Ignored*/Option<SDPOrigin> {
// unsafe { TODO: call ffi::gst_sdp_message_get_origin() }
//}
pub fn get_phone(&self, idx: u32) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_message_get_phone(self.to_glib_none().0, idx))
}
}
pub fn get_session_name(&self) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_message_get_session_name(self.to_glib_none().0))
}
}
//pub fn get_time(&self, idx: u32) -> /*Ignored*/Option<SDPTime> {
// unsafe { TODO: call ffi::gst_sdp_message_get_time() }
//}
pub fn get_uri(&self) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_message_get_uri(self.to_glib_none().0))
}
}
pub fn get_version(&self) -> Option<String> {
unsafe {
from_glib_none(ffi::gst_sdp_message_get_version(self.to_glib_none().0))
}
}
//pub fn get_zone(&self, idx: u32) -> /*Ignored*/Option<SDPZone> {
// unsafe { TODO: call ffi::gst_sdp_message_get_zone() }
//}
pub fn init(&mut self) -> SDPResult {
unsafe {
from_glib(ffi::gst_sdp_message_init(self.to_glib_none_mut().0))
}
}
//pub fn insert_attribute(&mut self, idx: i32, attr: /*Ignored*/&mut SDPAttribute) -> SDPResult {
// unsafe { TODO: call ffi::gst_sdp_message_insert_attribute() }
//}
//pub fn insert_bandwidth(&mut self, idx: i32, bw: /*Ignored*/&mut SDPBandwidth) -> SDPResult {
// unsafe { TODO: call ffi::gst_sdp_message_insert_bandwidth() }
//}