七牛云直播服务快速接入手册

互联网直播是一种基于RTMP协议的业务。RTMP协议是一种基于TCP的协议。在实际的业务模型中,又分为客户端和服务端。客户端主要是利用RTMP协议进行数据包的发送,一般称之为推流。服务端主要用来接收客户端发送过来的RTMP协议数据包,并转发出去供订阅的客户播放,订阅直播播放的客户从服务端给出的一个地址请求数据,请求的过程也是基于RTMP的协议,这个过程称之为拉流。通常的情况下,直播的业务模型是一路推流到服务器,然后可能会有多路观看的拉流请求,即1:N的模型。

RTMP协议中,服务端的监听端口默认为 1935 ,在某些情况下,必须设置防火墙允许TCP协议的数据穿透这个端口。

live layout

常规的推流端主要有如下几种:

  1. 手机,Android和iOS平台的手机是互联网直播中的主要推流客户端。一般适用于移动直播的场景下的业务,比如手游直播,秀场直播,户外直播等。

  2. PC端推流软件,比如OBS( https://obsproject.com ),这个软件是跨平台的RTMP推流软件,支持Windows,Linux和Mac系统。一般适用于PC端的推流业务,比如网游直播,客户端游戏直播等。

  3. 摄像设备,比如监控设备或者是网络摄像机,这部分设备推出来的流各种各样,用途广泛。一般适用于会议直播,运动赛事现场直播等。

七牛云直播提供了Android和iOS平台的推流客户端和播放器,并自带美颜功能,方便大家开发各种直播APP。另外七牛云直播的服务器支持标准的RTMP协议,任何遵循RTMP协议的推流设备都可以使用七牛云直播服务。

首先,我们了解下,七牛云直播服务的业务模型。

pili-live-layout

流管理服务端SDK
首先七牛云直播提供了服务端的SDK方便客户和七牛云直播之间进行流的管理等工作。目前已经封装好的SDK有如下几种,Go, NodeJS, Ruby, Python, PHP, Java,C#,其他的语言,如果有需求可以自行使用开放的API进行封装,所有的API都基于HTTP协议。

常规业务流程
在上面的业务模型图中,推流客户端在进行推流之前,必须通过客户自己的业务服务器来获取流的信息,而这个流的信息是客户的业务服务器利用服务端SDK和七牛云直播服务进行交互得到的。

常规的业务场景下,用户在注册客户自己的直播服务之后,客户业务服务器可以利用服务端SDK发送请求到七牛云直播服务器,创建一个流,然后保存下该流ID和用户的对应关系。

客户端在推流之前,会去客户的业务服务器获取推流信息,而这个信息就是用户所对应的流的信息,可以通过服务端SDK获取。

推流SDK使用
客户可以使用PC端推流软件,第三方推流应用或者是利用七牛的推流SDK开发的推流应用来进行推流。七牛的推流SDK集成了音视频数据采集,美颜,推流等功能,方面客户用来开发自己的移动推流应用。

直播服务端处理
客户端利用七牛提供的推流SDK将流推送到七牛云直播服务器之后,服务端会转发RTMP协议的流给观众进行播放,也就是说观众可以以极短的延时播放推上来的数据。另外在流经过七牛云直播服务器之后,服务端还提供基于HTTP协议的FLV播放地址,观众同样可以播放这个地址。

直播数据落存储
除此之外,七牛云直播服务的最大特点就是直播流经过七牛独有的数据处理服务,自动进行流媒体切片,然后把切片数据存放到对象存储系统中。这个也是为了满足目前政策上的需要。自动落存储的切片都可以设置一个默认的过期时间,在过期之后,系统会自动删除应用空间中的数据,这个也是为了从客户角度考虑,节约存储空间,以节约成本。如果客户有永久存储切片数据的需求,可以利用服务端的SDK进行另存为操作,只需要指定起始时间和结束时间就可以保存这个时间段内的所有切片数据,并生成一个M3U8的播放地址,供客户提供回放使用。

直播回看服务
由于每个直播应用空间都设置了一个切片数据过期时间,而有些客户需要使用到直播回放的功能,这个时候,我们可以针对那些需要进行回放的数据,调用服务端的SDK中提供的saveas功能来将这段直播数据持久化下来,并提供一个m3u8的播放列表。

另外,如果客户希望得到的是诸如mp4之类的点播文件,还可以继续调用saveas接口,把m3u8的播放列表转换为单独的点播文件。

在我们正式开始接入直播服务之前,我们先了解下七牛云直播服务使用之前,需要了解的基本概念。

应用名(HUB)
七牛云直播服务开通的时候,都会要求提供一个HUB名称,这个名称是一个逻辑上的单位,是一组流的集合名称,你可以在这个HUB下面创建不受限制数量的流,另外每一个HUB其实后台都对应一个对象存储空间,用来存储切片数据。一般情况下,HUB的名称就是APP应用的名称,这样对应起来很直观。直播应用名的格式必须是4到100字符,英文数字以及-_组成。

直播自定义域名
七牛云直播服务开通的时候,都会要求提供一个自定义域名,然后创建应用成功之后会给出一组域名的CNAME目标要求设置。这里每个域名对应了一个场景的服务。

直播相关域名描述
pili-publish.example.comRTMP直播推流域名
pili-live-rtmp.example.comRTMP直播播放域名-直播观看
pili-live-hdl.example.comHTTP FLV直播播放域名-直播观看
pili-live-hls.example.comHTTP HLS直播播放域名-直播观看
pili-playback.example.comHTTP HLS 流媒体M3U8访问域名-直播回看
pili-media.example.comHTTP HLS 流媒体切片访问域名-直播回看
pili-vod.example.com直播转存MP4等点播文件的访问域名
pili-static.example.com直播流截图文件的访问域名

其中 example.com 就是必须提供的备案域名,它可以是一个二级域名或者主域名都可以。上面的域名根据需要进行CNAME设置。

直播服务端SDK功能

项目方法状态
创建流hub->createStream()支持
获取推流信息hub->getStream(); stream->toJSONString()支持
获取流列表hub->listStream()支持
更新流信息stream->update()支持
禁用流stream->disable()支持
启用流stream->enable()支持
删除流stream->delete()支持
获取流状态stream->status()支持
获取RTMP推流地址stream->rtmpPublishUrl()支持
获取RTMP播放地址stream->rtmpLiveUrls()支持
获取HLS直播播放地址stream-> hlsLiveUrls()支持
获取FLV直播播放地址stream-> httpFlvLiveUrls支持
获取HLS回放地址stream->hlsPlaybackUrls()支持
获取流TS片段文件列表stream->segments()支持
将一段流另存为文件,如mp4stream->saveAs()支持
从流中截取图片stream->snapshot()支持

目前服务端的流管理SDK支持主流的编程语言:

语言SDK链接
Javahttps://github.com/pili-engineering/pili-sdk-java
Nodejshttps://github.com/pili-engineering/pili-sdk-nodejs
Pythonhttps://github.com/pili-engineering/pili-sdk-python
PHPhttps://github.com/pili-engineering/pili-sdk-php
Rubyhttps://github.com/pili-engineering/pili-sdk-ruby
Gohttps://github.com/pili-engineering/pili-sdk-go
C#https://github.com/pili-engineering/pili-sdk-csharp

客户端推流和播放SDK

系统SDK链接
Android推流https://github.com/pili-engineering/PLDroidCameraStreaming
iOS推流https://github.com/pili-engineering/PLCameraStreamingKit
Android播放https://github.com/pili-engineering/PLDroidPlayer
iOS播放https://github.com/pili-engineering/PLPlayerKit
直播APP技术架构 直播APP涉及到如下几个方面的角色: 直播业务服务器,该服务器主要是验证客户端的权限并在权限合法之后授权客户端推流参数,客户端使用推流参数进行推流。 七牛直播系统,该系统主要根据直播业务服务器的请求来创建直播流,获取直播流信息,提取直播流回看地址等信息。 推流客户端,推流客户端主要工作是从直播业务服务器获取直播推流参数,然后将录制的视频流推送到七牛直播系统。 直播业务服务器一般由客户自行开发,用来和七牛直播系统进行交互,七牛提供服务端的SDK,客户可以很方便地使用适合自己的编程语言的SDK开发包来开发服务端API。 推流客户端一般由客户自行开发,用来和直播业务服务器交互,将视频流推送到七牛直播系统或者从直播业务服务器获取观看地址,然后从七牛直播系统根据地址获取视频内容。 直播APP业务流程 直播APP登录帐号,该账号的合法性和其相关的业务逻辑由直播业务服务器提供和验证。 直播APP从直播业务服务器获取推流的参数信息,准备使用集成在APP中的七牛推流SDK来将视频流推送到七牛直播系统 直播APP从直播业务服务器获取推流参数后,在开始推流时,发送开始信号给业务服务器,业务服务器记录下该直播过程的起始时间,并生成唯一性id给客户端 直播APP开始进行推流,推送的直播流数据将通过SDK直接发送到七牛直播系统,推流协议为RTMP。 其他的直播APP客户可以从直播业务服务器获取当前直播的RTMP或者HLS的地址进行观看,RTMP的实时性要优于HLS,另外七牛提供的直播播放器支持RTMP协议。 直播APP结束推流,同时发送停止推流信号给直播业务服务器,业务服务器记录下该直播过程的结束时间,可选性地让客户命名直播过程,方便未来回放。 直播APP本身也可以获取已直播完成的视频播放地址进行回看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值