- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Fri, 28 Aug 2015 23:20:43 +0200
- To: public-webrtc@w3.org
- Message-ID: <55E0D0AB.4090907@alvestrand.no>
Perhaps (freely fantasizing) our model should be that there always exist
as many RTPSenders and RTPReceivers as the number of m-lines in the next
SDP createOffer will create, and that what happens when you do addTrack
is either that you bind to an existing sender or add a new one (causing
negotiationneded)? And that the ones without a track always were
active=false?
And we could let getRTPSender always return all of them?
This would map a few more semantics reasonably:
- "negotiationneded" means "there are more senders/receivers than the
current SDP (exception: When you need to change a parameter by offer/answer)
- "sendonly/recvonly/sendrecv" can be completely determined from
RTPsender.active and RTPreceiver.active (when calling createOffer), or
be set by a setLocalDescription / setRemoteDescription
- replaceTrack can be used on any RTP sender/receiver
- offerToReceiveVideo sets the minimum number of m=video media sections
(can only increase, can never decrease)
- createRTPSender always increases the number of m-lines by one, which
implicitly creates an RTPReceiver (and vice versa).
Or perhaps it makes life no simpler.....
On 08/28/2015 08:48 PM, Peter Thatcher wrote:
>
>
> On Thu, Aug 27, 2015 at 2:23 PM, Justin Uberti <juberti@google.com
> <mailto:juberti@google.com>> wrote:
>
> I think this is an interesting idea, but unfortunately it leads to
> other questions:
>
> 1) offerToReceiveVideo can be set with a lower number to create
> a=sendonly m= lines. That is, lines with only a sender, but no
> receiver. Clearly createRtpReceiver cannot accomplish this, so
> what do we do?
>
> One option could be to *always* generate a RtpReceiver when a
> RtpSender is created, and then .active can be set to false on the
> RtpReceiver to make the overall line a=sendonly.
>
>
> Ah, good point. That's a use case I had forgotten about. I think
> the option of always creating an RtpSender that can be
> deactivated/closed/removed/whatever with addTrack makes sense.
> That's effectively what it does already. But then we'd need to make
> it clear that "addTrack" really means "sendAndReceiveTrack".
>
>
>
>
> 2) what happens if you call createRtpReceiver on the callee side?
> OfferToCreateVideo only affects the offerer, but with
> createRtpReceiver we'd need to understand the callee behavior as
> well.
>
> It seems like it would create an 'extra' receiver, similar to how
> this is handled on the offerer side, and therefore require a
> renegotiation to take effect.
>
>
> I think it would create a new m-line, which would fire
> onnegitationneeded, just like createRtpSender does.
>
>
>
> On Wed, Aug 26, 2015 at 2:54 PM, Peter Thatcher
> <pthatcher@google.com <mailto:pthatcher@google.com>> wrote:
>
> It looks like we'll soon be adding
> PeerConnection.createRtpSender, which is a way to create an
> RtpSender before one has a track to send.
>
> The logic corollary is PeerConnection.createRtpReceiver, which
> would be a way to create an RtpReceiver before any media
> negotiation has occurred. In other words, it would serve the
> same purpose as "offerToReceiveVideo".
>
> In both implementing offerToReceiveVideo and using it in JS, I
> found it awkward. I think the following example code would be
> more natural:
>
> var receiver = pc.createRtpReceiver("video");
> // The offer now acts like it currently does with
> "offerToReceiveVideo = 1".
> var offer = pc.createOffer();
> // JS can use the receiver.track immediately.
>
>
> I think this would be more natural, and more logically
> consistent with PeerConnection.createRtpSender.
>
>
> If you'd like to see how it would look in a PR, here it is:
>
> https://github.com/w3c/webrtc-pc/pull/279/files
>
>
>
>
>
>
>
>
--
Surveillance is pervasive. Go Dark.
Received on Friday, 28 August 2015 21:21:16 UTC