0%

SAT>IP 协议笔记

针对文档 satip_specification_version_1_2_2 笔记

Introduction

SAT>IP 规范是一份通信协议,不是设备规范。在 SAT>IP 规范下存在两种角色

  • SAT>IP Server
  • SAT>IP Client

一个具体的设备可以是其中一个角色,或者两者兼具。

SAT>IP 协议提供了一种标准化的方式,使客户端可以通过网络来访问 sat 上的实时流

SAT>IP 协议实现了卫星接收端与播放端分离,卫星接收端被放在远端服务器上, SAT>IP 协议提供控制协议,Clients 可以远程控制

从而扩展了卫星接收端的范围

SAT>IP 是一种客户端驱动的架构。客户端向服务器发送请求。服务器执行这些请求和向客户转发直播电视节目。

SAT>IP Clients

SAT>IP Clients 通过发送请求完成获取 channel list 和播放指定节目功能

  • 具有网络连接能力的 STB
  • NAS
  • Smartphones
  • PCs
  • etc.

SAT>IP Servers

SAT>IP Servers 处理 SAT>IP Clients 的请求并将电视直播节目转发给 SAT>IP Clients

从简单到复杂

  • IP Adapters / Multiswitches
  • Master STBs
  • IP LNBs
  • MDU(Multi Dwelling Unit) 多用户居住单元

网络拓扑结构

SAT>IP Servers 能力来完成对 Clients 的支持

可以是单卫星 - 单 Tuner/ 多卫星 - 多 Tuner

即可以是单个家庭场景中工作,也可以是宾馆等大型社区场景下工作

使用场景

描述几种常用的场景

IP Adapter / IP Multiswitch

将卫星信号转换为 IP 数据,同时可以按照 SAT>IP 协议处理 Client 发送的控制命令

一般会有多个卫星信号输入用来为多客户端提供并发支持

例如:Johansson SAT>IP Multiswitch 9830

支持 4 路卫星信号输入,支持 2×8 信号输出,通过网口,支持 8 路独立收看电视节目

内部集成 multiswitch/disqec 等控制

IP LNB

Triax SAT>IP LNB unit

Common features:

  • 8 x Full Band H/V DVB-S/S2 tuners
  • Unlimited number of transponders from position
  • Supports 8 x SAT>IP clients (one each tuner)
  • SAT>IP via Gigabit Ethernet RJ45 connector output
  • Up to 900 Mbps transport stream bandwidth
  • Separate H and V Full Band SAT-IF outputs
  • Powered via 802.3@rev 2012 PoE type 1, class 2
  • No DiSEqC, 22kHz or FSK required or supported
  • Transparently supports FTA as well as CAS services
  • Die-cast housing
  • Power consumption <7.5W

新的 LNA 设备,使用 POE 供电,可以支持作为 SAT>IP Server 输出 IP 数据

Master STBs

通过在传统 STB 上开发 SAT>IP Server 完成扩展,主要讨论的内容

SMATV(Satellite Master Antenna Television) / MDU(Multi-Dwelling Units)

是指电视程序到安装在一个公寓大楼,宾馆或其它中心位置的卫星共享天线的传输,在那里它为电视观众私人组服务。

组网

协议规范

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 来访问

阶段

  • Addressing
  • Discovery
  • Description
  • Control
  • Media Transport

Addressing

先决条件,一切通信的基础,按照 UPnP 规范提供两个选项

  • DHCP
  • Auto-IP

Discovery

  • Server 发送通知给其他的 Servers 和 Clients
  • Clients 搜索可用的 Servers

SSDP 全称是 Simple Service Discover Protocol 简单服务发现协议,这个协议是 UPnP 的核心,在 UPnP 中定义了一组协议框架,其中有控制点,根设备等概念, UPnP 设备通过 SSDP 协议与根设备(用户设备)进行交互。
SSDP 是应用层协议,使用 HTTPUHTTPMU 规范,基于 UDP 端口进行通信。

  • SAT>IP server is a UPnP Device and a UPnP Control Point
  • SAT>IP client is a UPnP Control Point

Unique Resource Name (URN) in UPnP:

urn:ses-com:device:SatIPServer:1

UUID

4B-2B-2B-2B-6B
Example of a UUID string:
“2fac1234-31f8-11b4-a222-08002b34c003”

Server Advertisements 服务器通知

