技术研究之阿里云直播
1.前言
阿里云提供了 RTMP 直播服务,有两种计费方式,不包括视频截图,存储量费用。
(1)按量计算:流量阶梯单价 x 流量
假设1000人同时在线并同时观看视频1小时,流量计算方式为:[1000(人)] X [0.5(视频码率Mbps)] X [3600(观看时间/秒)] [1024 8(将Mbps换算为GB)] = 219.7GB,0.29(阶梯流量单价:元/GB)x 219.7(流量:GB) = 63.71 元
适合突发流量的情况。
(2)按峰值带宽计算:峰值带宽阶梯单价 X 峰值
假设1000人同时在线并同时观看视频1小时,流量计算方式为:[1000(人)] X [0.5(视频码率Mbps)] = 500Mbps。1.00(峰值带宽阶梯单价:元/Mbps)X 500 (Mbps) = 500 元
适合全天都平稳进行直播的场景。
超低延时直播RTS按[峰值带宽]计费 1.32 元,还需要加上一个转码费用,如果在 web 端播放 artc 协议,需要做一个转码。
2.配置域名
这里就要到 视频直播 -> 推/播流域名管理 界面增加域名,其实还挺麻烦的,推流和拉流两个域名还不能一样。
配置完了推流和拉流地址,需要将推流地址和拉流地址进行关联,在拉流地址里面选择 “域名管理” 可以配置推流地址。
【1】.验证域名归属权
3.控制台生成地址
有两种方式生成推流和拉流地址,(1) 控制台,(2) 代码生成。控制台生成 可以直接生成推流和拉流地址
(1) 登录视频直播控制台。
(2) 在左侧导航栏选择直播工具箱 > 地址生成器。
(3) 在直播地址生成器页签,完成以下配置获取推流地址和播放地址。
选择播流域名,关联的推流域名,输入 AppName,StreamName 然后点击开始生成,就可以获取一个 rtmp 地址,可以将这个地址配置到 OBS 中进行直播了。
4.代码生成地址
通过API自定义拼接地址,下面的代码基本上可以使用。
1 | import java.math.BigInteger; |
需要注意:
(1)鉴权的有效时长应该和控制台配置的有效时长相同,默认是 1440 分钟,也就是一天。
(2)需要注意 pushKey 和 pullKey 不一样,需要在直播域名的详情页的访问控制中进行查看。
【1】.RTMP协议接入流程 RTMP、HLS、HTTP-FLV 协议对比:RTMP 延迟1s-3s;HLS:>10s;HTTP-FLV:1s-3s。
【2】.推流、拉流与播流 1.准备工具和环境;2.按需拉取直播流;3.获取推流与播放地址;4.推流设置与操作;5.播放设置与查看
【3】.如何通过PHP或Java代码生成推流地址和播放地址?
【4】.配置URL鉴权
【5】.鉴权代码示例
5.超低延时
登录视频直播控制台,
(1) 在左侧导航栏选择推/播流域名管理,进入域名管理页面。
(2) 单击需要开启超低延时直播的播流域名操作列的域名配置,进入域名管理页面。
(3) 选择直播管理 > 超低延时播放 RTS。
(4) 打开RTS播放开关。
(5) 选择版本低延时直播(RTS 1.0),打开H5自动转码开关。
【1】.超低延时直播简介
【2】.开通超低延时直播功能
【3】.生成推流地址和播放地址 支持RTMP、FLV、M3U8、RTS格式,推荐使用RTS格式地址播放。示例:RTS:artc://example.aliyundoc.com/app/stream?auth_key={鉴权串}
【4】.URL鉴权
6.配置https
使用超低延迟 rts 播放,需要为拉流地址配置 ssl 证书,否则无法播放。我在操作的时候,又遇到了问题,问题就是在阿里云签发证书的时候,总是出现失败的情况。
(1)购买证书
去阿里云 ssl 证书管理页面申请一个免费的证书。如果在阿里云购买了证书之后,可以选择一键部署,直接部署到拉流端域名。
(2)配置直播域名
在视频直播 -> 推/播流域名管理,选择拉流域名,选择 HTTPS 配置,开启HTTPS证书。
(3)验证证书是否生效
设置完成待证书1分钟后全网生效,使用HTTPS方式访问资源,如果浏览器中出现锁样的标识,则HTTPS安全加速生效。
【1】.Demo体验 您需要为域名配置SSL证书,* 如果您在体验过程中出现问题,可优先前往直播控制台工具箱>自助问题排查中快速诊断常见推/播流问题,并提供解决建议。
【2】.配置HTTPS安全加速 这里是阿里云详细的操作步骤。
【3】.部署证书至阿里云云产品(云产品部署)
6.超低延迟播放
可以到 问题自查 查看自己的直播是否可用。
(1) 安装
1 | pnpm add aliyun-aliplayer --save |
(2) 配置license
直播工具箱 -> SDK管理 -> 我的授权,需要先购买 License,然后创建应用,将 license 和应用绑定就可以了。(多个应用共用一个license)
1 | license: { |
(3) 使用
1 | <div id="J_prismPlayer"></div> |
【1】.接口说明
【2】.快速使用阿里云ARTC Web SDK 这里是使用的 web sdk 进行的直播,使用这种方式就少了一个视频转码的费用,如果使用 h5 播放,还有一个视频转码的费用。
【3】.超低延时直播(RTS)视频播放 超低延时直播(RTS)使用URL方式播放,无需额外设置参数。
【4】.阿里云 Vue 播放器 demo 这是阿里云播放器进行播放的例子,可以直接使用播放器直接播放。
【5】.进阶功能
【6】.Aliplayer阿里云Web播放器 -Aliplayer 错误码 4004 地址不存在
7.样式修改
【1】.Web播放器常见问题 此黑边为播放器容器的背景色,可以通过给video标签设置css属性object-fit: cover;来解决该问题。
8.视频截图
【1】.阿里云Aliplayer高级功能介绍(一):视频截图 使用 canvas 进行了截图处理。
问题
1.直播黑屏
在同一个页面中,创建两个实例,结果就会出现其中一个实例黑屏的问题,这个问题是偶发的,我开始的时候以为是 id 的问题,我把这个 id 号改为了随机,结果也还是不行。
【1】.阿里云播放器Aliplayer-WEB走坑中
2.直播卡顿
在手机的webview中进行视频播放的时候,总是出现卡顿的现象,不知道为什么。
(1) 上行带宽不足或网络抖动,导致的数据发送速率下降,无法达到流畅播放的帧率要求
(2) 码率、帧率或编码档位设置的过高,但硬件条件存在限制,导致编码速度变慢,无法达到流畅播放的帧率要求。
(3) 推流过程中会有一定的CPU损耗,硬件配置较差的低端手机,在推流过程中若整体CPU 使用率超过80%以上,画面会出现不同程度的卡顿,花屏等现象,会影响到视频的采集,同时也会影响到用户端的观看。
(4) 视频采集参数的设置过低。
【1】.视频直播出现卡顿现象
3.新版本报错
最新的版本 v.2.28.5,好像引用了一个私有依赖,导致安装之后运行报错,出现的错误莫名其妙:“./node_modules/.pnpm/aliyun-aliplayer@2.28.5/node_modules/aliyun-aliplayer/build/aliplayer-min.js 6:881,Module parse failed: Unexpected token (6:881) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders”
【解决方案】
所以最好就是在 package.json 中锁定版本
1 | "aliyun-aliplayer": "2.27.1" |