Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
ISO/IEC 29341-3-10:2011 defines the AVTransport:3 service, the component responsible for controlling media playback within the UPnP Audio/Video architecture. While the MediaServer manages content discovery and the ConnectionManager handles transport setup, the AVTransport service is the execution engine — it translates user playback commands into precise state machine transitions that govern media streaming, seeking, speed control, and rendering behavior.
InstanceID represents an independent playback session, enabling features such as picture-in-picture, multi-room audio synchronization, and parallel recording.The service specification defines a comprehensive state machine with five primary states: STOPPED, PLAYING, PAUSED, TRANSITIONING, and NO_MEDIA_PRESENT. Each state transition is governed by explicit preconditions. For example, transitioning from PAUSED to PLAYING requires that CurrentTransportState equals PAUSED and CurrentTransportStatus equals OK. Any deviation triggers an appropriate UPnP error code.
The Play() action accepts a Speed argument (typically 1 for normal speed, with extension values of 0.5, 2, 4, 8, 16, 32 for trick play). The Stop() action resets the transport to the beginning of the current track unless AVTransportURI has been updated. Pause() suspends playback at the current position; the renderer should maintain audio/video output in a paused state (e.g., displaying the last decoded frame).
| Action | Input Arguments | State Precondition | Result State |
|---|---|---|---|
| Play() | InstanceID, Speed | PAUSED or STOPPED | PLAYING |
| Stop() | InstanceID | Any | STOPPED |
| Pause() | InstanceID | PLAYING | PAUSED |
| Seek() | InstanceID, Unit, Target | PLAYING or PAUSED | TRANSITIONING then PLAYING/PAUSED |
| Next() | InstanceID | PLAYING or PAUSED or STOPPED | TRANSITIONING then PLAYING |
The Seek() action supports multiple seek units defined by the SeekMode parameter: ABS_TIME (absolute time in H:MM:SS format), REL_TIME (relative time offset), ABS_COUNT (absolute frame/byte count), REL_COUNT (relative count offset), TRACK_NR (track selection), and CHANNEL_FREQ (for tuner sources). The GetPositionInfo() action returns the current playback position, track duration, and relative progress as an XML-encoded string.
Seek() action during TRANSITIONING state is explicitly undefined by the standard. Always verify CurrentTransportState before dispatching a seek. A robust pattern is to queue seek commands and execute them only when the state machine reaches PLAYING or PAUSED.The AVTransport:3 service also supports recording capabilities through Record() and related actions. The RecordMediumWriteStatus state variable reports whether the recording medium is writable, while PossibleRecordStorageMedia enumerates available storage targets. For multi-URI scenarios, AVTransportURI and NextAVTransportURI enable gapless playback of sequential content — a critical feature for album playback and video playlists.
The DeviceCapabilities state variable provides a comma-separated list of supported playback features including PLAY, PAUSE, STOP, SEEK, NEXT, PREVIOUS, RECORD, and RANDOM. This introspection capability allows generic control points to adapt their UI dynamically based on renderer capabilities.
Record() action should only be permitted after authentication in multi-user environments. Without access control, any UPnP control point on the network could initiate unauthorized recording, potentially violating privacy regulations in jurisdictions with two-party consent laws.InstanceID (0-65535). A renderer supporting picture-in-picture would manage two instances simultaneously. The GetCurrentTransportActions() action returns the set of currently available actions for each instance.INVALID_SEEK_TARGET error (error code 711) when the target is unreachable.TRANSITIONING state is used when the renderer needs to reconfigure its decoding pipeline. During this state, the CurrentTransportState variable reports TRANSITIONING and the CurrentTransportStatus variable reports ERROR_OCCURRED if the format change fails.PrepareForConnection() action in CMS creates a connection that is then managed by AVTransport. Each AVTransport InstanceID is linked to a CMS ConnectionID.