SSDP 使用一个固定的组播地址 239.255.255.250 和 UDP 端口号 1900 来监听其他设备的请求。

根据 UPnPUPnP root devices 的要求, SAT>IP servers 入网时会对 SSDP 地址 239.255.255.250:1900 多播三个不同的 NOTIFY ssdp:alive 消息

  12     strcpy(nt[0], "::upnp:rootdevice");
  11     sprintf(nt[1], "::uuid:%s", uuid);
  10     strcpy(nt[2], "::urn:ses-com:device:SatIPServer:1");
   9
   8     if (s->type != TYPE_UDP)
   7         return 0;
   6
   5     LOGM("ssdp_discovery: bootid: %d deviceid: %d http: %s", opts.bootid,
   4          opts.device_id, opts.http_host);
   3
   2     for (i = 0; i < 3; i++)
   1     {
1494         sprintf(buf, reply, opts.disc_host, opts.http_host, opts.xml_path,
   1                 nt[i] + 2, app_name, version, uuid, i == 1 ? "" : nt[i],
   2                 opts.bootid, opts.device_id);
   3         salen = sizeof(ssdp_sa);
   4         LOGM("Discovery packet %d:\n%s", i + 1, buf);
   5         int wb = sendto(s->sock, buf, strlen(buf), MSG_NOSIGNAL, (const struct sockaddr *)&ssdp_sa, salen);
   6         if (wb != strlen(buf))
   7             LOG("incomplete ssdp_discovery: wrote %d out of %d: error %d: %s", wb, strlen(buf), errno, strerror(errno));
   8     }
NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
CACHE-CONTROL: max-age=1800
LOCATION: http://<SatIPServer_IP_Address>/<description>.xml
NT: <notification type>
NTS: ssdp:alive
SERVER: OS/version UPnP/1.1 product/version
USN: <unique service name>
BOOTID.UPNP.ORG: <bootID>
CONFIGID.UPNP.ORG: <configID>
SEARCHPORT.UPNP.ORG: <searchPort>
DEVICEID.SES.COM: <DEVICEID>
<CRLF>
  • NTSssdp:alivessdp:byebye
  • NT 三种,the root device, its device uuid and the urn

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

SAT>IP server 离开网络时需要发送 ssdp:byebye,不包含 CACHE-CONTROL, LOCATION, SERVER and DEVICEID.SES.COM 字段

NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
NT: upnp:rootdevice
NTS: ssdp:byebye
USN: uuid:5a0c857b-add1-42d0-8673-b5ca60df4a63::upnp:rootdevice
BOOTID.UPNP.ORG: 2
CONFIGID.UPNP.ORG: 0

NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
NT: uuid:5a0c857b-add1-42d0-8673-b5ca60df4a63
NTS: ssdp:byebye
USN: uuid:5a0c857b-add1-42d0-8673-b5ca60df4a63
BOOTID.UPNP.ORG: 2
CONFIGID.UPNP.ORG: 0

NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
NT: urn:ses-com:device:SatIPServer:1
NTS: ssdp:byebye
USN: uuid:5a0c857b-add1-42d0-8673-b5ca60df4a63::urn:ses-com:device:SatIPServer:1
BOOTID.UPNP.ORG: 2
CONFIGID.UPNP.ORG: 0

DEVICE ID Negotiation 设备 ID 协商

每个在网的 SAT>IP Server 都有一个唯一不冲突的 DEVICE 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 作为新的并存储

流程如下:

multicast 地址???

239. <DEVICEID> . <0-254> . <0-254>

如果一个 SAT>IP server DEVICEID=3,那么地址为 239.3.x.x

Client Search Requests

client 多播 M-SEARCH ssdp:discover 来发现在网 servers,由于 udp 的不可靠性,建议发送三次,间隔 100ms

Example Search Request of a SAT>IP Client and Server Response:

#In order to discover servers on the network a client sends a multicast M-SEARCH ssdp:discover message to 239.255.255.250 Port 1900

M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
ST: urn:ses-com:device:SatIPServer:1
MAN: "ssdp:discover"
MX: 2

