UPnP-AVTransport

AVTransport:1 Service Template Version 1.01

Overview and Scope(概览与范围)

本服务定义兼容 UPnP 设备架构 1.0 版本。

该服务类型可实现对音视频流传输过程的管控,其定义了一套适用于通用用户界面的音视频传输控制通用模型。该模型可用于控制各类基于光盘、磁带及固态存储介质的媒体设备,例如 CD 播放器、录像机(VCR)和 MP3 播放器等;即便是该服务的最小化实现版本,也可对调谐器进行控制。

Service Modeling Definitions(服务模型定义)

ServiceType(服务类型)

以下服务类型标识了符合本模板规范的服务:

xml 复制代码
urn:schemas-upnp-org:service:AVTransport:1

State Variables(状态变量)

  • R: 必要的;
  • O: 可选项;
  • X: 没有标准定义;

    1 CSV stands for Comma-Separated Value list. The type between brackets denotes the UPnP data type used for the elements inside the list. CVS is defined more formally in the ContentDirectory service template.











TransportState

  • 此状态变量是AVTransport 服务的核心,它定义了传输功能在概念层面的 "顶层状态",例如播放中、录制中(RECORDING)等。设备厂商无需实现该变量的所有允许值,比如不具备录制功能的媒体设备,就无需实现 RECORDING(录制中) 状态。
  • PAUSED_RECORDING(录制暂停)状态与STOPPED(停止)状态存在本质区别:处于录制暂停状态时,传输模块已完成录制准备,后续恢复录制的响应速度更快、精准度更高。而PAUSED_PLAYBACK(播放暂停)状态与 PAUSED_RECORDING 状态的差异在于,若媒体内容包含视频,播放暂停状态下设备会输出静态画面,录制暂停则无此特性。其余TransportState的取值含义均可顾名思义,无需额外说明。
  • 需注意的是,本版本 AVTransport 服务不支持各类倍速媒体复制(dubbing)功能,主要原因是跨设备复制速率目前尚无统一标准。

TransportStatus

在AVTransport 服务的运行过程中,可能会出现无法通过常规操作返回的异步错误。例如,在通过SetAVTransportURI和Play操作启动流播放一段时间后,可能会因网络拥塞或服务器故障导致渲染的媒体内容出现卡顿。这类情况可通过将此状态变量设为 "ERROR_OCCURRED" 来向控制端发送错误信号;厂商也可通过自定义扩展,使用更具体的错误描述。错误发生后的TransportState(传输状态)取决于设备的具体实现:部分设备会切换至 "STOPPED(停止)" 状态,而另一些设备则可在错误恢复后继续播放。此外,错误状态解除后,该状态变量恢复为 "OK" 的时机同样由设备实现决定。

PlaybackStorageMedium

  • 该状态变量用于标识AVTransportURI所指定资源的存储介质类型。具体规则如下:若未指定任何资源,该状态变量将被设为 "NONE" ;若AVTransportURI指向的是从 UPnP 网络获取的资源,则该状态变量会被设为 "NETWORK"。设备厂商可对该变量的允许值列表进行自定义扩展,例如可通过厂商私有方式新增各类固态存储介质的类型标识。
  • 需注意的是,此变量不用于标识信号格式或内容格式(如 MPEG2 这类编码格式),这类格式信息由与本服务关联的 ** 连接管理服务(ConnectionManager)** 对外暴露。

RecordStorageMedium

  • 该状态变量用于标识当执行Record操作时,AVTransportURI所指定资源将要被录制到的存储介质类型,具体规则如下:
    1. 若未指定任何资源,该状态变量将被设为 "NONE"
    2. 设备厂商可对该变量的允许值列表进行自定义扩展,例如可通过厂商私有方式新增各类固态存储介质的类型标识。
  • 需注意以下两点:
    1. 此变量不用于标识信号格式或内容格式(如 MPEG2 这类编码格式),这类格式信息由与本服务关联的 ** 连接管理服务(ConnectionManager)** 对外暴露;
    2. 若该服务实现不支持录制功能,则此状态变量必须被固定设为 ** "NOT_IMPLEMENTED" **。

PossiblePlaybackStorageMedia

该状态变量包含一个设备可播放存储介质类型静态的以逗号分隔的列表,其推荐取值可参考PlaybackStorageMedium变量的允许值列表。

PossibleRecordStorageMedia

该状态变量包含设备可进行录制的存储介质类型的静态逗号分隔列表,其推荐取值可参考RecordStorageMedium变量的允许值列表。若该服务实现不支持录制功能,则此状态变量必须被设为 "NOT_IMPLEMENTED"

CurrentPlayMode

该状态变量用于标识当前的播放模式(例如随机播放、重复播放等)。这类播放模式逻辑常见于光盘(CD)类音频媒体设备,但通常不被磁带类媒体设备支持。

各取值的具体含义如下:

