0%

SAT>IP 协议简介

概述

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 是应用层协议,使用 HTTPUHTTPMU 规范,基于 UDP 端口进行通信。

每个设备会有一个特定的设备类型,SAT>IPurn: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三种:

  1. the root device
  2. its device uuid
  3. the urn

还需要注意LOCATIONDEVICEID.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 IDSAT>IP Server入网时声明的唯一不冲突的ID,这个值存储于非易失区域。协商流程如下:

  1. 设备冷启动之后,从non-volatile memory读出DEVICE ID值,然后作为announcement NOTIFY messages ssdp:alive参数多播发送
  2. 其他在网的servers会监听这些公告,如果DEVICE ID不存在冲突,不做任何反应;如果存在冲突,需要在1s以内,发送单播M-SEARCH message ssdp:disvocer到冲突的server
  3. 入网server发送 200 ok来确认,注意EXT字段
  4. 入网server发送ssdp:byebye,可选项
  5. 入网server生成新的DEVICE ID,一般是+1,然后发送announcement NOTIFY messages ssdp:alive
  6. 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>

关注点:

  1. config=必须与discovery阶段的CONFIGID.UPNP.ORG相同
  2. 提供两张 JPEG 和两张 PNG 图标,小的尺寸为48×48,大的为120×120
  3. <satip:X_SATIPCAP>用来描述支持的前端类型及数量,放在<device>元素的尾部
  4. SA>IP server提供channel list

Control

涉及如下协议

  • RTSP
  • RTCP
  • RTP
  • HTTP
  • IGMP

HTTPIGMP暂不考虑

RTSP

SAT>IP ServersSAT>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编码如下: