以下根据七牛云首席布道师何李石现场演讲内容整理。

直播模型及其实现

一个通用的直播模型一般包括三个模块:主播方、服务器端和播放端。

首先是主播方,它是产生视频流的源头,由一系列流程组成:

  • 第一,通过一定的设备来采集数据;
  • 第二,将采集的这些视频进行一系列的处理,比如水印、美颜和特效滤镜等处理;
  • 第三,将处理后的结果视频编码压缩成可观看可传输的视频流;
  • 第四,分发推流,即将压缩后的视频流通过网络通道传输出去。

其次是播放端,播放端功能有两个层面,第一个层面是关键性的需求;另一层面是业务层面的。

先看第一个层面,它涉及到一些非常关键的指标,比如秒开,在很多场景当中都有这样的要求,然后是对于一些重要内容的版权保护。为了达到更好的效果,我们还需要配合服务端做智能解析,这在某些场景下也是关键性需求。再来看第二个层面也即业务层面的功能,对于一个社交直播产品来说,在播放端,观众希望能够实时的看到主播端推过来的视频流,并且和主播以及其他观众产生一定的互动,因此它可能包含一些像点赞、聊天和弹幕这样的功能,以及礼物这样更高级的道具。

我们知道,内容产生方和消费方一般都不是一一对应的。对于一个直播产品来讲,最直观的体现就是一个主播可能会有很多粉丝。因此,我们不能直接让主播端和所有播放端进行点对点通信,这在技术上是做不到或者很有难度。主播方播出的视频到达播放端之前,需要经过一系列的中间环节,也就是我们这里讲的直播服务器端。

直播服务器端提供的最核心功能是收集主播端的视频推流,并将其放大后推送给所有观众端。除了这个核心功能,还有很多运营级别的诉求,比如鉴权认证,视频连线和实时转码,自动鉴黄,多屏合一,以及云端录制存储等功能。另外,对于一个主播端推出的视频流,中间需要经过一些环节才能到达播放端,因此对中间环节的质量进行监控,以及根据这些监控来进行智能调度,也是非常重要的诉求。

实际上无论是主播端还是播放端,他们的诉求都不会仅仅是拍摄视频和播放视频这么简单。在这个核心诉求被满足之后,还有很多关键诉求需要被满足。比如,对于一个消费级的直播产品来说,除了这三大模块之外,还需要实现一个业务服务端来进行推流和播放控制,以及所有用户状态的维持。如此,就构成了一个消费级可用的直播产品。

但是正如刚才所说的直播通用模型一样,实际上这里很多功能都可以抽象成一个通用功能,也就是说各家直播产品的需求和实现方式都类似。我们再来看,如果把这些抽象出来的需求交给七牛这样的第三方去实现,会有多大的差异。

七牛直播云解决方案

首先,对于推流端的功能,我们可以用一个 SDK 去覆盖所有功能点,包括采集、处理、编码和推流等工作,若有一些功能无法通过官方提供的 SDK 来满足,可以通过自定义扩展的形式来实现。

其次,对于播放端,我们可以将其功能分类,和视频播放相关的功能可以通过一个播放器 SDK 去实现。而其它功能如实时聊天,可以直接使用其它第三方服务。

在直播服务器端,几乎所有的工作都集中于如何更好的处理、分发视频流,比如出于审核的目的对视频进行自动鉴黄,为了更好的适配客户端的网络需要对视频进行实时转码。

我们发现,对于这三个模块,几乎所有直播产品的诉求都是类似的。因此七牛提供了一个这样覆盖主播端到播放端的直播云解决方案,它包括推流端 SDK 和播放端 SDK,以及一个强大的直播网络,它既能满足推流端和播放端在拍摄和播放方面的体验诉求,也能够通过定制化的方式来满足在产品运营方面的诉求,比如给播放器加上弹幕和点赞等功能。

七牛直播云平台主要包含直播云 API、推流端 SDK 和播放端 SDK 等三大模块。接下来重点介绍七牛在推流端和播放端 SDK 方面的功能特性,以及它们在性能方面的表现。

SDK 功能特性

1)SDK 处理流程

如果把一个完整的直播流程用一个流水线来表达,它应该是这样子的,如下图所示。

七牛 SDK 的开放性表现为两点:

  1. 数据采集源的开放性。我们提供了一个开放式的采集接口来进行视频内容的采集,目前主要的采集源有手机屏幕采集和摄像头采集。
  2. 可插拔的数据处理模块。对于视频内容的处理,目前我们提供了美颜、水印和基本的滤镜功能,但它其实也提供了一个开放式的处理接口。