DIRECT_1:表示仅播放单首曲目,播放完毕后即停止,不会自动切换至下一曲目;

INTRO:表示对介质中的每首曲目仅播放一段简短的试听片段(通常为 10 秒左右);

其余播放模式取值的含义均可顾名思义,无需额外说明。

TransportPlaySpeed

该状态变量为有理数的字符串表示形式,用于标识相对于正常速率的播放 / 录制速率。典型取值包括1(正常速率)、1/2(半速)、2(二倍速)、-1(反向正常速率)、1/10(十分之一速)等。

设备实际支持的速率可从 AVTransport 服务描述中该状态变量的AllowedValueList(允许值列表)中获取。规范强制要求设备必须支持1(正常速率)这一取值,且禁止使用0作为速率值。

RecordMediumWriteStatus

该状态变量用于标识当前已加载介质的写保护状态,各取值含义如下:

  • NOT_WRITABLE:表示介质本身为 "只读" 属性(例如 DVD-ROM 光盘),或设备不支持在当前介质上执行录制操作;
  • PROTECTED:表示介质本身具备可写入能力,但当前处于写保护状态(例如开启了保护的 VHS 录像带);
  • UNKNOWN:表示设备未加载任何介质,此时无法判定写保护状态;
  • NOT_IMPLEMENTED:若服务实现本身不支持录制功能,则该状态变量必须固定为此值。

CurrentRecordQualityMode

该状态变量用于标识当前设置的录制质量模式,其取值格式为 "Quality Ordinal:label" (即 "质量序数:标签")。

其中:

  • Quality Ordinal(质量序数) 代表设备支持的特定相对质量等级,取值范围为从 0(最低质量)到 n(最高质量)的整数;
  • 与序数关联的 label(标签) 则是该质量等级的易读性说明,用于向用户直观展示序数对应的质量含义。

若服务实现本身不支持录制功能,则此状态变量必须被设为 "NOT_IMPLEMENTED"

PossibleRecordQualityModes

  • 该状态变量包含设备所支持的录制质量模式的静态逗号分隔列表。例如,对于模拟 VHS 录像机,其取值字符串可为0:EP,1:LP,2:SP;而对于个人视频录像机(PVR),取值字符串则可为0:BASIC,1:MEDIUM,2:HIGH。具体的取值内容由搭载 AVTransport 服务的设备类型决定。
  • 需注意的是,录制质量模式与通过连接管理服务(ConnectionManager)向网络暴露的内容格式相互独立,二者无直接关联。若服务实现本身不支持录制功能,则此状态变量必须被设为**"NOT_IMPLEMENTED"**。

NumberOfTracks

  • 该状态变量表示AVTransport 实例所管控的曲目 / 章节 / 频道数量,其取值规则如下:
    若 AVTransport 实例未关联任何资源(未调用SetAVTransportURI指定资源),且无默认资源(例如未加载光盘),则NumberOfTracks的值必须为0;
    若存在关联资源或默认资源,则其值需为 1 或更大的正整数。
  • 针对不同类型的媒体,该变量的取值逻辑存在差异:
    对于不支持 "曲目" 概念的磁带类媒体,此状态变量恒为1(因磁带为线性播放介质,无独立曲目划分);
    对于激光影碟(LD)和数字视频光盘(DVD)类媒体,"曲目" 定义为章节编号;
    对于提供频道索引列表的调谐器,"曲目" 定义为频道列表中的索引编号。
  • 此外,该状态变量的值必须与AVTransportURI所标识的资源保持一致:
    若AVTransportURI指向单个 MP3 文件,则NumberOfTracks需为1;
    若AVTransportURI指向播放列表文件,则NumberOfTracks需等于播放列表中的条目数量。

CurrentTrack

  • 该状态变量的取值规则如下:
    • 若NumberOfTracks的值为 0(即无关联资源),则CurrentTrack的值也为0;
    • 若NumberOfTracks不为 0,则CurrentTrack存储当前选中播放单元的序号,序号从1开始,最大值为NumberOfTracks的取值(包含该最大值)。
  • 针对不同类型的媒体,CurrentTrack的含义存在对应的适配逻辑:
    • 对于不支持 "曲目" 概念的磁带类媒体,该状态变量恒为1(因磁带无独立播放单元划分,整体视为一个播放单元);
    • 对于激光影碟(LD)和数字视频光盘(DVD)类媒体,"曲目" 等同于章节编号,因此CurrentTrack即当前播放章节的序号;
    • 对于提供频道索引列表的调谐器,CurrentTrack定义为频道列表中的当前索引编号,即当前选中频道的序号。

