随着网络带宽的日益扩大,基于网络的视频流越来越成为很多应用内置的功能。因此,对于视频相关开发的技术需求也越来越多。因此,对于很多程序员来说,掌握一些基础的视频流开发知识,就成为了解决很多问题的关键。但是视频开发相关的知识很多,一些开发人员,尤其是中途转行的技术人员,不知道如何开始,因此,本文就为大家介绍一些视频开发的基础知识,从而让大家少走些弯路。
在国内,视频开发所需要了解的基础知识,总结起来,可以归纳为:一标准五协议二类库。下面我们就分别看看他们都指什么。
一、标准
一标准指得是是国家标准GB/T 28181—2016《公共安全视频监控联网系统信息传输、交换、控制技术要求》,该标准规定了公共安全视频监控联网系统的互联结构, 传输、交换、控制的基本要求和安全性要求,以及控制、传输流程和协议接口等技术要求,是视频监控领域的国家标准。
GB28181协议信令层面使用的是SIP(Session Initiation Protocol)协议,流媒体传输层面使用的是实时传输协议(Real-time Transport Protocol,RTP)协议。
GB28181可以理解为在国际通用标准的基础之上进行了私有化定制以满足视频监控联网系统互联传输的标准化需求。它的协议会话通道实际上使用的是SIP协议,并且在SIP协议的基础之上做了些私有化处理。
GB28181标准中具体通信协议结构图如下图所示:
二、协议
五协议指得是SIP、RTP、RTCP、RTSP和RTMP。
1、SIP
SIP(Session initialization Protocol,会话初始协议)是一个由IETF MMUSIC工作组开发的协议,作为标准被提议用于创建,修改和终止包括视频,语音,即时通信,在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话。
SIP中一个比较重要的概念是用户代理(User Agent),指的是一个SIP逻辑网络端点,用于创建、发送、接收SIP消息并管理一个SIP会话。
SIP用户代理又可分为用户代理客户端UAC(User Agent Client)和用户代理服务端UAS(User Agent Server)。UAC创建并发送SIP请求,UAS接收处理SIP请求,发送SIP响应。SIP协议会与许多其它的协议协同工作,如SIP报文内容发送会话描述协议(Session Description Protocol,SDP),SDP协议描述了会话所使用流媒体细节,如:使用哪个IP端口,采用哪种编解码器等等。
SIP的一个典型用途是:SIP会话传输一些简单的经过报文的实时传输协议流,RTP本身才是语音或视频的载体。
在前文所述的GB28181协议中,联网系统在进行视音频传输及控制时应建立两个传输通道: 会话通道和媒体流通道。会话通道用于在设备之间建立会话并传输系统控制命令; 媒体流通道用于传输视音频数据,经过压缩编码的视音频流采用流媒体协议RTP/RTCP传输。
2、RTP
RTP(Real-time Transport Protocol)实时传输协议是用于Internet上针对多媒体数据流的一种传输层协议。
RTP协议和RTP控制协议RTCP一起使用,而且它是建立在UDP协议上的。
和UDP一样,RTP并不提供任何传输可靠性的保证和流量的拥塞控制机制,无法保证实时业务的服务质量。在实际应用中,RTP协议和UDP两者共同完成传输层协议传输。UDP只是负责传输数据包,RTP提供时间标志戳及其他技术来保证流媒体在实时传输时的时间正确性。RTP具有延时低和支持多播两个特点。
多播功能在网络视频会议方面有着很广泛的应用,它主要应用于这样一种环境
假设红色的圆为存放有视频数据的流媒体服务器,其他的圆为连接到该服务器的各个客户端,当所有的绿色的客户端要求同时观看红色服务器上的某一个视频时,如果服务器为每一路客户端单独建立连接进行数据的传输,这样明显不太合理浪费带宽,因此,多播技术可以很好地解决这种问题,即同一份数据,由服务器发送到公共的多播地址,各个客户端均监听同一个多播地址来获取数据,这样,既节省了带宽,同时也保证了各个客户端所观看的视频的同步。RTP协议在最初就是为了实现类似的视频会议的应用而诞生的。
3、RTCP
RTCP(Real-time ControlProtocol,实时传输控制协议)与RTP共同定义在1996年提出的RFC 1889中,它是和 RTP一起工作的控制协议。RTCP单独运行在低层协议上,由低层协议提供数据与控制包的复用。在RTP会话期间,每个会话参与者周期性地向所有其他参与者发送RTCP控制信息包。
4、RTSP
RTSP(RealTime Streaming Potocol,实时流协议),是传输层之上的应用层协议(RTP是传输层),它可选择UDP、组播UDP、TCP、RTP为传输机制。RTSP定义了双向多应用程序如何有效地通过IP网络传送多媒体数据。
RTSP充当多媒体服务器的网络远程控制,使实时数据如音频与视频的快进快退、中止、播放成为可能。
和RTP相比,应用场景上RTSP是一种双向实时数据传输协议,它允许客户端向服务器端发送请求,如回放、快进、倒退等操作。协议上,RTSP是应用层协议,可基于RTP来传送数据,还可以选择TCP、UDP、组播UDP等通道来发送数据,具有很好的扩展性。这里就比较清晰了,运营商的IPTV直播业务,没有任何回放、倒退等操作,所以可以直接采用UDP+RTP+组播实现。
5、RTMP
RTMP(Real Time Messaging Protocol,实时消息传送协议)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。
RTMP协议从属于应用层,被设计用来在适合的传输协议(如TCP)上复用和打包多媒体传输流(如音频、视频和互动内容)。RTMP提供了一套全双工的可靠的多路复用消息服务,类似于TCP协议[RFC0793],用来在一对结点之间并行传输带时间戳的音频流,视频流,数据流。通常情况下,不同类型的消息会被分配不同的优先级,当网络传输能力受限时,优先级用来控制消息在网络底层的排队顺序。
除了以上五种协议之外,直播协议HLS、SRT以及苹果公司的HLS协议也是经常会用到的技术。
三、类库
二类库是指Google开源的WebRTC、以腾讯的视频SDK为代表的在线视频SDK。
1、WebRTC
2010年5月,Google以6820万美元收购VoIP软件开发商Global IP Solutions的GIPS引擎,并改为名为“WebRTC”。
WebRTC可通过简单的 API 为浏览器和移动应用程序提供实时通信(RTC)功能。WebRTC 组件已经过优化,可以最好地满足此目的。
借助 WebRTC,用户可以在基于开放标准的应用程序中添加实时通信功能。它支持在同级之间发送视频,语音和通用数据,从而使开发人员能够构建功能强大的语音和视频通信解决方案。该技术可在所有现代浏览器以及所有主要平台的本机客户端上使用。WebRTC 背后的技术被实现为一个开放的 Web 标准,并在所有主要浏览器中均以常规 JavaScript API 的形式提供。国内提供音视频PaaS和SaaS服务的厂商都是基于WebRTC开发的,包括QQ、微信,以及从腾讯和YY出来创业的各种团队。
2、腾讯直播SDK
直播 SDK 是腾讯云视立方产品家族的子产品之一。腾讯直播 SDK 支持直播推流、拉流、主播观众互动连麦、主播跨房 PK 等能力。
除了腾讯直播SDK以外,YY的声网、钉钉的vidyo等,也提供类似的在线直播平台SDK。可以不用自己做太多的开发。
四、视频形式及常见解决方案
从交互方式来看,流媒体分为点播(VOD)和直播(LIVE)两种。
直播(LIVE):HLS,RTMP,http+MP4,http+flv,RTP+RTSP
点播(VOD):http+MP4,http+flv,HLS,DASH
从业务场景来看,常见的应用方案可以归纳为以下几种。
直播:RTMP,HLS,http+flv
音视频通话:webrtc(RTP),SIP+RTP
视频点播:http+MP4,http+flv,hls
IPTV:RTSP(信令)+RTP(媒体)
会议电视:RTP(媒体)+SIP(信令),H323(信令)+RTP(媒体)
视频监控:国标SIP(信令)+RTP(媒体),RTSP(媒体)+RTP(媒体)
VOIP:SIP(信令)+RTP(媒体)
当然,以上只是一个简单的介绍,具何如何应用,还要看自己的业务需求。