携程移动直播探索

一、背景直播行业大概在10年前就开始兴起了 , 秀场直播和游戏直播是pc时代比较成功的应用场景 。 现阶段 , 移动互联网的大规模普及 , 流量价格越来越便宜 , 移动视频直播异常火爆 , 随着各行各业的不断融合 , 直播带货超高的营业额 , 明星艺人、销售、秀场网红的涌入 , 直播行业迎来了空前的繁荣发展 。 从pc直播到渐渐火爆的移动直播 , 直播技术也在不断地更新迭代 , 趋于成熟 。
本文从直播流的选择、交互优化、快速迭代等方面介绍携程直播技术 。
二、直播原理视频直播流程如下图 。 简单来说 , 推流端通过视频采集功能 , 把采集到的视频画面经过一系列的业务特效处理后 , 进行视频编码推送 。 拉流端使用流播放器把视频画面播放出来 。
携程移动直播探索文章插图

  • 采集:视频采集的主要采集源:摄像头、屏幕录制、视频文件推流
  • 处理:视频采集后得到原始数据 , 为了增强一些现场效果 , 需要在编码前进行处理(logo、美颜、变声)
  • 编码:编码性能、编码速率和编码压缩比直接影响整个流媒体传送的用户体验和传送成本
  • 推流:推流是直播的第一步 。 推流协议的选择会直接影响到观看的用户体验 , 常见的流协议(RTMP、HLS)
  • 分发:流媒体服务器负责直播流的发布和转播分发功能
  • 播放:直播终端的展示
前四步我们通常情况下称为推流操作 , 第五步称为服务分发或者cdn分发 , 第六步称为拉流操作 。 简化图如下:
携程移动直播探索文章插图
推流操作中比较重要的两步是编码和推流 。
2.1 编码
1)编码是什么
视频编码是压缩和可能改变视频内容格式的过程 。
2)编码能做什么
a. 减少占用空间;
b. 兼容性;
在减少占用空间方面:
携程移动直播探索文章插图
(数据来源于网络)
在兼容性方面 , 有时内容已经被压缩到足够的大小 , 但仍然需要进行编码以实现兼容性 。 这通常被更准确地描述为代码转换 。 兼容可能涉及某些服务或程序 , 这些服务或程序需要某些编码规范 。
国内常见的编解码器是H.265、H.264 。
2.2 推流
常见的流协议为以下几种:
1)RTMP
RTMP(Real Time MessagingProtocol):实时消息传输协议 , 是Adobe公司为flash播放器和服务器之间实现音频、视频和数据传输开发的实时消息传输协议 。 在RTMP协议中 , 视频必须是H264编码 , 音频必须是AAC或者MP3编码 , 且多以Flv格式封包 。
RTMP的优势在于:
  • RTMP 是专为流媒体开发的协议 , 对底层的优化比其它协议更加优秀 , 同时它 Adobe Flash 支持好 , 基本上所有的编码器(摄像头之类)都支持 RTMP 输出 。
  • RTMP适合长时间播放 。 因为RTMP支持的很完善 , 所以能做到flash播放RTMP流长时间不断流 。 当时的测试时长是100万秒 , 即10天多可以连续播放 。 (数据来源于网络)
  • RTMP 的延迟相对较低 , 一般延时在 1-5s 之间 , 一般的视频会议 , 互动式直播 , 完全是够用的 。
RTMP的劣势是:RTMP是基于TCP协议 , 不会丢包 。 所以当网络状态差时 , 服务器会将包缓存起来 , 导致累积的延迟;待网络状况好了 , 就一起发给客户端 。
2)HLS
HLS(HTTPLive Straming): 是苹果公司实现的基于HTTP的流媒体传输协议 。 它将整个流分为多个小文件来下载 , 客户端只要不停的按顺序播放从服务器获取的文件 , 就实现了直播 。
HLS的优势是:客户端支持简单 , 只需要支持HTTP请求即可 。 并且HTTP协议很方便通过防火墙或者代理服务器 。 CDN支持良好 。 由于是苹果公司提出的 , 所以在苹果的全系列产品都支持 。
HLS的劣势:相比 RTMP 这类长连接协议 , HLS的延时较高, 难以用到互动直播场景 。
3)WebRTC
WebRTC(Web Real TimeCommunication):是一个支持浏览器进行实时语音、视频对话的开源协议 。 基于UDP , 即使在网络信号一般的情况下也具备较好的稳定性 。
WebRTC的优点:开发者使用简单的HTML标签和JavaScriptAPI就能够实现Web音/视频通信的功能 。
WebRTC的缺点:WebRTC中很多的参数都是由GIPS公司的工程师们依靠经验所设定的值 , 这就会出现卡顿、延时、回声、丢包、多人视频不稳定等问题 。 WebRTC缺乏服务器方案的设计和部署 。 对Native开发支持不够 。