CurrentTrackDuration

  • 该状态变量表示当前播放单元的时长,其取值为特定格式的字符串,支持两种格式:H+:MM:SS[.F+] 或 H+:MM:SS[.F0/F1]

  • 各字段的具体定义如下:

    • H+:1 位或多位数字,用于表示已流逝的小时数;
    • MM:固定 2 位数字,用于表示分钟数(取值范围为 00~59);
    • SS:固定 2 位数字,用于表示秒数(取值范围为 00~59);
    • .F+\]:可选字段,为小数点后跟随 1 位或多位数字,用于表示秒的小数部分;

  • 此外,该字符串可选择性地以正号(+)或负号(-)开头;若不存在秒的小数部分,小数点本身可省略。需注意以下约束:

    • 该变量不适用于调谐器(因调谐器的频道无固定时长属性);
    • 若服务实现不支持获取播放单元时长信息,则此状态变量必须设为 "NOT_IMPLEMENTED"

CurrentMediaDuration

该状态变量表示由AVTransportURI标识的媒体总时长,其核心规则与格式要求如下:

  • 取值关联逻辑
    若AVTransportURI仅指向单个播放单元(曲目 / 章节),则CurrentMediaDuration的值与CurrentTrackDuration(当前播放单元时长)完全一致;
    若AVTransportURI指向多播放单元资源(如整张专辑、播放列表),则其值为所有播放单元的时长总和。
  • 格式规范
    该变量的格式与CurrentTrackDuration完全相同,支持H+:MM:SS[.F+]或H+:MM:SS[.F0/F1]两种格式(具体字段定义可参考前文CurrentTrackDuration的说明)。
  • 特殊场景取值
    若 AVTransport 实例未关联任何资源(未调用SetAVTransportURI且无默认加载的介质,如未放入光盘),则CurrentMediaDuration必须设为 "00:00:00"

若服务实现不支持获取媒体总时长信息,则此状态变量需固定设为 "NOT_IMPLEMENTED"

CurrentTrackMetaData

  • 该状态变量存储的是与CurrentTrackURI所指向资源关联的元数据,其格式为有效的DIDL-Lite XML 片段(该格式在内容目录服务(ContentDirectory)模板中定义)。
  • 元数据的来源由设备实现方式决定,主要有两种途径:
    1. 从AVTransportURIMetaData状态变量中提取;
    2. 从资源二进制文件本身中提取(例如从 MP3 音频的内置 ID3 标签中获取)。

若服务实现不支持该元数据获取功能,则此状态变量必须被设为 "NOT_IMPLEMENTED"

CurrentTrackURI

该状态变量是对当前播放单元(曲目 / 章节 / 频道)的 URI 形式引用。通过此 URI,控制端可借助 ** 内容目录服务(ContentDirectory)** 获取该播放单元关联的各类元数据,例如标题、创作者等信息。

AVTransportURI

AVTransportURIMetaData

NextAVTransportURI

NextAVTransportURIMetaData

RelativeTimePosition

AbsoluteTimePosition

RelativeCounterPosition

AbsoluteCounterPosition

CurrentTransportActions

LastChange

A_ARG_TYPE_SeekMode

A_ARG_TYPE_SeekTarget

A_ARG_TYPE_InstanceID

EVENTING AND MODERATION(事件通知与调控)

Event Model(事件模型)

ACTIONS(操作)

SetAVTransportURI

SetNextAVTransportURI

GetMediaInfo

GetTransportInfo

GetPositionInfo

GetDeviceCapabilities

GetTransportSettings

Stop

Play

Pause

Record

Seek

Next

Previous

SetPlayMode

SetRecordQualityMode

GetCurrentTransportActions

Common Error Codes

THEORY OF OPERATION(工作原理)

TransportState Control

Transport Settings

AVTransportURI Concept

AVTransport Abstraction

Supporting multiple virtual Transports

Playlist Playback

XML SERVICE DESCRIPTION

相关推荐
普普通通的南瓜13 小时前
一年期免费IP证书,为公网IP地址提供HTTPS加密
网络·网络协议·tcp/ip·安全·http·金融·https
云计算练习生14 小时前
渗透测试行业术语扫盲(第一篇)—— 基础网络与协议类术语
网络·网络协议·安全·网络安全·渗透测试·渗透测试术语
普普通通的南瓜15 小时前
无需域名,直通安全:一年期免费IP SSL证书
网络·网络协议·tcp/ip·安全·ssl
青果全球http17 小时前
HTTP代理原理揭秘:如何实现高效数据中转?
网络·网络协议·http
im_AMBER17 小时前
weather-app开发手记 01 HTTP请求基础 | Axios GET 请求
笔记·网络协议·学习·计算机网络·http·axios
张3蜂20 小时前
ip可以伪造吗
网络·网络协议·tcp/ip
打不了嗝 ᥬ᭄20 小时前
【Linux】多路转接 Select , Poll和Epoll
linux·网络·c++·网络协议·http
Hello.Reader21 小时前
从 SSE 到 WebSocket实时 Web 通信的全面解析与实战
前端·websocket·网络协议
chuxinweihui21 小时前
⽹络层IP协议
服务器·网络·网络协议·tcp/ip