If any namespace tuple field is not valid as defined in this document, or
describes tracks that the publisher does not support, the publisher MUST
respond with REQUEST_ERROR with error code DOES_NOT_EXIST. The reason phrase
SHOULD identify the tuple field. If producing the tracks would exceed the
publisher's limits, the publisher MUST respond with REQUEST_ERROR with error
code EXCESSIVE_LOAD.¶
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.¶
-
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 MUST stop
sending objects for that track immediately. A Track Namespace Prefix that
ends before tuple field 7 names no set of tracks. For such a prefix, the
publisher sends PUBLISH only for the tracks of sets it is already producing
under the prefix, and starts no new set.¶
A publisher MAY serve moq-test-tracks on demand. To do so, it sends
PUBLISH_NAMESPACE for a prefix that ends with mtt_00, or with mtt_00
and a value of tuple field 1 to serve only that content, such as one clip.
Relays route any SUBSCRIBE whose Track Namespace matches this prefix to the
publisher (Section 2.4.2 of [MOQT]).¶
-
The prefix is the only Track Namespace the publisher announces for the
sets of tracks it can produce. The parameters allow far too many sets to
enumerate, and no set exists until a request names its Track Namespace.¶
-
The publisher begins producing a set of tracks upon the first request for
its Track Namespace. While it produces the set, it MAY send
PUBLISH_NAMESPACE for the set's Track Namespace. If it does, it sends
PUBLISH_NAMESPACE_DONE when it stops producing the set.¶
-
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 subscriber discovers what a deployment serves by sending
SUBSCRIBE_NAMESPACE for the deployment's prefix followed by mtt_00
[MOQT]. It receives the prefixes that on-demand publishers announce, and
the Track Namespaces of the sets that publishers announce while producing
them. An on-demand publisher that announces one prefix for each value of
tuple field 1 it serves thereby lists its content, including its clips. The
subscriber does not learn which other parameters a publisher supports. It
writes out the Track Namespace it wants, and a publisher that does not
support that set of tracks responds with DOES_NOT_EXIST.¶
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. Publishers that share a relay SHOULD have distinct
prefixes, for example by including a field that identifies the publisher.
Otherwise a relay can route a request to a publisher that does not serve
it, such as a request that an on-demand publisher would serve to a
publisher of fixed sets of tracks.¶
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 MUST end 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 MUST NOT use GOAWAY to end tracks; GOAWAY asks peers to move
to a new session.¶
When audio is sent in datagrams, some combinations of codec and channels
produce objects larger than the maximum datagram size. If the publisher
detects this when handling the request, it MUST respond with REQUEST_ERROR
with error code DOES_NOT_EXIST. If it detects this when publishing an
object, it MUST send PUBLISH_DONE with status code INTERNAL_ERROR. 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.¶