一、录播、点播、直播分别是什么意思?
录播:录播指的是一套系统,涵盖了音视频录制、推送直播、后期编辑、储存设备等多种核心功能。录播系统可以将现场的音视频内容进行采集和处理,生成我们常见的mp4、avi等格式的流媒体文件,上传到网络上供用户点播和直播观看。
直播:直播的视频源是实时生成的,所以播放器在播直播视频的时候是没有进度条的。直播互动是双向的,相对于点播反馈更快。用户可以通过聊天室、礼物、弹幕等多种方式,和主播实时互动。
一个完整的直播过程包括但不限于以下环节:
采集、处理、编码、封包、推流、传输、转码、分发、拉流、解码、播放。
点播:点播的视频源是云端的一个文件,文件只要没有被提供方删除就随时可以播放(类似优酷土豆、爱奇艺和腾讯视频),而且由于整个视频都在服务器上,所以播放的时候是有进度条的。
二、推流和拉流的概念?
推流:指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验不佳。
拉流:是指服务器已有直播内容,根据协议类型(如RTMP、RTP、RTSP、HTTP等),与服务器建立连接并接收数据,进行拉取的过程。拉流端的核心处理在播放器端的解码和渲染,在互动直播中还需集成聊天室、点赞和礼物系统等功能。
二、常见的直播协议有哪些?
目前常见的直播协议有三种:RTMP、 FLV 和 HLS。
传输协议 | 对应的直播地址格式 |
---|---|
RTMP | rtmp://* |
FLV | http://*.flv |
HLS(m3u8) | http://*.m3u8 |
从地址的前缀可以看出,HLS和FLV都是基于HTTP的协议。RTMP是基于TCP。
RTMP:RTMP(RealTime Messaging Protocol,实时消息传送协议,基于TCP),是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。 RTMP 协议比较全能,既可以用来推送又可以用来直播,其核心理念是将大块的视频帧和音频帧拆分,然后以小数据包的形式在互联网上进行传输,而且支持加密,因此隐私性相对比较理想,但拆包组包的过程比较复杂,所以在海量并发时也容易出现一些不可预期的稳定性问题。
FLV:FLV 协议由 Adobe 公司主推,格式极其简单,只是在大块的视频帧和音视频头部加入一些标记头信息,由于这种简洁,在延迟表现和大规模并发方面都很成熟,唯一的不足就是在手机浏览器上的支持非常有限,但是用作手机端 App 直播协议却异常合适。
HLS:HLS(Http Live Streaming)是由苹果提出基于HTTP的流媒体传输协议,将视频分成5秒 - 10秒的视频小分片,然后用 m3u8 索引表进行管理,由于客户端下载到的视频都是5秒 - 10秒的完整数据,故视频的流畅性很好,但也同样引入了很大的延迟(HLS 的一般延迟在10秒 - 30秒左右)。相比于 FLV, HLS 在 iPhone 和大部分 Android 手机浏览器上的支持非常给力,所以常用于 QQ 和微信朋友圈的 URL 分享。
直播协议 | 优点 | 缺点 | 播放延迟 |
---|---|---|---|
FLV(HDL) | 成熟度高、高并发无压力 | 集成 SDK 才能播放 | 2s - 3s |
RTMP | 优质线路下理论延迟最低 | 高并发情况下表现不佳 | 1s - 3s |
HLS(m3u8) | 手机浏览器支持度高 | 延迟非常高 | 10s - 30s |
三、常见的点播协议有哪些?
目前常见的点播格式有三种:MP4、HLS和FLV。
MP4
非常经典的文件格式,在移动终端和PC浏览器上的支持度都很好(在IOS和大部分Android设备上,都可以使用系统浏览器进行播放,在PC上可以使用FLASH控件进行播放)。但是MP4的视频文件格式比较复杂,所以处理成本高,而且由于索引表复杂度高,导致时长稍大(比如半小时)的MP4文件在线播放时加载速度会很慢。HLS
苹果公司力推的标准,在移动终端的浏览器上的支持度较好,但IE的支持情况依赖FLASH的二次开发工作(建议使用腾讯视频云的FLASH播放器控件)。其精简的m3u8的索引结构可以规避MP4的索引慢问题,如果是用于点播,是非常不错的选择。FLV
Adobe公司所推的标准,目前直播平台最常用的封装格式,在PC端有FLASH的强力支持,但在移动终端只有APP实现播放器才有可能支持(或者使用本播放器),大部分手机端浏览器均不支持。目前腾讯视频云的直播录制,采用的就是FLV视频格式。
四、常见的推流协议有哪些?
-
RTMP
即实时消息传输协议,该协议基于 TCP是一个协议族。其中包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括 Adobe Media Server/Ultrant Media Server/red5 等。RTMP 是目前主流的流媒体传输协议,广泛用于直播领域,可以说市面上绝大多数的直播产品都采用了这个协议。
优点:CDN 支持良好,一般主流的 CDN 厂商都支持且协议简单,在各平台上实现也很容易。
缺点:基于 TCP ,传输成本高,在弱网环境丢包率高的情况下问题显著且不支持浏览器推送。
-
WebRTC
是一个支持网页浏览器进行实时语音对话或视频对话的 API。它于 2011 年 6 月 1 日开源并在 Google、Mozilla、Opera 支持下被纳入万维网联盟的 W3C 推荐标准。目前主要应用于视频会议和连麦中。
优点:W3C 标准,主流浏览器支持程度高,不仅有Google 在背后支撑,而且在各平台都有参考实现。底层基于 SRTP 和 UDP,弱网情况优化空间大且可以实现点对点通信,通信双方延时低。
缺点:传统 CDN 没有提供类似的服务。
-
基于 UDP 的私有协议
有些直播应用会使用 UDP 做为底层协议开发自己的私有协议,因为 UDP 在弱网环境下的优势通过一些定制化的调优可以达到比较好的弱网优化效果,但同样因为是私有协议也势必有一些问题。
优点:支持更多空间进行定制化优化。
缺点:开发成本高并且对CDN 不友好,需要自建 CDN 或者和 CDN 达成协议。