- From: Adam Bergkvist <adam.bergkvist@ericsson.com>
- Date: Tue, 25 Aug 2015 07:28:27 +0000
- To: Peter Thatcher <pthatcher@google.com>, "public-webrtc@w3.org" <public-webrtc@w3.org>
On 2015-08-22 08:36, Peter Thatcher wrote:
> On the list we have had discussion around adding an RtpSenderInit
> parameter to PC.addTrack, and around adding PC.createRtpSender. Today I
> realized that RtpSenderInit could also be used the same way
> PC.createRtpSender is.
>
> So, I have two PRs to choose from:
>
> PR 271 (https://github.com/w3c/webrtc-pc/pull/271):
>
> + <dt>RTCRtpSender createRtpSender (DOMString kind)</dt>
> +
> + <dd>
> + <p>Equivalent to calling <code>addTrack(null)<code>, but
> + the returned RtpSender is configured to send a track of
> + the given <code>kind</code>. If the returned RtpSender is
> + later set to have a different track, that track must have
> + the same kind.
> + </dd>
>
> Example:
>
> var sender = pc.createRtpSender("audio");
> // ... later ...
> sender.setTrack(track);
>
> Pros:
> - Simple
>
> Cons:
> - Adds a new method (two ways to do things)
>
> PR 272 (https://github.com/w3c/webrtc-pc/pull/272):
>
> + <dt>RTCRtpSender addTrack (
> + MediaStreamTrack track,
> + optional RTCRtpSenderInit senderDict,
> + MediaStream... streams)</dt>
>
> + <dl class="idl" title="dictionary RTCRtpSenderInit">
> + <dt>DOMString kind</dt>
> + <dd>
> + <p>The kind of the track that the <code>RtpSender</code>
> + will send. If <code>addTrack</code> is passed a null track,
> + this must be set to indicate the type of track that will be
> + set later. If <code>addTrack</code> is passed a non-null
> + track, this kind must either be unset or agree with the kind
> + of the given track.</p>
> + </dd>
> +
> + <dt>RTCRtpParameters parameters<dt>
> + <dd>
> + <p>The initial parameters to use for
> + the <code>RtpSender</code>. This is equivalent to
> + calling <code>RTCRtpSender.setParameters</code> on the
> + RTCRtpSender returned by <code>addTrack</code>.
> + </p>
> + </dd>
> + </dl>
>
> Example:
>
> var sender = pc.addTrack(null, {kind: "audio"});
> // ... later ...
> sender.setTrack(track);
>
> Pros:
> - RtpSenderInit is useful for other things (Could be used for VAD or
> MSID replacement)
>
> Cons:
> - A little more complex
>
>
> So, which do we like? I'd be happy with either.
Hi
I think #271 is more straight forward. It's a simple addition to the
API. It's not possible to provide any stream here, but perhaps that's ok.
The approach in #272, with an "injected" argument, affects the most
common usage of addTrack(), no options - just a track and a stream, and
breaks a lot of existing code.
pc.addTrack(track, null, stream);
or
pc.addTrack(track, {}, stream);
And in the majority of cases, the "kind" member is redundant since the
track has a kind. Also, what does it mean if its called with a
null-track and actual streams?
I agree that the options dictionary (in #272) could be useful for other
things, but I don't think it's a big loss since we have the RTCRtpSender
object as an API surface.
If people don't want the extra API surface and the
two-ways-of-doing-thinsg of createSender(), we could go with something like:
RTCRtpSender addTrack ((MediaStreamTrack or DOMString) trackOrKind,
MediaStream... streams);
That doesn't affect the common usage and creating an "empty" sender
would be:
pc.addTrack("audio");
The most common case would still look the same:
pc.adDTrack(track, stream);
/Adam
Received on Tuesday, 25 August 2015 07:28:55 UTC