一、UPnP协议

       UPnP通用即插即用(Universal Plug and Play)是一套局域网通用沟通规则,让手机、电脑、电视、NAS、打印机等不用手动配 IP、不用手动连设备,开机自动互相找到、发指令控制对方。UPnP 是网线 / WiFi 里所有智能设备自动互相识别。UPnP是 DLNA 的底层基础框架,协议栈五层架构如下:

 

 

   

 

二、 不同网络环境下UPnP的性能

        在家庭网络和中小型企业环境中,UPnP协议是简化网络设备互联的关键技术。对于OpenWrt(基于 Linux、专门给路由器 / 网络盒子用的开源嵌入式操作系统)用户,正确配置UPnP能提升P2P(点对点网络)应用性能,避免繁琐的手动端口映射,在这类环境中,若配置得当,可让P2P应用无需在路由器进行繁琐设置就能获得较好的性能。不过,在一些复杂的网络环境中,如大型企业网络或存在严格安全策略的网络,UPnP可能会受到限制。因为UPnP允许设备自动发现和配置,这可能会带来一定的安全风险,网络管理员可能会禁用UPnP功能,从而影响其性能发挥。另外,在IPv6环境下,虽然相关配置可针对其进行专项优化,但也可能存在兼容性问题,影响UPnP的性能表现。

三、 UPnP 完整流程

主要分为以下五个步骤:

 

 

3.1 寻址

        所有设备开机后,连上 WiFi 自动获取内网 IP地址(如192.168.x.x),不用手动设置。同一局域网内,依靠内网IP地址来区分手机、电脑、智能电视等不同的设备,分发对应的数据包。

3.2 设备发现SSDP(Simple Service Discovery Protocol)

        SSDP(简单服务发现协议)是UPnP 内部单独的发现工具,只负责搜索设备,不传输视频,也不发送指令。设备通过 UDP 1900 端口互相在局域网内广播喊话。主要有两种核心广播消息分别是设备通知消息NOTIFY和设备查询消息M-SEARCH。两者都是 SSDP 广播报文,作用都是局域网互相发现设备,只是发送方、触发时机、用途完全相反,统一前提就是要全部走 UDP 239.255.255.250:1900 局域网组播。

        NOTIFY(ssdp:alive)通俗来讲就是设备主动自我介绍,只有DMS(电脑媒体库)、DMR(Macast / 电视)这类提供服务的UPnP设备发出。发送时间包括设备刚开机、连上 WiFi 瞬间;每隔固定时间自动重发一次(一般为15分钟左右,防止设备漏收、缓存失效);以及设备下线时还会发一条 ssdp:byebye。主要是设备提前广播自己存在,DMC(手机)后台持续监听 UDP 1900 组播,收到 alive 报文后,把电视 / Macast/NAS 缓存到投屏列表,只要手机点击打开投屏页面,可以优先读取之前缓存的 alive 记录直接显示设备,但是缓存有有效期(max-age=30min),超时自动删除,不是永久缓存。

        M-SEARCH(ssdp:discover)通俗来讲就是主动搜索设备(遥控器找人),由DMC(手机/遥控器)发出,发送时间就是用户点击投屏按钮那一刻,立刻发这条搜索广播,所有 DMR / DMS 收到这条消息,符合 “视频播放 / 媒体库”类型的设备,就会单独单播回复手机,带上自己的 IP、xml 地址;手机收集全部回复,投屏列表就刷出设备。

 

SSDP 设备发现流程图

3.3 设备描述 Description

        手机访问上面的 xml 地址,下载设备说明书,包含设备基础信息、绑定的服务列表、每个服务的控制 URL、事件订阅 URL等。

3.4 设备控制 SOAP(Simple Object Access Protocol)

        SOAP(简单对象访问协议)是一套通用的基于 XML 的远程调用规范,DLNA 局域网投屏借用它实现设备控制,DMC(手机)作为控制点(客户端),向 DMR 渲染设备(电视 / Macast)下发操作指令时,DMC会把命令封装到 XML里,通过 HTTP POST 请求发给DMR预设的控制接口地址。它是专门用来给 DLNA 播放器下发播放、投屏、暂停、调节音量、进度跳转、查询当前播放状态等控制指令,DMR 执行完指令后,还会返回一段 SOAP XML 报文,告知手机本次操作是否执行成功。

 

DMC(手机)→ DMR(电视)完整交互时序

3.5 事件订阅 GENA(Generic Event Notification Architecture)

        GENA (通用事件通知架构)就是播放器主动给手机推送实时状态。

没有 GENA会出现的问题:

1)手机只能发命令,但不知道播放器现在是什么状态:

2)拖动进度条后,手机进度条不会同步更新;

3)电影自动播完,手机界面依旧显示 “播放中”;

4)在DMR上手动调音量,手机音量条不会跟着变;

5)网络卡顿缓冲,手机完全无感知。

        总之,GENA 是 UPnP 的状态推送协议,手机先订阅播放器的播放状态,之后播放器一有进度、播放模式变化,就主动发消息同步给手机,让手机界面实时和电脑播放器保持一致。

四、UPnP-AV 标准服务

        DLNA 跑在 UPnP-AV 框架上,规范定义了几个固定核心服务,分别是AVTransport 播放传输服务(DMR 独有)、RenderingControl 渲染控制服务(DMR 独有)、ContentDirectory内容目录服务(DMS 独有)和ConnectionManager 连接管理服务(DMS和DMR均有)。

4.1 播放传输服务(AVTransport)

        UPnP-AV 服务里最核心的播放调度服务,专门管理音视频播放的行为,手机所有切换片源、播放、暂停、快进的 SOAP 指令,全部发送给这个服务处理。

固定标准命名空间urn:schemas-upnp-org:service:AVTransport:1

核心职责分布图

常用指令:

SetAVTransportURI:把 DMS 视频的 URL 地址发给播放器,让电视自己去内网拉视频流。

Play:收到视频地址后,发送这条指令,电视开始播放画面。

Pause:暂停当前视频。

Stop:完全停止播放,清空当前视频资源。

Seek:跳转到指定时间点,比如从 0 分跳到 10 分钟。

4.2 渲染控制服务(RenderingControl)

        专门控制播放输出效果的服务,包括所有调音量、静音操作,部分设备支持亮度、对比度、色彩、声道切换,总而言之,它只管播放出来之后的声音、画面参数等。固定命名空间urn:schemas-upnp-org:service:RenderingControl:1

4.3 内容目录服务(ContentDirectory)

        只属于 DMS 媒体服务器,主要是给 DMC控制器(手机)提供浏览、查看、搜索DMS服务器(电脑 / NAS) 里所有视频文件的能力,可以浏览和搜索服务器上的所有媒体内容(如音乐、视频、照片)及其元数据(如标题、艺术家、时长)。你可以把它理解为服务器的“文件目录”。

常用指令:Browse (浏览目录),Search (搜索媒体)。

固定命名空间:urn:schemas-upnp-org:service:ContentDirectory:1

4.4 连接管理服务(ConnectionManager)

        存在于DMS媒体服务器和DMR媒体播放器(MediaRenderer)上,用来查询设备支持的媒体格式、传输协议,比如电视支不支持 MKV、H.265、MP4,支不支持 HTTP 拉流,是协调和控制播放器与服务器之间媒体流的建立与断开,包括协商双方都支持的传输协议和内容格式,进而管理媒体数据流的连接状态。

常用指令:GetProtocolInfo(查询 DMS、DMR 支持的音视频编码、传输协议)、PrepareForConnection(预建立媒体传输链路)

固定命名空间urn:schemas-upnp-org:service:ConnectionManager:1

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