剑客
关注科技互联网

如何从 0 到 1 开发一款完整的直播 App|架构师实践日

编者按: 随着移动互联网的发展,越来越多的人选择用手机来看直播。一款直播 App,需花费多少力气解决技术问题?市面上有哪些成熟的方案可以直接借鉴?如何把这些方案结合在一起并解决问题?9 月3 日,在七牛云举办的架构师实践日上,七牛直播云工程师陶泽宇,对怎样完美解决视频企业的三高之痛带来了全新视角。以下是对他演讲内容的整理。

陶泽宇

演讲嘉宾:陶泽宇,七牛直播云工程师,负责七牛直播云 SDK 的 iOS 端开发工作。曾多年从事游戏研发和 iOS 端开发工作,具有丰富的大型移动系统开发和运维经验。

开发一个直播  App  包含哪些部分 

iOS / Android  客户端

Web  端播放器

业务服务器

分发网络

七牛直播云针对 iOS / Android  客户端做了怎样的优化

iOS / Android 客户端包含采集、音视频处理、编码和连麦功能。

采集:通过手机的麦克风和摄象头把音视频采集到一起。必须为 Android 和 iOS 各做一套采集方案。

音视频处理:采集后的音视频不能直接推流,必须对采集的音视频数据进行处理。比如,视频数据每秒钟要处理 25 到 30 帧的图片,这对 CPU 的消耗非常大。此外,视频处理方面,主播美颜是一个刚需,此外还必须给视频打上水印。音频方面也有很多东西是可做的,比方说音效,如混响效果可以让主播的声音听起来更有磁性。此外如果想要让主播可以表演唱歌,则需要讲伴奏的音频文件和主播的声音进行混音。为了更好的体验,返听功能也可以做。

编码:在直播推流进行编码时,尽量采用硬编,这可以减少 CPU 占用率,间接可以减少手机的发热量和耗电量。为了保证在所有设备上我们都可以进行编码,还需要准备一个软编方案,当某种机型上无法使用硬编,则立即还成软编。

连麦:作为观众给主播反馈的重要形式,可以极大丰富观众直播体验。比如,主播在表演节目时,观众想和主播对话,主播就会弹出一个邀请,要求连麦观众的画面就会出现在主播屏幕右下角的小窗上,所有的观众都可以看到这个场景。传统的直播采取的是主播一对多的推流的方式,而连麦可以做到多对多推流,这个功能非常受欢迎。连麦可以做出很多丰富的形式,例如主播与主播进行 PK,观众把屏幕横过来后,可以看到屏幕左边是一个主播的图象,右边是另外一个主播的图象 。

分发网络

对于分发网络结构的选择,常见的是树状的分发网络,比如 CDN 就是一种树状分发网络。

如何从 0 到 1 开发一款完整的直播 App|架构师实践日

图  1

以图 1 为例,演示 CDN 。图中每个白色节点对应某一个地方的机房。这种结构中,节点之间的等级有层次之分。

推流通常是由中央向边缘节点推,比如从左侧开始推流到中心节点,然后再经过中心节点分发到全国各地的边缘节点,观众就能够观看直播。 

这种传统的 CDN 树型分发网络比较常见,但是不一定适应现在这种主播数目越来越多的趋势。

与十年前相比,只有电视媒体可以做直播。直播的参与者也都是专业的主持人。但是,现在人们只需要一台手机就可以做直播了。换句话说,直播这个事,参与的门槛越来越低是一个趋势。

这种趋势带来的影响有两个:

1. 主播的数量越来越多,造成推流节点里的人会越来越多;

2. 对于某个主播的观众而言,不再局限于某一个区域,而是分布在全国各地。

这样一来,树状分发网络的中心节点将成为整个网络的瓶颈。因为大量的主播的推流几乎不可避免地经过中心节点,而中心节点一旦故障则会影响全局。

为了解决这个问题,可以选择网状的分发网络来代替树状的分发网络。

如何从 0 到 1 开发一款完整的直播 App|架构师实践日 如何从 0 到 1 开发一款完整的直播 App|架构师实践日

图 2

以图  2 为例,演示分发网络,与树状网络一个最大的区别是节点对等。直播线路是靠节点之间的地理关系、资源负载、网络质量形成调度依据绘制最优线路。相对于 CDN 树状网络,一个很明显的特性是分发网络没有中心节点,做到了去中心化,以此规避因中心节点网络波动导致片区故障。这种网络更加适合做直播,七牛云的实时流分发网络采用的也是这种网状结构。

开发一款完整的直播 App 在客户端涉及到一些技术问题以及分发网络要解决,但采用七牛的直播云 SDK 和 LiveNet 将会省去很多麻烦。因为七牛的直播云 SDK ,针对的就是 Android 和 IOS 移动客户端,而 LiveNet  相对于传统的 CDN 采取的是智能调度与分发。

此外,七牛直播云 SDK 可以从 LiveNet 获取离设备最近的几个边缘节点的网络状态,从而挑选一个最好的节点来进行推流和播放。这类似于出门之前在手机上看看城市交通状况,选一条最不拥堵的路出行。这不但可以保持本设备拥有优质的网络资源,同时对于整个网络的各个节点均摊负载也是有利的。

但是,有了这些功能还远远不够。

直播是一种转瞬即逝的东西,播完了就没了,这种东西如何做运营呢?这其实就涉及如何把直播内容存储起来的问题。对此,七牛云可以提供云存储服务,它可以方便地把直播的内容存储下来,以供点播和回放。

此外将直播内容抽帧成一组图片,然后利用七牛数据处理平台的图片鉴黄鉴暴恐服务,就可以对直播进行鉴黄和鉴暴恐。

总结 

如何从 0 到 1 开发一款完整的直播 App|架构师实践日

图 3

以图  3 为例,演示七直播云 SDK 和 LiveNet 的关系。左边的部分代表七牛直播云 SDK ,右边深绿色的部分代表 LiveNet 网络,橙色部分是我们自己的业务服务器,它可以通过七牛的 Server 端 SDK 与 LiveNet 进行通讯。

如何从 0 到 1 开发一款完整的直播 App|架构师实践日 如何从 0 到 1 开发一款完整的直播 App|架构师实践日

图 4

以图  4 为例,演示七牛直播云 SDK 播放端如何从 LiveNet 把直播流播放出来。

如何从 0 到 1 开发一款完整的直播 App|架构师实践日

图 5

以图  5 为例,演示七牛云存储,如何与七牛直播云 SDK 结合,从而实现点播、回放功能。

如何从 0 到 1 开发一款完整的直播 App|架构师实践日

图 6

以图  6 为例,演示七牛处理的服务。

开发一款完整的直播  App,七牛的很多产品都可以直接使用,并且直接使用七牛产品付出的代价是最小的。

点击 「阅读原文」 了解七牛直播云

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址