- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Wed, 15 Apr 2015 09:01:40 +0200
- To: public-webrtc@w3.org
On 04/14/2015 09:25 PM, Martin Thomson wrote:
> On 14 April 2015 at 11:19, Harald Alvestrand <harald@alvestrand.no> wrote:
>> I'm worried about the idea that tracks have IDs that vary over time, and that the change in the ID is not correlated with the change in content.
> I worry about this too.
>
> I have a different proposal.
>
> 1. MediaStreamTrack.id is chosen by the receiving browser. Period.
> This whole mess with identifiers is moved to RTCRtpSender/Receiver.
> It becomes a WebRTC wart, not a problem for all MediaStream users.
I don't think this is either necessary or sufficient..... (and
currently, there is no way to choose an ID for a track - the value is
always constructed by the platform).
Just reiterating what I percieve as the original purpose of having IDs
on these items:
To let Javascript applications talk to each other about the tracks.
That is:
A sends X and Y to B
A sends (data channel, via web server, whatever) to B, something like:
{'display_map: { 'X': 'left', 'Y: 'right' }}
B displays X to the left and Y to the right.
If tracks have IDs that are consistent over the connection, this can be
done by an application without referring to any property of the
PeerConnection whatsoever; it just looks at the tracks.
I'd like that property to remain - it's not necessary, because the
receiver could look up the RTPReceiver for the track and get the
identifier value from there, but it makes life easier in the simple case.
>
> 2. The id on the RTCRtpSender is primed with the track identifier.
> This is what gets put in the signaling (a=msid). But this value can
> be changed by the app as long as the syntax constraints for the
> signaling are met.
>
> 3. The id on the RTCRtpReceiver is set during setRemoteDescription to
> whatever the signaling says. It can be mutable too. There are no
> uniqueness constraints,
>
> The only catch here is being able to tell - at the signaling level -
> at the receiver end whether the sender of a given track has created a
> new track or not. And therefore whether to use the existing
> RTCRtpReceiver, or whether to create a new one. Otherwise, the
> difference between replaceTrack (which keeps RTCRtpSender in place)
> and removeTrack+addTrack (which creates a different RTCRtpSender) is
> undetectable.
Under this scenario, one could say "receiver: obey signalling".
That is - if the a=msid value changes, this is treated as a new track.
If it doesn't change, this is treated as an old track.
>
> 4. The idea that was proposed was to detect the change based on a
> difference in a=ssrc values. New tracks will have new SSRCs.
That's messy in a simulcast / layered scenario (which is out of scope
for 1.0, but we all know it's coming).
SSRCs come and go.
>
> This is perhaps more convoluted than any of your suggestions, but it
> does address the concern that you didn't cover (unless that was
> intentional).
>
It also offers plenty of opportunity to write confusing stuff, but
that's nothing new.....
Received on Wednesday, 15 April 2015 07:02:14 UTC