- From: Suhas Nandakumar (snandaku) <snandaku@cisco.com>
- Date: Sun, 20 Apr 2014 19:48:06 +0000
- To: "public-webrtc@w3.org" <public-webrtc@w3.org>
- Message-ID: <37D91FC30D69DE43B61E5EEADD959F180D0F5C24@xmb-aln-x12.cisco.com>
Hello All Below is another take on Doohickeys that is based on the Constrainable interface and builds upon the concepts from other similar proposals. Idea: ------- 2 forms of constraints 1. Track constraints applied to the sources generating the tracks. [ we have this ... ] 2. Stream constraints that apply to underlying media flows with in a PeerConnection for a given MediaStreamTrack Use-cases : --------------- Constraints on controlling send/recv RTP Stream parameters such as - bandwidth - multiplexing - RTCP Mux/NoMux - Stream directionality - Simulcast/Layered coding - and more Proposal: ----------- // Generic constrainable interface for controlling media flow in and out of a // MediaStream Track. Media flow abstracts an RTP Stream. interface MediaFlow implements Constrainable { attribute RTCIceConnection iceConnnectionState; // transport state attribute RTCIceGatheringState iceGatheringState; // transport state attribute DOMString CNAME; ... } partial interface MediaStreamTrack { MediaFlow flow; // Underlying constrainable Media flow attribute sequence<MediaStream> streams; // list of synchronization contexts the track is part of .... } partial interface RTCPeerConnection { MediaFlow addTrack(MediaStreamTrack track); void removeTrack(MediaStreamTrack track); attribute sequence <MediaStreamTrack> sendTracks; attribute sequence <MediaStreamTrack> receiveTracks; ... } Usage: ------- MediaFlow flow1 = pc1.addTrack(videoTrack1) // first video source MediaFlow flow2 = pc1.addTrack(videoTrack1.clone()) // cloned from videoTrack1 MediaFlow flow3 = pc1.addTrack(audioTrack) // microphone MediaFlow flow4 = pc1.addTrack(videoTrack2) // second video source // Simulcast Example flow1.applyConstraints({bandwidth: 150-400, direction:sendonly, simulcast-id:1, priortity:High}); flow2.applyConstraints({bandwidth:100-150, direction:sendonly, simulcast-id:1}); flow4.applyConstraints({priority:Low}); pc1.createOffer() -- resulting SDP will be something like: m=audio ... m= video ... // first source simul-config:1 simul-config:2 m = video .. // second source // Layered code example flow1.applyConstraints({framerate:15, layer-id:1}); //base layer flow2.applyConstraints({framerate:30, layer-id:2}); // first dependent layer // Remote Track Handling remote_pc.onAddTrack = function(evt) { var remote-track = evt.track; var remote-streams = evt.streams; var recv-media-flow = remote-track.flow; // render track to a given media-stream/media track target or // say, apply constraint to recv-media-flow indicating direction update for example recv-media-flow.applyConstraint({direction:inactive}); } Please let me know your thoughts.. Cheers Suhas
Received on Sunday, 20 April 2014 19:48:34 UTC