Change:
And also URL Since introducing transceivers, replaceTrack, early media, etc., the definition of a MediaStreamTrack has changed and track ID signaling has become somewhat pointless. In many cases, "URL" on one side will not match "URL" on the other side; endpoints must use MIDs or m= section indices or some other means to identify which track is which. Thus this PR just removes track ID signaling altogether and the lingering problems it causes.
Now that we only use the stream ID, "a=msid:{streamId}", I just want to verify that I understand this correctly: If I do addTrack(track) without any streams, "a=msid" is completely omitted. If I do addTrack(track, stream1, stream2, ...) with multiple streams, I get one "a=msid" line per stream. Is this correct?
Or is "a=msid" mandatory in which case I would have to do "a=msid:-" in the case of no stream?
FWIW, I missed this discussion, and do not agree with the change. It is a significant, breaking protocol change introduced very late in the process, and has not (AFAIK) been discussed on the mailing list. So by IETF consensus rules, there's no basis for ruling that the change has consensus in the WG.
Before this change, "a=msid" was broken e.g. URL and URL The track ID is only surfaced to JavaScript if the answerer does not have any transceivers to match with the offer. Relying on "mid" or MediaStream IDs are clearly the better alternative, because they have a reliable behavior that works not just in edge-cases and are not misleading in all other cases. An argument can be made for keeping track IDs, but I suspect the argument would be for backwards compatibility reasons or for people who want to parse SDP to figure out ID information (information which, by the way, would have been easier to carry through streams). In either case, JSEP and MSID specs . As I recall from testing, while Chrome surfaces track IDs in some edge-cases, Firefox does not. If we can survive the switch to Unified Plan without track ID related breakages, as Firefox did, then I see little reason to try to save the sinking ship that is "a=msid". This is a remnant of the track/stream way of thinking. To be discuss at TPAC. There is a slide for the issues referenced.
a=msid is still relied on to create streams with synchronized tracks -- LS groups haven't made it to any implementation afaik.
AFAIK tracks synchronization in receiver is based in RTCP CNAME rather than msid. msid is just an artifact to tell the app whether different tracks should be grouped within the same MediaStream, but that's just a hint and a unfortunate remnant of the "stream based API" that shouldn't be part of WebRTC itself.
Anyone who is sad to not be able to rely on URL could though, because of "a=msid", do this :)
NAME a=msid is not mandatory, and can be omitted if there are no streams.
discoveries when updating -msid to allow for this: omitting a=msid will lead to a default stream (legacy behavior) the way to signal that a track is no longer present is by omitting msid after it has been present so the only way to signal "one track no stream" is to send a=msid:- -msid used to allow for sending one track into multiple recipient streams.With a=msid:- it can no longer do so. PR is up. URL

Discussion:
For each MediaStream that was associated with the transceiver when it was created via addTrack or addTransceiver, an "a=msid" <del> line, as specified in I-D.ietf-mmusic-msid, Section 2.  If a MediaStreamTrack is attached to the transceiver's RtpSender, the "a=msid" lines MUST use that track's ID.  If no MediaStreamTrack is attached, a valid ID MUST be generated, in the same way that the implementation generates IDs for local tracks. If no MediaStream is associated with the transceiver, a single "a=msid" line with the special value "-" in place of the MediaStream ID, as specified in I-D.ietf-mmusic-msid, Section 3.  The track ID MUST be selected as described above. </del> <ins> line, as specified in I-D.ietf-mmusic-msid, Section 2, but omitting the "appdata" field. </ins> If the RtpTransceiver has a sendrecv or sendonly direction, and the application has specified RID values or has specified more

For each MediaStream that was associated with the transceiver when it was created via addTrack or addTransceiver, an "a=msid" <del> line, as specified in I-D.ietf-mmusic-msid, Section 2.  If a MediaStreamTrack is attached to the transceiver's RtpSender, the "a=msid" lines MUST use that track's ID.  If no MediaStreamTrack is attached, a valid ID MUST be generated, in the same way that the implementation generates IDs for local tracks. If no MediaStream is associated with the transceiver, a single "a=msid" line with the special value "-" in place of the MediaStream ID, as specified in I-D.ietf-mmusic-msid, Section 3.  The track ID MUST be selected as described above. </del> <ins> line, as specified in I-D.ietf-mmusic-msid, Section 2, but omitting the "appdata" field. </ins> Each m= section which is not bundled into another m= section, MUST contain the following attributes (which are of category IDENTICAL or

this information is superfluous when using ICE. If present, "a=msid" attributes MUST be parsed as specified in I- <del> D.ietf-mmusic-msid, Section 3.2, and their values stored. </del> <ins> D.ietf-mmusic-msid, Section 3.2, and their values stored, ignoring any "appdata" field. </ins> Any "a=imageattr" attributes MUST be parsed as specified in RFC6236, Section 3, and their values stored.