概述
当前直播发展如火如荼,越来越多的直播平台开始涌现;rtmp则是直播中使用最为广泛的协议之一;另外,监控产品也开始广泛的使用rtmp协议。为了方便直播/监控用户使用oss来存储音视频数据,oss近期推出了rtmp收流功能。用户可以直接用rtmp协议将音视频数据上传到oss。
oss livechannel介绍
livechannel是oss为了管理rtmp推流新增的概念;livechannel即直播频道,用来保存推流配置,获取推流状态等;直播频道从属于bucket,一个用户可以在bucket中创建无限多的直播频道。
用户创建一个livechannel即可以获取一个对应的rtmp推流地址,随后用户可以将音视频数据通过rtmp协议推送到oss,转储为hls协议的ts、m3u8文件。转储的文件可以用来做点播;在延迟要求不高的场景下也可以直接使用hls协议做直播;另外,oss还支持收流的同时实时截图,鉴黄来做协助用户做内容审查(内测中,有需求的用户可以通过工单、支持群来联系尊龙凯时网址)。
通过livechannel,用户可以在直播的同时将内容存储到oss,不需要任何的本地临时存储;在享受oss高可靠、低成本、无限扩展的云存储的同时,还可以利用oss强大并且还在不断丰富中的数据处理能力(截图、转码、鉴黄等等)来进行各种后期处理;还可以非常便捷的使用oss的lifecycle等功能来做数据的生命周期管理。
使用场景说明
一、rtmp直播转录为hls
步骤说明
-
app开始直播,推送rtmp流到cdn;
-
app或者cdn发送“开始直播”的消息到mns topic,信息中包含本次直播的cdn拉流地址;
-
mns推送消息到用户搭建在ecs上的rtmp proxy;
-
rtmp proxy使用ffmpeg从cdn拉流;
-
rtmp proxy在oss创建livechannel,并向oss推流;
-
转推结束后,rtmp proxy发送一条“推流结束”的消息到另一个msn topic;
-
mns向客户的应用服务器推送“转推结束”的消息,供后续处理(例如保存点播地址到数据库);
-
app从应用服务器得到点播地址,访问oss获取点播视频。
备注
-
用户可以自己使用oss/mns sdk、ffmpeg、librtmp等来实现自己的rtmp proxy,后续oss会提供示例程序;
-
整个步骤中涉及到的组件都可以使用阿里云提供的服务搭建。
二、实时鉴黄
步骤说明
-
直播时使用rtmp proxy转推一路数据到oss,并设置livechannel开启截图;
-
oss按用户指定的间隔截图,并保存到oss;
-
oss调用第三方鉴黄服务对图片进行打分;
-
oss将打分的结果推送到mns topic;
-
mns回调用户的应用服务器通知鉴黄结果;
-
另一种处理方式:用户也可以选择让oss直接推送截图的图片链接,应用服务器将图片地址聚合后采用其他方式鉴别;
备注
-
第三方鉴黄服务会部署在阿里云提供的容器服务中,调用的延迟等有充分的保证;
-
截图的同时oss仍然会将rtmp流转储为hls文件;
三、权限控制(私有bucket支持hls播放)
oss提供了丰富的鉴权/授权机制让用户可以精细的控制数据的访问权限;对于hls直播/点播场景,我们同样提供了“动态签名m3u8”的机制,使用户可以使用私有bucket提供hls播放服务。
用户只需要使用url签名方式访问m3u8,并且增加参数“x-oss-process=hls/type”,oss会对返回的播放列表中的所有ts地址按照与m3u8完全的相同的方式进行签名(相同的accessid、accesskey、expiretime)。
假设某个m3u8文件的内容如下:
#extm3u#ext-x-version:3#ext-x-media-sequence:54#ext-x-targetduration:6#extinf:6.006,1470971233380.ts#extinf:6.006,1470971233398.ts#extinf:1.944,1470971233415.ts
动态签名后返回的内容如下:
#extm3u#ext-x-version:3#ext-x-media-sequence:54#ext-x-targetduration:6#extinf:6.006,1470971233380.ts?expires=1470973160&ossaccesskeyid=yjjhkokwdwinlkxv&signature=6ajidj9vcrqnv+wszh9meroehpm=#extinf:6.006,1470971233398.ts?expires=1470973160&ossaccesskeyid=yjjhkokwdwinlkxv&signature=ek3i5uk3r8flnzllwcmzsjxo7wk=#extinf:1.944,1470971233415.ts?expires=1470973160&ossaccesskeyid=yjjhkokwdwinlkxv&signature=jmjduccgu63bgtiiheei0usyy18=
备注
-
“动态签名”不会改变存储在oss中的m3u8文件的内容;
-
支持子账号、sts,使用sts访问时,token必须通过url参数提供;
-
x-oss-process参数需要参与签名。