- From: Jan-Ivar Bruaroey <jib@mozilla.com>
- Date: Fri, 17 Apr 2015 01:39:06 -0400
- To: Harald Alvestrand <harald@alvestrand.no>, "public-webrtc@w3.org" <public-webrtc@w3.org>
- Message-ID: <55309C7A.3010608@mozilla.com>
Hi Harald, I had some trouble following the example with my knowledge,
and have some questions if you don't mind.
On 4/15/15 3:31 AM, Harald Alvestrand wrote:
> In mulling over this issue, I've been thinking about failure cases,
> and about negotiated constraints.
>
> Consider this case:
>
> A negotiates with B to send video
> The agreeed capabilities for B is 320x200 max (it's a doorbell, I guess).
I'm not sure what "negotiated constraints" means. Are we talking about
session (e.g. hardware) abilities in SDP here (I assume so since you
mention doorbell)?
If so, then doesn't the 320x200 track need to be added first in order to
negotiate video?
> A sends a track to B with 320x200 format.
If the track somehow wasn't added first, but is added later instead, A
would need to renegotiate, right? Say it was an HD track, how would it
work/fail today?
> A does ReplaceTrack with a HD track (currently also being displayed in
> HD somewhere else).
>
> Three possibilities:
>
> - A downsamples to 320x200 as (conceptuaully) an internal function of
> the PeerConnection
My understanding of SDP is limited (assuming we are talking about SDP).
What does A know about B's abilities beyond the answer, which is a
subset of the offer, which, as I understand it, would only (need to)
cover the 320x200 track added?
Both PRs say "Things like dimensions and frame rate do not require
negotiation." - I relied on other people when writing that, but this may
assume things about the other end. For example, in ideal cases where the
recipient is much like the sender (e.g. a local-loop test), we can
replaceTrack between tracks with different dimensions and frameRates,
and the recipient handles the change without renegotiation (works in
Firefox: http://jsfiddle.net/oyabqd0j )! This is powerful, but a
doorbell would probably react poorly to this, so how to detect this
ahead of time from the SDP?
Does the doorbell wreck it for everybody?
> - A treats B's restrictions as (new) constraints on the track, and all
> other users switch to 320x200
In replaceTrack? No, PeerConnections can't change constraints.
Constraints is a gUM concept. To a PeerConnection, a track here is a
hose with video coming out of it. It can clamp the hose, but otherwise
has little control over what comes out of it. The knobs on the hose
(applyConstraints) are for the website to mess with, not PeerConnection,
so whatever "A" is in the example, it can't be PeerConnection.
If A, the website, wants to change camera constraints, then that's on it
to manage (though how would it learn of B's hardware limitations in this
case?)
> - ReplaceTrack fails
You skipped renegotiation, but I suspect our current implementation
would neither fail nor renegotiate over this (see two up). I confess not
having tested a doorbell.
> Replay the same case where the source of the new track is a VP8-only
> camera, and B says it can only take H.264 (I guess it's a gateway).
>
> Three possibilities:
>
> - A transcodes the video internally to PeerConnection
What do we do today for renegotiation? The PR notes " Reasons
negotiation may be needed include video differing in raw vs. pre-encoded
format".
> - A inserts transcoding at the source
Again, can't alter the source AFAIK.
> - ReplaceTrack fails
We probably fire negotiationneeded instead here.
> And of course the weird one:
>
> A does ReplaceTrack, trying to replace an audio track with a video track.
This one is covered in both PRs:
* "1. If withTrack's kind attribute differs from the kind of
RTCRtpSender.track, then reject p with
IncompatibleMediaStreamTrackError and abort these steps."
* "3. If newTrack's kind attribute differs from the kind of oldTrack,
then throw an IncompatibleMediaStreamTrackError exception and abort
these steps."
I would love to understand the example, even if the conclusion of the
subject is foregone, as it may have wider implications to what's
possible with replaceTrack and what's not.
.: Jan-Ivar :.
Received on Friday, 17 April 2015 05:39:37 UTC