#Servers respond in unicast UDP to IP address and port where request came from

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="configuration number">
<specVersion>
<major>1</major>
<minor>1</minor>
</specVersion>
<device>
<deviceType>urn:ses-com:device:SatIPServer:1</deviceType>
<friendlyName>short user-friendly title</friendlyName>
<manufacturer>manufacturer name</manufacturer>
<manufacturerURL>URL to manufacturer site</manufacturerURL>
<modelDescription>long user-friendly title</modelDescription>
<modelName>model name</modelName>
<modelNumber>model number</modelNumber>
<modelURL>URL to model site</modelURL>
<serialNumber>manufacturer's serial number</serialNumber>
<UDN>uuid:UUID</UDN>
<UPC>Universal Product Code</UPC>
<iconList>
<icon>
<mimetype>image/format</mimetype>
<width>horizontal pixels</width>
<height>vertical pixels</height>
<depth>color depth</depth>
<url>URL to icon</url>
</icon>
</iconList>
<presentationURL>URL for presentation</presentationURL>
</device>
</root>

configid= 值必须与 discovery 阶段的 CONFIGID.UPNP.ORG 相同

必须提供两张 JPEG 和两张 PNG 图标,小的尺寸为 48×48,大的为 120×120

<satip:X_SATIPCAP> 用来描述支持的前端类型及数量,放在 <device> 元素的尾部

<satip:X_SATIPCAP xmlns:satip="urn:ses-com:satip">DVBS2-8,DVBT-4</satip:X_SATIPCAP>

SA>IP server 提供 channel list

<satip:X_SATIPM3U xmlns:satip="urn:ses-com:satip">/channellist.m3u</satip:X_SATIPM3U>
<satip:X_SATIPM3U xmlns:satip="urn:ses-com:satip">http://www.example.com/channellist.m3u</satip:X_SATIPM3U>
<?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>

Control

control 使用协议 RTSPHTTP

  • RTP(Real Time Transport Protocol)
  • RTCP(Real Time Contorl Protocol)
  • RTSP(Real Time Streaming Protocol)

RTSP

HTTP 与 RTSP 相比,HTTP 请求由客户机发出,服务器作出响应;使用 RTSP 时,客户机和服务器都可以发出请求,即 RTSP 可以是双向的。

RTSP 是一个基于文本的协议,它与 HTTP 十分相似。在 RTSP 中,保留了几乎所有的 HTTP 符号以及相关定义。所以,RTSP 十分利于扩展,并且容易使用程序进行解析。

RTSP 虽然可以用来获取实时流,但是协议中并没有定义传输实时流的方式。它通过与其它的传输机制配合,例如 RTP,进行实时流传输。在 RTSP 中,我们可以在 SETUP 方法中设置一些参数,以选择是用 TCP 还是用 UDP 作为 RTP 的底层传输协议。

RTSP 通过以会话 (Session) 的方式描述一个连接的生命周期。会话 (Session) 通过 RTSP 客户端使用 RTSP 的 SETUP 方法建立,然后 RTSP 客户端可以通过 PLAY、PAUSE、RECORD 等方法 (Method) 来控制实时流的播放、暂停以及回放等。当不再需要实时流的时候,RTSP 客户端通过 TEARDOWN 方法 (Method) 来结束这个会话 (Session)。

  1. RTSP 协议
  2. RTSP 简介以及常用方法使用实例

SAT>IP Clients 使用 RTSP TCPSAT>IP Servers 建立 RTSP sessions (RTSP 会话),以 RTSP SETUP 起始,以 RTSP TEARDOWN 结束, session numberserver 分配唯一标识

SAT>IP 使用标准 RTSP 端口号 554

RTSPTCP 关系

RTSP 会话通常跨越多个 TCP 连接(例如,每个 TCP 连接一个请求 - 响应)。但是,RTSP 会话也可以由单个 TCP 连接组成(持久模式)包括几个 RTSP 请求 - 响应对。

如图所示:

以下两种情况需要关闭 TCP connection

  1. 通过连接管理的所有 RTSP 会话都已超时
  2. 响应上一次 RTSP 会话的会话级 TEARDOWN 请求后 10 秒

SETUP

SAT>IP 发送 RTSP SETUP 请求来建立新的会话,包括如下内容

  • RTSP URI 查询字符串 TS 流参数,位于第一行
  • RTSP SETUP 头中携带 TS 传输参数(unicast/multicast, ports, etc.)

如果会话建立成功,返回 200 OK 消息,内容如下

  • RTSP session number
  • 实际的 TS 传输参数,例如 IP 目标地址和端口
  • 唯一标识 TS 媒体流的 streamID