除了开放性,七牛也支持了 H.264 和 H.265 等多种编码标准。H.265 是一种更为高效的编码标准,能够在同等画质效果下将内容的体积压缩得更小,传输时更快更省带宽。

视频流编码完成后,则进入另一个常规的流程,进行推流、分发和播放。这样,我们就完成了一个完整的直播流程,它包含采集、处理、编码、推流、分发和播放等子流程。其中每一个子流程都是可插拔可替换的,而所有流程的子模块也都具有灵活开放的输入输出接口,子模块可以被任意的扩展或者替换。

2)SDK 功能点对比

直播流程里面的模块化处理方式中,每个子流程都包含一系列开放可扩展的子模块,这些子模块对应多组不同的功能,以满足各阶段的需求。我们汇总了一些当前主播、观众以及 App 实现者最关注的功能,大概有 36 种。从这张图可以看出,目前七牛的推流端和直播端 SDK 中实现了多达 32 种功能。

3)SDK 包大小对比

但是,对于七牛直播服务来说,要做到这么开放,又具备这么多功能点,需要一个多大的 SDK 呢? 我们统计了一下,iOS 端的推流和播放 SDK 加起来,大概需要 5MB 左右,而业界的平均值则是 11MB。Android 端由于需要适配的硬件设备和软件系统太多,SDK 的大小大概在 18MB 左右,业界的均值则在 42MB。

SDK 性能对比

我们提供了一个开放的 SDK 处理流程,在这个流程中每个环节都提供了非常丰富的关键功能,能够满足大部分场景下的需求,同时又保证了包含所有这些功能特性的 SDK 不会太大。那么,它在性能方面的表现如何呢?

1)资源占比

除了程序 Bug 导致的主动崩溃之外,一个 App 的稳定性主要由两方面影响:内存和 CPU,因此第三方 SDK 在这两方面的表现将直接影响 App 的稳定性。而对于一个视频推流和播放 App 来说,CPU 是其最重要的资源之一。

我们先来看一下七牛 SDK 在 CPU 占比方面的情况。上下两张图分别是推流和播放 SDK 在经过多次反复测试后得出的 CPU 占比均值曲线图。从图中可以看出,无论是推流端还是播放端,七牛 SDK 在 CPU 使用率方面都占比最少。

我们再来看一下内存占比,上下两图也分别给出了推流和播放 SDK 在多次反复测试后得出的内存占比均值曲线图,从图中可以看出,我们 SDK 在推流和播放的时候内存使用情况表现非常平稳,而内存的使用量也在业界均值之下,接近于最好的值。这个数据之所以没有达到最好值,是因为我们经过反复测试发现频繁的对内存进行回收(Android)会导致编码的不稳定,实际上这个指标确实可以优化到最好,只不过可能会导致内存和 CPU 波动较大,进而影响整个过程的编码效率。对于这样的权衡,我们大多数客户也非常认可,这也是他们选择我们的 SDK 原因之一,这点从我们 Github 库上的关注度就可以看出。

2)耗电量对比

最后,我们再来看下在保证较好的推流效果和 App 稳定性情况下,它需要消耗多少电量。这两张图是推流和播放 10 分钟得到的平均电量消耗对比,从图中可以看出,七牛 SDK 在推流和播放情况下所需电量都是最小的,推流和播放分别只需要占用 App 总电量的 1.7% 左右(三星 S6 手机)。

总结

前面分享了这么多功能和性能的对比,我们再来回顾一下所有这些对比到底说明了什么:

首先,我们提供开放可插拔的模块化组件,整个采集、处理和编码过程都是非常开放的,每个模块都可以非常方便的替换或者扩展。

其次,SDK 是开放性的,能够方便地整合所有推流设备。我们认为所有端都应该平等地享受七牛的直播云服务,因此帮助所有端接入也是我们的服务宗旨之一。

最后,可量化的指标才有改善的空间,我们将几乎所有指标都量化成指导 SDK 性能优化的数据,准确跟踪服务客户的质量,长期坚持不懈的改进 SDK 易用性、性能以及后端支撑网络的效率。也即,优化到极致的推流播放性能和编解码控制。

原文发布时间为:2016-07-11

本文来自云栖社区合作伙伴“Linux中国”

