针对文档 satip_specification_version_1_2_2 笔记
Introduction
SAT>IP
规范是一份通信协议,不是设备规范。在 SAT>IP
规范下存在两种角色
SAT>IP
ServerSAT>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
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
是应用层协议,使用 HTTPU
和 HTTPMU
规范,基于 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 来监听其他设备的请求。
根据 UPnP
对 UPnP 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>
NTS
为ssdp:alive
或ssdp: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
,这个值存储于非易失区域
协商流程如下:
- 设备冷启动之后,从
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
作为新的并存储
流程如下:
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
使用协议 RTSP
或 HTTP
- 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)。
SAT>IP Clients
使用 RTSP TCP
与 SAT>IP Servers
建立 RTSP sessions
(RTSP 会话),以 RTSP SETUP
起始,以 RTSP TEARDOWN
结束, session number
由 server
分配唯一标识
SAT>IP
使用标准 RTSP
端口号 554
RTSP
与 TCP
关系
RTSP 会话通常跨越多个 TCP 连接(例如,每个 TCP 连接一个请求 - 响应)。但是,RTSP 会话也可以由单个 TCP 连接组成(持久模式)包括几个 RTSP 请求 - 响应对。
如图所示:
以下两种情况需要关闭 TCP connection
- 通过连接管理的所有
RTSP
会话都已超时 - 响应上一次 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 id
和time out
com.ses.streamID
为streamID
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
注意事项:
RTP
端口为偶数,而RTCP
为+1
的奇数- 单播和多播端口不一样
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
调用SETUP
和PLAY
来建立新会话 - 发送
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 Client
和 IGMP Client
Client Setup and Configuration Settings
SAT>IP clients
自动检测SAT>IP servers
- 监听
SSDP NOTIFY
- 发送
SSDP M-SEARCH
- 监听
- 自动绑定
SAT>IP servers
- 手动绑定到指定
SAT>IP servers
- 手动配置
SAT>IP servers
地址 - 指定前端
- 配置天线
Service Discovery
SAT>IP
规范不要求特定的服务发现机制,有两种
- Standard DVB Service Discovery,解析标准 DVB PSI/SI 表,解析慢,建议预置 service list
- 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
省略 IGMP
、 HTTP
等