服务器和客户端之间的每个 RTSP 会话由随机生成的会话号 session number 标识。

streamID 唯一标识 TS 媒体流对象,客户端使用 streamID 来引用在 SETUP 设置的 TS 流

新建会话并定义媒体流参数的客户端是这个流的所有者

The client which sets up the session and defines the parameters of the media stream is the owner of the stream.

Unicast Transport Delivery Example:

Request  SETUP rtsp://192.168.128.5/?src=1&fe=1&freq=12402&pol=v&msys=dvbs&sr=27500&fec=34&pids=0,16,
         50,104,166,1707 RTSP/1.0
         CSeq: 1
         Transport: RTP/AVP;unicast;client_port=1400-1401
         <CRLF>

Response RTSP/1.0 200 OK
         CSeq: 1
         Session: 12345678;timeout=60
         Transport: RTP/AVP;unicast;client_port=1400-1401
         com.ses.streamID: 1
         <CRLF>
  • Cseq 每个 request - response 必须一致
  • Session 包括 session idtime out
  • com.ses.streamIDstreamID
  • Transport 指示使用的传输协议及参数
RTP/AVP;unicast;client_port=<client RTP port>-<client RTCP port>
RTP/AVP;multicast;destination=<IP multicast address>;port=<RTP port>-<RTCP port>;ttl=<ttl>
RTP/AVP;multicast
RTP/AVP;multicast;ttl=<ttl>
RTP/AVP;multicast;port=<RTP port>-<RTCP port>
RTP/AVP;multicast;port=<RTP port>-<RTCP port>;ttl=<ttl>
RTP/AVP;multicast;destination=<IP multicast address>
RTP/AVP;multicast;destination=<IP multicast address>;ttl=<ttl>
RTP/AVP;multicast;destination=<IP multicast address>;port=<RTP port>-<RTCP port>
RTP/AVP;multicast;destination=<IP multicast address>;port=<RTP port>-<RTCP port>;ttl=<ttl>
  • RTP/AVP,表示流传输格式。在 SAT>IP 中仅支持 RTP/AVP
  • unicast | multicast,单播 / 多播
  • destination,多播下的选项,指示 TS 发送目标地址
  • client_port,单播选项,指示 RTP/RTCP 端口
  • port,多播选项,指示 RTP/RTCP 端口
  • ttl,多播选项,指示 time-to-live

注意事项:

  1. RTP 端口为偶数,而 RTCP+1 的奇数
  2. 单播和多播端口不一样
For unicast:
client_port= <client RTP port> - <client RTCP port>
server_port= <server RTP port> - <server RTCP port>

For multicast:
port= <RTP port> - <RTCP port>

Joining an existing stream without becoming stream owner??

SETUP rtsp://192.168.178.57:554/?src=1&fe=1&freq=10744&pol=h&ro=0.35&msys=dvbs&mtype=qpsk&plts=off&sr=22000&fec=56&pids=0,400,401,402 RTSP/1.0
CSeq:1
Transport: RTP/AVP;multicast
Connection:close

RTSP/1.0 200 OK
Session:21dbf7c5873c9ff;timeout=30
com.ses.streamID:8
Transport:RTP/AVP;multicast;destination=239.0.0.3;port=1500-1501;ttl=2
CSeq:1
SETUP rtsp://192.168.178.57:554/?src=1&fe=1&freq=10744&pol=h&ro=0.35&msys=dvbs&mtype=qpsk&plts=off&sr=22000&fec=56&pids=0,400,401,402 RTSP/1.0
CSeq:1
Transport: RTP/AVP;multicast
Connection:close

RTSP/1.0 200 OK
Session:222626d35aa05f4;timeout=30
com.ses.streamID:17
Transport:RTP/AVP;multicast;destination=239.0.0.8;port=1500-1501;ttl=2
CSeq:1

Example RTSP SETUP messages

PLAY

  • 单播,使用 streamID 发送 RTSP PLAY
  • 多播,两个选择,其一与单播相同;另外一个是向组播组 multicast group 发送 IGMPv3 membership report

发送 PLAY 消息后开始传输 RTP/RTCP 数据

  • 如果前端设置正确,TS 流正确传输
  • 如果前端不正确,丢失信号或者 PID 设置不正确,每 100ms 发送一个 RTP 空包

PLAY 消息常用来切换节目

