概述
SAT>IP
规范是一份通信协议,不是设备规范。在 SAT>IP
规范下存在两种角色:
SAT>IP Server
SAT>IP Client
一个具体的设备可以是其中一个角色,或者两者兼具。
SAT>IP
协议提供了一种标准化的方式,使客户端可以通过网络来访问sat
上的实时流。SAT>IP
协议实现了卫星接收端与播放端分离,卫星接收端被放在远端服务器上,SAT>IP
协议提供控制协议,Clients
可以远程控制,从而扩展了卫星接收端的范围。
SAT>IP
是一种客户端驱动的架构。
客户端向服务器发送请求。服务器执行这些请求和向客户转发直播电视节目。
网络拓扑结构
clients
SAT>IP Clients
通过发送请求完成获取 channel list 和播放指定节目功能,类型:
- 具有网络连接能力的 STB
- NAS
- Smartphones
- PCs
servers
SAT>IP Servers
处理SAT>IP Clients
的请求并将电视直播节目转发给Clients
,类型如下:
- IP Adapters / Multiswitches
- Master STBs
- IP LNBs
- MDU(Multi Dwelling Unit) 多用户居住单元
我们要关心的是Master STBs
,不需要多播,具体技术需求表如下:
Master Stb
网络拓扑结构如下:
协议
SAT>IP
是在已有协议基础上的扩展,主要依赖于以下协议
- UPnP for Addressing, Discovery and Description
- RTSP or HTTP for Control
- RTP or HTTP for Media Transport
协议栈组织形式:
与DLNA
关系:
使用了UPnP/DLNA
架构的子集和协议
- UPnP Device Architecture 1.1
- DLNA Networked Device Interoperability Guidelines
SAT>IP
设备可以扩展为 DLNA
设备,另外客户端可以通用,例如VLC
均通过UPnP
来访问
协议分为以下阶段:
- 寻址
- 设备发现
- 设备描述
- 控制
- 流传输
寻址
- DHCP
- Auto-IP
STB
已支持DHCP
,这部分不讨论
设备发现
使用SSDP(Simple Service Discover Protocol)
简单服务发现协议,这个协议是 UPnP
的核心,在 UPnP
中定义了一组协议框架,其中有控制点,根设备等概念,UPnP
设备通过 SSDP
协议与根设备(用户设备)进行交互。SSDP
是应用层协议,使用 HTTPU
和 HTTPMU
规范,基于 UDP
端口进行通信。
每个设备会有一个特定的设备类型,SAT>IP
为urn:ses-com:device:SatIPServer:1
UUID
格式为4B-2B-2B-2B-6B
,示例2fac1234-31f8-11b4-a222-08002b34c003
通过以下两种方式进行设备发现:
- Server 发送通知给其他的 Servers 和 Clients
- Clients 搜索可用的 Servers
server 通告
SAT>IP Server
入网之后,会向多播地址 239.255.255.250:1900 发送三次不同的NOTIFY ssdp:alive
消息,SAT>IP Server
离网时需要发送NOTIFY ssdp:byebye
,消息格式如下:
NT
三种:
- the root device
- its device uuid
- the urn
还需要注意LOCATION
、DEVICEID.SES.COM
,前者是描述文件路径,后者是DeviceID
,具体作用后续章节介绍
Example Announcement of a SAT>IP server joining the network:
NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
CACHE-CONTROL: max-age=1800
LOCATION: http://192.168.178.21/desc.xml
NT: upnp:rootdevice
NTS: ssdp:alive
SERVER: Linux/1.0 UPnP/1.1 IDL4K/1.0
USN: uuid:50c958a8-e839-4b96-b7ae-8f9d989e136c::upnp:rootdevice
BOOTID.UPNP.ORG: 2318
CONFIGID.UPNP.ORG: 0
DEVICEID.SES.COM: 1
NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
CACHE-CONTROL: max-age=1800
LOCATION: http://192.168.178.21/desc.xml
NT: uuid:50c958a8-e839-4b96-b7ae-8f9d989e136c
NTS: ssdp:alive
SERVER: Linux/1.0 UPnP/1.1 IDL4K/1.0
USN: uuid:50c958a8-e839-4b96-b7ae-8f9d989e136c
BOOTID.UPNP.ORG: 2318
CONFIGID.UPNP.ORG: 0
DEVICEID.SES.COM: 1
NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
CACHE-CONTROL: max-age=1800
LOCATION: http://192.168.178.21/desc.xml
NT: urn:ses-com:device:SatIPServer:1
NTS: ssdp:alive
SERVER: Linux/1.0 UPnP/1.1 IDL4K/1.0
USN: uuid:50c958a8-e839-4b96-b7ae-8f9d989e136c::urn:ses-com:device:SatIPServer:1
BOOTID.UPNP.ORG: 2318
CONFIGID.UPNP.ORG: 0
DEVICEID.SES.COM: 1
DEVICE ID 协商
DEVICE ID
是SAT>IP Server
入网时声明的唯一不冲突的ID
,这个值存储于非易失区域。协商流程如下:
- 设备冷启动之后,从
non-volatile memory
读出DEVICE ID
值,然后作为announcement NOTIFY messages ssdp:alive
参数多播发送 - 其他在网的
servers
会监听这些公告,如果DEVICE ID
不存在冲突,不做任何反应;如果存在冲突,需要在1s
以内,发送单播M-SEARCH message ssdp:disvocer
到冲突的server
- 入网
server
发送200 ok
来确认,注意EXT
字段 - 入网
server
发送ssdp:byebye
,可选项 - 入网
server
生成新的DEVICE ID
,一般是+1
,然后发送announcement NOTIFY messages ssdp:alive
5s
超时时间内未收到ssdp:discover
表示没有冲突,使用新的DEVICE ID
作为新的并存储
流程图:
Client Search Requests
client
多播M-SEARCH ssdp:discover
来发现在网servers
,由于udp
的不可靠性,建议发送三次,间隔100ms
,格式如下:
Requests>
M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
ST: urn:ses-com:device:SatIPServer:1
MAN: "ssdp:discover"
MX: 2
respond>
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=1800
DATE: Sat Jan 1 00:01:50 2000
EXT:
LOCATION: http://192.168.178.21/desc.xml
SERVER: Linux/1.0 UPnP/1.1 IDL4K/1.0
ST: urn:ses-com:device:SatIPServer:1
USN: uuid:50c958a8-e839-4b96-b7ae-8f9d989e136c::urn:ses-com:device:SatIPServer:1
BOOTID.UPNP.ORG: 2399
CONFIGID.UPNP.ORG: 0
Description
通过xml
文件向网络上其他UPnP Control Points
提供更多信息,这个文件的路径是在Discovery
阶段获取的LOCATION
字段,示例如下:
<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0" configId="0">
<specVersion>
<major>1</major>
<minor>1</minor>
</specVersion>
<device>
<deviceType>urn:ses-com:device:SatIPServer:1</deviceType>
<friendlyName>SATIPBOX</friendlyName>
<manufacturer>Manufacturer</manufacturer>
<manufacturerURL>http://www.manufacturer.com</manufacturerURL>
<modelDescription>SATIPBOX 500 4.0</modelDescription>
<modelName>SATIPBOX</modelName>
<modelNumber>1.0</modelNumber>
<modelURL>http://www.manufacturer.com/satipbox</modelURL>
<serialNumber>1S81A31231000007</serialNumber>
<UDN>uuid:50c958a8-e839-4b96-b7ae-8f9d989e136c</UDN>
<iconList>
<icon>
<mimetype>image/png</mimetype>
<width>48</width>
<height>48</height>
<depth>24</depth>
<url>/icons/sm.png</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>120</width>
<height>120</height>
<depth>24</depth>
<url>/icons/lr.png</url>
</icon>
<icon>
<mimetype>image/jpeg</mimetype>
<width>48</width>
<height>48</height>
<depth>24</depth>
<url>/icons/sm.jpg</url>
</icon>
<icon>
<mimetype>image/jpeg</mimetype>
<width>120</width>
<height>120</height>
<depth>24</depth>
<url>/icons/lr.jpg</url>
</icon>
</iconList>
<presentationURL>/index.htm</presentationURL>
<satip:X_SATIPCAP xmlns:satip="urn:ses-com:satip">DVBS2-8,DVBT-4</satip:X_SATIPCAP>
<satip:X_SATIPM3U xmlns:satip="urn:ses-com:satip">/channellist.m3u</satip:X_SATIPM3U>
</device>
</root>
关注点:
config=
必须与discovery
阶段的CONFIGID.UPNP.ORG
相同- 提供两张 JPEG 和两张 PNG 图标,小的尺寸为
48×48
,大的为120×120
<satip:X_SATIPCAP>
用来描述支持的前端类型及数量,放在<device>
元素的尾部SA>IP server
提供channel list
Control
涉及如下协议
RTSP
RTCP
RTP
HTTP
IGMP
HTTP
和IGMP
暂不考虑
RTSP
SAT>IP Servers
和SAT>IP Clients
应该支持如下RTSP
方法:
RTSP
状态机如下:
Uniform Resource Identifier URI
Query Syntax
格式<attribute1>=<value1>&<attribute2>=<value2>&<attribute3>=<value3>...
Example
rtsp://192.168.128.1/?src=1&freq=12402&pol=v&ro=0.35&msys=dvbs&mtype=qpsk&plts=off&sr=27500&fec=34&pids=0,16,50,104,166,1707
rtsp://192.168.128.1/stream=0?freq=12402&pol=v&ro=0.35&msys=dvbs&mtype=qpsk&plts=off&sr=27500&fec=34&pids=0,16,50,104,166,1707
rtsp://192.168.128.1/stream=1?addpids=17,51&delpids=166,1707
rtsp://192.168.128.5/?src=1&fe=1&freq=12720&pol=v&msys=dvbs2&mtype=8psk&ro=0.35&plts=on&sr=30000&fec=910&pids=0,16,50,104,166,1707
Example RTSP Sequence Diagram
TODO:
RTCP Announcements
当以RTP
传输实时流时会伴随发送RTCP
通知流,包含了关于流的实时信息,例如信号质量、信号强度、锁定状态。当前端失锁时需要发送空包。更新频率 5/s
格式如下:
其中string
格式如下:
Example:
ver=1.0;src=1;tuner=1,240,1,7,12402,v,dvbs,,,,27500,34;pids=0,16,56,112,168,1709
Media Transport
SAT>IP
使用RTP
来传输实时流,一般 MTU 长度为 1500bytes,一个 IP 包可以携带 7 个 ts 数据包,RTP
编码如下: