UPdP网络中,控制点和服务之间使用简单对象访问协议(Simple Object Access Protocol,SOAP)
根据基于DLNA实现iOS,Android投屏:SSDP发现设备收到设备描述文档(DDD)和服务描述文档(SDD),通过解析DDD获取 <controlURL>
控制点可以知道该设备上某个服务的控制点地址。再通过解析 DDD 中 <action>
中的 <name>
和 <argumentList>
获取该服务动作的动作名称,参数要求。控制点向 controlURL
发出服务调用信息,表明动作名称和相应参数来调用相应的服务。
SOAP简单对象访问协议
控制点和服务之间使用简单对象访问协议(Simple Object Access Protocol,SOAP)的格式。SOAP 的底层协议一般也是HTTP。在 UPnP 中,把 SOAP 控制/响应信息分成 3 种: UPnP Action Request、UPnP Action Response-Success 和 UPnP Action Response-Error。SOAP 和 SSDP 不一样,所使用的 HTTP 消息是有 Body 内容,Body 部分可以写想要调用的动作,叫做 Action invocation,可能还要传递参数,如想播放一个网络上的视频,就要把视频的URL传过去;服务收到后要 response ,回答能不能执行调用,如果出错则返回一个错误代码。
动作调用(UPnP Action Request)
使用POST方法发送控制消息的格式如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
POST <control URL> HTTP/1.0 Host: hostname:portNumber Content-Lenght: byte in body Content-Type: text/xml; charset="utf-8" SOAPACTION: "urn:schemas-upnp-org:service:serviceType:v#actionName" <!--必有字段--> <?xml version="1.0" encoding="utf-8"?> <!--SOAP必有字段--> <s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <!--Body内部分根据不同动作不同--> <!--动作名称--> <u:actionName xmlns:u="urn:schemas-upnp-org:service:serviceType:v"> <!--输入参数名称和值--> <argumentName>in arg values</argumentName> <!--若有多个参数则需要提供--> </u:actionName> </s:Body> </s:Envelope> |
- control URL: 基于DLNA实现iOS,Android投屏:SSDP发现设备 中提到的
设备描述文件
中urn:upnp-org:serviceId:AVTransport
服务的<controlURL>
- HOST: 上述服务器的根地址和端口号。
- actionName: 需要调用动作的名称,对应相应服务的
服务描述文件<SCPDURL>
中的<action>
的<name>
字段。 - argumentName: 输入参数名称,对应相应服务的
服务描述文件<SCPDURL>
中的<action>
<argument>
<name>
字段。 - in arg values: 输入参数值,具体的可以通过 ,可以通过
服务描述文件<SCPDURL>
<action>
<relatedStateVariable>
提到的状态变量来得知值得类型。 - urn:schemas-upnp-org:service:serviceType:v:对应该
设备描述文件
相应服务的<serviceType
字段。
动作响应(UPnP Action Response-Succes)
收到控制点发来的动作调用请求后,设备上的服务必须执行动作调用。,并在 30s 内响应。如果需要超过 30s 才能完成执行的动作,则可以先返回一个应答消息,等动作执行完成再利用事件机制返回动作响应。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
HTTP/1.0 200 OK // 响应成功响应头 Content-Type: text/xml; charset="utf-8" Date: Tue, 01 Mar 2016 10:00:36 GMT+00:00 Content-Length: byte in body <?xml version="1.0" encoding="utf-8" standalone="no"?> <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <s:Body> <!--之前部分为固定字段--> <!--之前部分为固定字段--> <u:actionNameResponse xmlns:u="urn:schemas-upnp-org:service:serviceType:v"> <!--输出变量名称和值--> <arugumentName>out arg value</arugumentName> <!--若有多个输出变量则继续写,没有可以不存在输出变量--> </u:actionNameResponse> </s:Body> </s:Envelope> |
- actionNameResponse: 响应的动作名称
- arugumentName: 当动作带有输出变量时必选,输出变量名称
- out arg values: 输出变量名称值
动作错误响应(UPnP Action Response-Succes)
如果处理动作过程中出现错误,则返回一个一下格式的错误响应。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
HTTP/1.0 500 Internal Server Error // 响应成功响应头 Content-Type: text/xml; charset="utf-8" Date: Tue, 01 Mar 2016 10:00:36 GMT+00:00 Content-Length: byte in body <?xml version="1.0" encoding="utf-8" standalone="no"?> ect Access Protocol,SOAP)
根据基于DLNA实现iOS,Android投屏:SSDP发现设备收到设备描述文档(DDD)和服务描述文档(SDD),通过解析DDD获取 SOAP简单对象访问协议控制点和服务之间使用简单对象访问协议(Simple Object Access Protocol,SOAP)的格式。SOAP 的底层协议一般也是HTTP。在 UPnP 中,把 SOAP 控制/响应信息分成 3 种: UPnP Action Request、UPnP Action Response-Success 和 UPnP Action Response-Error。SOAP 和 SSDP 不一样,所使用的 HTTP 消息是有 Body 内容,Body 部分可以写想要调用的动作,叫做 Action invocation,可能还要传递参数,如想播放一个网络上的视频,就要把视频的URL传过去;服务收到后要 response ,回答能不能执行调用,如果出错则返回一个错误代码。 动作调用(UPnP Action Request)使用POST方法发送控制消息的格式如下
动作响应(UPnP Action Response-Succes)收到控制点发来的动作调用请求后,设备上的服务必须执行动作调用。,并在 30s 内响应。如果需要超过 30s 才能完成执行的动作,则可以先返回一个应答消息,等动作执行完成再利用事件机制返回动作响应。
动作错误响应(UPnP Action Response-Succes)如果处理动作过程中出现错误,则返回一个一下格式的错误响应。
|