传输协议
UDP
UDP为用户数据报协议(User Datagram Protocol),其为一种较不可靠的无连接式传输层协议。无连接式表示传送者并不知道接收对象,因在传送数据前并未事先通知,故其送出资料前并不知道接收者为何人。
UDP协议就像在邮局寄出一封贴着标准邮票的信,您并不会在它送达时收到通知,您只能期待信件能顺利送达。
TCP
TCP代表传输控制协议(Transmission Control Protocol),是一个基于可靠连接的传输层协议。既然TCP是基于连接的协议,传送者完全知道信息接收者的状态。在任何数据传送前,传送者及接收者需先建立联机并事先通知。
TCP就像是采用挂号附回执联寄信,信件送寄达时,您会收到通知;如果没收到通知,您可以再传送一次。
传输类型
单播(Unicast)
单播(Unicast) 是一种在客户端及服务器端之间的一对一传输,在大多数情况下,服务器端为影像编码器。单播利用IP传输方式,例如传输控制协议(TCP)及用户数据报通讯协议(UDP)。客户端和服务器端有着直接关系,每个连接至服务器的单播用户都需占用额外带宽。例如,如果你有十个客户端,每个都在播放100Kbps带宽的串流,这些客户端组成的用户群将占用高达1000Kbps带宽。如果您只有一位客户端在播放100Kbps串流,则仅会使用到100Kbps带宽。
群播(Multicast)
群播为真正的广播,其在客户端及服务器端间并无直接的关系。这就像是调到收音机上的电台,每个收听群播的客户端并不会对服务器造成额外的带宽占用。实际上,服务器仅传送一路串流,不论是一个或一千个用户端正在收听,服务器所承受的负载都是一样的。
群播是利用网络交换机或路由器接收来自编码器的单路串流信息,然后将其转发给所有客户端。
注:一般而言,在因特网上进行群播是不实用的,因为只有少部份的因特网支持群播。
即使是在局域网络,操作群播时您也必须留心,因为无法正确处理群播的路由器及交换机会将其视为广播消息。这意味着如果您的编码器连接一台未设定的以太网络交换机,并送出一组群播信息,群播将会把这组信息广播至所有端口,而整个网络将会被您的串流信息淹没。如这个网络是该串流所专用的,那就没有什么问题。然而,如果此网络是用于其它用途,就会产生效能上的问题。
针对这个问题的解决方法是使用兼容IGMP的交换机,这些交换机将会在其接口连接到指定群播群组的设备时,才发送群播流量。换句话说,交换机仅会将串流信号转发至接收您的群播串流的设备的端口上。
广播 (Broadcast)
广播是指从一台计算机传送数据,而数据将转传至所有装置的通讯方式。在广播中,仅有一个传送者且数据仅传送一次。但是广播数据将会传给所有连接的装置。
交换机是用来转送广播的流量,而路由器却会丢失广播的流量。换句话说,路由器并不允许广播从一个局域网络(LAN)跨过路由器,连接另一个网段。一台路由器的主要功能为用来将一个大的广播域划分为多个小广播域。
其它的常用术语
封包丢失 (Packet loss)
封包丢失发生于当一个或多个封包在计算机网络间传输时,数据封包无法到达目的地。一般而言,以太网络(Ethernet)丢失封包是不存在的;对Wi-Fi来说,如果讯号强度够好,封包丢失的程度是一般的。在因特网上,封包丢失很大原因取决于网络营运商的路径,但在较差的网络联机状态下,封包丢失会更严重。
缓冲 (Buffer)
缓冲或快取是在播放开始之前,储存于内存内的影片量。大量的缓冲会导致更多延迟,但当抖动或封包丢失状况出现时,能够给予更佳的播放稳定度。
抖动 (Jitter)
抖动是由于封包抵达的时间差而造成,通常发生于网络拥塞、时序漂移或路线变更。抖动是串流中非常重要的一个因素,因为当网络路径上的延迟不断变化时,可能会造成封包延迟抵达,此时编码器必须要有够大的缓冲才能在等待延迟的封包时,还能继续播放影片。
串流协议
以下将介绍常用的串流协议,了解它们如何运作以及适用情境。
RTP/RTSP
RTP及RTSP是二种完全不同的协议,一般来说会一起使用。即便RTP能单独使用,RTSP却无法在没有RTP的状况下使用,这意味着当你见到RTSP这个词时,它所代表的永远是RTP/RTSP。
RTP代表实时传输协议(Real-Time Transport Protocol),通常用来传送实际的媒体串流,在大多数状况下,H264或MPEG4影像封装于RTP。RTSP为实时串流协议(Real-Time Streaming Protocol)的缩写,是用来建立并控制媒体串流。
RTP/RTSP实际应用中代表什么?
RTP本身为一个推流协议。这意味着,如果一台编码器要利用RTP协议传送影片给一台解码器,编码器需要知道这台解码器的IP地址,才能将影像推送至接收端的解码器。
RTP/RTSP是一种拉流的协议,这意味着当解码器利用RTSP协议与编码器连接时,编码器之后会利用RTP协议将影像传送至解码器。多台解码器连接至一台RTSP服务器是可行的,此为多点对单播。
RTP/RTSP属于TCP或UDP?
实际上,二者皆可。通常RTSP是借由TCP运作,而实际的RTP影像串流是借由UDP传送,影像和声音是通过一对UDP端口来传送。通过局域网络进行串流可行,但若通过因特网可能就有问题,因其需要多个端口。此外,当影像和声音分开传送时,我们需依赖RTP标头的时间戳来进行同步。
所以当通过因特网使用RTSP协议时,我们可以将RTP影像及声音串流交错于由RTSP所使用的TCP连接上。每一个都是通过TCP协定的554号端口来运行。
RTP/RTSP适用于何处?
RTSP对于要在局域网络内串流至多个设备是很好用的,因其能将抖动及封包丢失降到最小。RTSP协议适用于几乎所有解码器及软件播放器。
MPEG-2传输串流
因兼容大多数的机顶盒及解码器,MPEG-TS或许是广播产业最常用的串流协议。虽然在封包里的影像格式实际上为H.264 / MPEG 4 Part 10,MPEG-TS通常被称为MPEG 2 传输串流(MPEG 2 Transport Stream)。MPEG TS常做为用来将声音及影像包含在同一串流中的推流协议。
MPEG-2属于TCP或UDP?
一般来说,它是属于UDP类,这意味着,如果封包丢失,在串流中将会出现噪声,因丢失的数据并未被重新传送。然而,高阶的编码器利用一种叫做FEC(Forward Error Correction)前向错误校正的技术来解决这个问题。FEC允许解码器对于丢失的数据进行推测并填补空缺的数据。
一些设备依然通过TCP支持MPEG-TS,即便这并不是一个常用的标准。例如Teradek的设备就支持在TCP上串流MPEG-TS。
RTMP
RTMP为Flash串流媒体,主要用来将影像导入CDN内容传递网络,以传递给在线的大量受众。
RTMP适用于何处?
RTMP在因特网上是可靠的。它的低延迟及低带宽占用特性让RTMP成为所有主要CDN的串流协议(包含Bilibili, 优酷, 爱奇艺等等)标准。它也可以用于一些编码器及解码器的点对点联机(例如Datavideo NVS及NVD系列产品)。
RTMP是属于TCP或UDP?
RTMP属于TCP类。
HTTP实时串流HTTP Live Streaming (HLS)
HTTP实时串流,此协议用于在iOS设备上使用Safari网络浏览器进行影像串流。当HLS以大块的方式下载影像,可以预期会有数秒的延迟,且播放器必须先下载完一块影像然后才会播放。
HTTP实时串流适用于何处?
HLS通常用于iOS装置,且对于延时可容忍但更重视串流稳定性的情况。HLS 也成为大多数CDN 用于在幕后传送影像的标准协议,不过这已超出本文的讨论范围。
HTTP实时串流是属于TCP或UDP?
HTTP实时串流使用HTTP,是属于TCP类。
Zixi
此协定是由Zixi设计,在封包丢失及抖动都很高的极差网络环境下,Zixi提供稳定的影像串流服务(例如越洋传输)。Zixi运用了非常聪明的错误校正机制,即便在大量封包丢失的状况下,依然能维持稳定的影像。
Zixi适用于何处?
在网络联机状态极差,例如MPEG-TS 及RTMP协议都无法顺利串流的情况下,可采用低延迟的影像串流。
Zixi是属于TCP或UDP?
Zixi属于UDP类,但其「前向错误校正」之技术特色,让Zixi可达到近似于TCP协议的稳定度。