If any namespace tuple field is not valid as defined in this document, or
describes tracks that the publisher does not support, a REQUEST_ERROR with
DOES_NOT_EXIST is returned. The reason phrase SHOULD identify the tuple
field. If producing the tracks would exceed the publisher's limits, a
REQUEST_ERROR with EXCESSIVE_LOAD is returned.¶
A publisher delivers a set of tracks in one of two ways. It sends
PUBLISH_NAMESPACE for the Track Namespace and then PUBLISH for each track,
so that relays receive the tracks before any subscriber asks for them. Or it
sends PUBLISH_NAMESPACE for the Track Namespace only, and relays forward
each SUBSCRIBE for a track in the namespace to it.¶
Upon receiving a valid SUBSCRIBE or FETCH for a moq-test-tracks track, the
publisher MUST publish objects according to the parameters of the namespace.¶
Upon receiving a SUBSCRIBE_TRACKS whose Track Namespace Prefix is a
moq-test-tracks Track Namespace, the publisher MUST use PUBLISH to send each
track in the namespace. If a PUBLISH is rejected, the publisher stops sending
objects for that track immediately.¶
A publisher MAY serve moq-test-tracks on demand. To do so, it sends
PUBLISH_NAMESPACE for a prefix whose last tuple field is "moq_test_tracks_00".
Relays route any SUBSCRIBE whose Track Namespace matches this prefix to the
publisher (Section 2.4.2 of [MoQT]).¶
-
The publisher begins producing a set of tracks upon the first request for
its Track Namespace.¶
-
It serves later requests for the same Track Namespace from the same media.
It MAY also serve a Track Namespace that describes the same set of tracks
from the same media.¶
-
It MAY stop producing the tracks when no subscriptions remain.¶
A publisher that serves clips on demand sends one PUBLISH_NAMESPACE for each
clip, with the clip's prefix. A subscriber can discover the clips a
deployment offers by sending SUBSCRIBE_NAMESPACE for the deployment's prefix
[MoQT].¶
A Track Namespace that omits trailing tuple fields is a tuple prefix of the
Track Namespaces that spell them out. A relay that routes by Track Namespace
prefix can therefore forward a request for a longer Track Namespace to the
publisher of a shorter one, which returns DOES_NOT_EXIST unless it serves
the requested set of tracks. Likewise, a SUBSCRIBE_NAMESPACE for a
moq-test-tracks Track Namespace also matches the longer Track Namespaces
that extend it. A deployment that runs publishers of fixed sets of tracks
alongside an on-demand publisher SHOULD give them distinct prefixes.
Otherwise a relay can route a request that the on-demand publisher would
serve to a fixed publisher that cannot.¶
Ending a set of tracks is not an error. When the duration in tuple field 12
elapses, or when the publisher ends the tracks earlier, for example at a
limit of its own, the publisher ends each track gracefully [MoQT]:¶
-
It marks the end of the track with the End of Track object status.¶
-
It sends PUBLISH_DONE with status code TRACK_ENDED for each subscription
to the track.¶
-
If it sent PUBLISH_NAMESPACE for the Track Namespace of the set, it then
sends PUBLISH_NAMESPACE_DONE.¶
The End of Track status takes the Location one past the last object of the
last group. It is sent on that group's stream before the stream ends. When
that stream has already ended, as is usual for the catalog track, the status
instead takes the first Location of the next group, on a new stream. With
dgram audio, the status is sent in a datagram and can be lost, so
subscribers rely on PUBLISH_DONE.¶
The publisher does not use GOAWAY to end tracks; GOAWAY asks peers to move
to a new session.¶
When audio is sent in datagrams, certain combinations of codec and channels
result in objects that cannot be transmitted below the maximum datagram
size. If the publisher detects this when handling the
request, it responds with REQUEST_ERROR. If it detects this when publishing
an object, it sends PUBLISH_DONE with an error code. The publisher MUST NOT
send such objects on a stream instead.¶
Media encoders are not deterministic, so object payloads differ between
publishers for the same Track Namespace. A subscriber that validates
moq-test-tracks media checks the parameters of the namespace rather than
payload bytes. These parameters are the codec configuration, frame rate,
group duration, objects per group, audio delivery and the video tracks of
the set.¶