如何从 0 到 1 开发一款完整的直播 APP

本文来自于七牛云博客,非经作者同意,请勿转载,原文地址:http://blog.qiniu.com/archives/7006


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

  • iOS / Android 客户端
  • Web 端播放器
  • 业务服务器
  • 分发网络

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

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

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

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

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

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


分发网络

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

这里写图片描述

图 1

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

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

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

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

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

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

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

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

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

图 2

图 2

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

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

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

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

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

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


总结

这里写图片描述

图 3

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

这里写图片描述

图 4

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

这里写图片描述

图 5

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

这里写图片描述

图 6

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

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

作者: 陶泽宇@七牛直播云工程师,更多云行业技术洞见请访问七牛云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值