七牛直播云服务技术揭秘相关推荐

  1. 何李石:七牛直播云技术详解

    导读: 6月30日,七牛在原有云存储,云加速以及数据处理服务的基础上,正式推出七牛直播云服务.这次发布,除了推出实时流网络(LiveNet)作为全面支撑直播实时互动场景的传输网络通道,同时也推出多平台 ...

  2. 七牛CDN云存储优惠码充值 adbcf415 长期有效

    做为老牌CDN厂商,七牛提供了优质高速的CDN网站加速服务.目前,七牛的业务已经不止是CDN云存储,还有智能多媒体.直播云服务.SSL证书服务.我使用了七牛有五年的时间,七牛价格便宜,云存储一直很稳定 ...

  3. 关于视频直播云服务,这几点你不得不知

    导语:大家都知道,音视频云服务降低了硬件接入音视频的门槛,但是,在使用这一服务的过程中如何踩坑是一个问题. 说到音视频云服务,大多数人可能联想到的是网络直播应用场景,实际上,硬件对音视频云服务的需求也 ...

  4. 直播APP的应用(使用七牛直播平台SDK和环信IM低仿映客)

    简介 这是一款低仿映客直播的Android直播聊天应用,本项目通过使用七牛的直播平台提供的sdk进行推流和拉流,使用环信IM来作为用户系统的管理直播聊天室中消息收发.发送礼物.弹幕.私信等功能.本项目 ...

  5. php七牛云rtmp直播推流,GitHub - jangocheng/FlutterQiniucloudLivePlugin: Flutter 七牛云直播云 推流/播放 SDK集成...

    flutter_qiniucloud_live_plugin Flutter 七牛云直播云插件,支持IOS.Android客户端 Getting Started 集成七牛云直播云推流.观看等功能 功能 ...

  6. 赛维安讯LiveCloud直播云服务介绍

    6月1日消息 随着网络视频的兴起,直播已不再是广播网络独享的业务,包括视频网站,视频客户端,网络电视台等等都推出了直播服务,用户可以通过PC.平板电脑和手机随时随地收看直播频道.春晚直播.台湾大选.C ...

  7. 视频流媒体直播云服务管理平台有什么优势?

    这几天我搜视频管理,出现最多的相关词就是视频直播云服务.确实,现在视频直播确实是互联网非常火热的项目,俨然成为了一种新的经济主体,视频云管理也就成为了新的衍生服务.所以不管是用于安防监控直播还是用于娱 ...

  8. 企业直播云服务崛起背后:PaaS平台成直播下半场“杀手锏”

    当一个领域竞争激烈.绝大部分玩家都深陷红海苦苦挣扎时,总有一些行业领先者,能够超越现有需求,打开新的蓝海.企业直播领域就是如此. 近日,第三方数据调研机构艾媒咨询发布了<2017-2018中国在 ...

  9. 阿里云CDN技术 揭秘

    阿里云CDN技术 揭秘 http://yunpan.cn/cA2N5fnd5TEx3  提取码 a232 转载于:https://blog.51cto.com/zj1991/1581950

最新文章

  1. SMO学习笔记(二)——还原(恢复)篇之完整恢复
  2. Cocos2d-x win7 + vs2010 配置图文详解(亲测)
  3. Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级
  4. linux查看文件句柄阀值,prometheus 告警指标
  5. OpenState之 Mac学习 实验
  6. sql server 加密_SQL Server机密–第一部分–加密基础知识和SQL Server加密功能
  7. Python基础知识 D3
  8. 通过MD5校验游戏安装文件完整性实例演示,MD5校验工具Hash使用演示
  9. 基于python处理问卷数据并进行卡方分析全流程
  10. 关于英伟达显卡驱动程序(GeForce)无法下载的问题
  11. 工欲善其事,必先利其器-IntelliJ IDEA
  12. 最好的网络拓扑制作软件
  13. 星星之火-52:6G十大领域关键技术
  14. 3DM:phase wrapping
  15. 陕西师范大学,我终于来了!
  16. 码元、波特、速率、带宽(附例题)
  17. Gradle(古rua都)vs Maven(马文)
  18. 以太坊学习路线——(三)Solidity常用IDE搭建、合约编译、部署、调用
  19. php打印10以内减法表,10以内加减法口诀表练习题口算题可打印(附下载)
  20. 低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端

热门文章

  1. debian 9 安装后的配置,debian 9 开发环境。
  2. php执行一条insert插入两条数据其中一条乱码
  3. C3P0在多线程下的maxPoolSize配置
  4. Integer 中的缓存类IntegerCache
  5. mono 调用windows webService
  6. 安卓APP_ 控件(4)—— ImageView
  7. 全国计算机等级考试题库二级C操作题100套(第19套)
  8. python方法名加__学习python中__name__方法使用
  9. xampp mysql 备份_Linux Xampp计划任务自动备份Mysql数据库和所有网站
  10. 云服务器有i5的性能吗,i5云服务器