SAT>IP server 输出取决于服务器状态和多媒体流拥有者状态

The SAT>IP server output depends on the server state (resulting from the sequence of RTSP and/or IGMP methods invoked by a client) and the state of the media stream owner.

Server Stream Output State Machine

OPTIONS

RTSP 会话建立之后需要发送 OPTIONS 来维持会话,服务器也需要依靠 OPTIONS 来确认那些 clients 存在

Examples

Request>
OPTIONS rtsp://192.168.178.57:554/ RTSP/1.0
CSeq:5
Session:2180f601c42957d
Connection:close

Response>
RTSP/1.0 200 OK
Public:OPTIONS,SETUP,PLAY,TEARDOWN,DESCRIBE
CSeq:5
Session:2180f601c42957d

修改媒体流

TS 流只能由它的拥有者修改,通常调用 RTSP PLAY 来修改。

某些情况下需要修改 Transport 参数,这时需要使用 in-session SETUP

Request>
PLAY rtsp://192.168.178.57:554/stream=5?src=1&fe=1&freq=12603&pol=h&ro=0.35&msys=dvbs&mtype=qpsk&plts=off&sr=22000
&fec=56&pids=0,1290,2290,6290,7290 RTSP/1.0
CSeq:8
Session:21a15c02c1ee244
Connection:close

Response>
RTSP/1.0 200 OK
RTP-Info:url=rtsp://192.168.178.57/stream=5;seq=22857
CSeq:8
Session:21a15c02c1ee244

加入一个存在的流

clients 可以加入一个其他 client 拥有的 ts 流

  • 使用指定 streamID 调用 SETUPPLAY 来建立新会话
  • 发送 IGMPv3 membership report

使用多播 / 单播取决于 owner 初始化选择的 transport 类型

Request>
SETUP rtsp://192.168.128.192:554/stream=27 RTSP/1.0
CSeq:1
Transport: RTP/AVP;unicast;client_port=42494-42495
Connection:close

Response>
RTSP/1.0 200 OK
Session:43ae7c353e77bc;timeout=60
com.ses.streamID:27
Transport:RTP/AVP;unicast;destination=192.168.128.100;client_port=42494-42495
CSeq:1

DESCRIBE

RTSP DESCRIBE 为了获取 SDP (Session Description Protocol)

会话描述信息,提供 server 上多媒体描述,必须有至少一个 session 已经建立,否则返回 404 错误

Request>
DESCRIBE rtsp://192.168.128.5/
CSeq: 5
Accept: application/sdp
<CRLF>

Response>
RTSP/1.0 200 OK
CSeq: 5
Content-Type: application/sdp
Content-Base: rtsp://192.168.128.5/
Content-Length: 724
<CRLF>
v=0
o=- 5678901234 7890123456 IN IP4 192.168.128.5
s=SatIPServer:1 4
t=0 0
m=video 5004 RTP/AVP 33
c=IN IP4 239.0.0.8/5
a=control:stream=0
a=fmtp:33 ver=1.0;src=1;tuner=1,240,1,7,12402,v,dvbs,,,,27500,34;pids=0,16,56,112,168,1709
a=inactive
m=video 5006 RTP/AVP 33
c=IN IP4 239.0.0.9/5
a=control:stream=1
a=fmtp:33 ver=1.0;src=1;tuner=1,240,1,7,12402,v,dvbs,,,,27500,34;pids=0,16,50,104,166,1707
a=sendonly
m=video 0 RTP/AVP 33
c=IN IP4 0.0.0.0
a=control:stream=2
a=fmtp:33 ver=1.0;src=1;tuner=1,240,1,7,12402,v,dvbs,,,,27500,34;pids=all
a=sendonly
m=video 5010 RTP/AVP 33
c=IN IP4 239.0.0.11/5
a=control:stream=3
a=fmtp:33 ver=1.0;src=2;tuner=2,221,1,6,11758,h,dvbs2,8psk,off,25,27500,56;pids=all
a=sendonly
  • v = (协议版本)
  • o = (所有者 / 创建者和会话标识符) IN for internet and the IP address of the server.
  • s = (会话名称)SatIPServer:1
  • i = * (会话信息)
  • u = * (URI 描述)
  • e = * (Email 地址)
  • p = * (电话号码)
  • c = * (连接信息)多播地址 /TTL 单播设置为 0.0.0.0
  • b = * (带宽信息)
  • z = * (时间区域调整)
  • k = * (加密密钥)
  • a = * (0 个或多个会话属性行)control:stream=
  • t = (会话活动时间)
  • r = * (0 或多次重复次数)
  • m = (媒体名称和传输地址)the media type, port, protocol 33: SAT>IP 类型
  • i = * (媒体标题)
  • c = * (连接信息 — 如果包含在会话层则该字段可选)
  • b = * (带宽信息)
  • k = * (加密密钥)
  • a = * (0 个或多个媒体属性行)
Session Level:
s=SatIPServer:1 <frontends>

Media level:
a=control:stream=<streamID>
a=fmtp:33 ver=<major>.<minor>;src=<srcID>;tuner=<feID>,<level>,<lock>,<quality>,<frequency>,<pol
arisation>,<system>,<type>,<pilots>,<roll_off>,<symbol_rate>,<fec_inner>;pids=<pid0>,...,<pidn>

TEARDOWN

关闭会话

Request>
TEARDOWN rtsp://192.168.178.57:554/stream=2 RTSP/1.0
CSeq:5
Session:2166e663b4be550
Connection: close

Response>
RTSP/1.0 200 OK
Content-Length:0
CSeq:5
Session:2166e663b4be550

汇总

RTSP 状态机

Uniform Resource Identifier URI

信号选择

RTSP 序列图

RTCP Announcements

RTP 传送的多媒体流都伴随着 RTCP 通知流,携带关于该特定 TS 媒体流的 SAT>IP 配置的信息以及实时信息。

实时信息包括以下信息,更新速度 5/s。当信号不可用是需要发送空包

  • 信号锁定
  • 信号强度
  • 信号质量

负载格式如下

ver=<major>.<minor>;src=<srcID>;tuner=<feID>,<level>,<lock>,<quality>,<frequency>,<polarisation>,
<system>,<type>,<pilots>,<roll_off>,<symbol_rate>,<fec_inner>;pids=<pid0>,...,<pidn>

ver=1.0;src=1;tuner=1,240,1,7,12402,v,dvbs,,,,27500,34;pids=0,16,56,112,168,1709

Media Transport

RTP

RTP 一个包可以封装 7 个 TS

HTTP

Dynamic vs Static Server Operation

Dynamic

Static

Client 指南

包括 RTSP ClientIGMP Client

Client Setup and Configuration Settings

  1. SAT>IP clients 自动检测 SAT>IP servers
    1. 监听 SSDP NOTIFY
    2. 发送 SSDP M-SEARCH
  2. 自动绑定 SAT>IP servers
  3. 手动绑定到指定 SAT>IP servers
  4. 手动配置 SAT>IP servers 地址
  5. 指定前端
  6. 配置天线

Service Discovery

SAT>IP 规范不要求特定的服务发现机制,有两种

  1. Standard DVB Service Discovery,解析标准 DVB PSI/SI 表,解析慢,建议预置 service list
  2. Discovery based on Service Lists

第二种方式称为 thin clients,离线或在线服务器获取某一颗或几颗卫星的 services

客户端中应该添加选项以指定 m3u list 位置

http://sat-ip_server/channel_file.m3u

切换节目

channel list 获取参照 vlc 代码 upnp.cpp:int MediaServerList::Callback( Upnp_EventType event_type, UpnpEventPtr p_event )

M3U playlist format (Unicast Streams)

#EXTM3U
#EXTINF:0,13. BBC World
rtsp://192.168.1.202/?src=1&freq=11597&pol=v&msys=dvbs&mtype=qpsk&sr=22000&fec=56&pids=0,16,17,92,163,1858
#EXTINF:0,14. Sky News
rtsp://192.168.1.202/?src=1&freq=12604&pol=h&msys=dvbs&mtype=qpsk&sr=22000&fec=56&pids=0,1290,2290,7290,6290,5290
#EXTINF:0,15. France24
rtsp://192.168.1.202/stream=18

M3U playlist format (Multicast Streams)

#EXTM3U
#EXTINF:0,1. TF1
rtp://232.0.1.17:8200
#EXTINF:0,2. France 2
rtp://232.0.1.1:8200
#EXTINF:0,3. France 3
rtp://232.0.1.2:8200

STB 作为 simpler SAT>IP Servers

省略 IGMPHTTP