【云+社区年度征文】云直播:基于API+SCF+Redis实现流状态同步和查询
导读:无论是秀场直播,还是直播带货,App中获取正在推流直播间,以及查询某直播间是否正在推流,是很有必要的,App需要列出所有在线直播间,进入直播间后,需要查询当前房价是否正在推流,若已下播则提示观众“直播已结束”,在后台开发中,该如何查询直播流状态呢
一般情况下,直播流有三种状态:active活跃、inactive非活跃、forbid禁播,当主播上线推流了之后,该直播间就处于活跃状态,当主播下线断流了之后,就处于非活跃状态,或叫做断流状态;
在直播场景下,了解一个直播间当前是否正在推流是很重要的,用户打开APP之后,需要给他展示当前活跃的直播间列表,当直播断流之后,需要把该流从列表中移除,当进入主播页面时,需要提示用户该主播是否直播中
步骤0:前提条件
- 已开通腾讯云直播服务。
- 已准备好云直播推流和播放域名,并完成域名备案;
步骤1:购买云Redis
购买云Redis,相关指引参考官网文档,不再赘述: https://cloud.tencent.com/document/product/239/30871
记录云Redis的内网IP、端口、登录密码、所属网络、所在子网,云Redis的配置已完成
步骤2:新建SCF
- 登录 云函数控制台,单击左侧导航栏的【函数服务】。
- 在主界面上方选择期望创建函数的地域,并单击【新建】,进入函数创建流程,选择运行环境为Python3.6,以空白函数方式创建,点击下一步后,按需填写内容,点击完成即可。
步骤3:新建云API网关
- 登录API网关控制台。
- 在左侧导航栏,单击【服务】,进入服务列表页。
- 在当前地域下,单击页面左上角的【新建】,新建一个服务。填写服务名为“livecallback” 【可自定义名称】,根据需要选择前端类型为http和https,勾选公网访问方式,点击提交即可
5、下载代码附件到本地
6、切换到函数代码选项卡,选择提交方法为“本地上传zip包”,选择刚刚下载的附件,然后点击保存按钮。
自此,阶段一已经实现,可以通过云直播推流断流验证方案实现情况
阶段二:查询流状态
这个阶段主要分为几个步骤:
1、观众进入主播个人主页,查询主播是否在开播(流状态)
2、业务服务器收到查询请求,并且查询云Redis当前流状态;
3、若流状态最近更新时间为2分钟以内,则直接返回流状态;
4、若流状态最新更新时间在2分钟以外,调用云API接口查询流状态,获取最新状态;
5、更新Redis流状态以及最近更新时间;
基于云API网关+SCF+Redis实现
下面步骤和上面的有点类似,但有些地方不大一样,不建议复用之前创建的API网关和云函数
步骤1:新建SCF用于查询
1、登录 云函数控制台,单击左侧导航栏的【函数服务】。
2、在主界面上方选择期望创建函数的地域,并单击【新建】,进入函数创建流程,选择运行环境为Python3.6,以空白函数方式创建,点击下一步后,按需填写内容,点击完成即可。
步骤2:新建云API网关
- 登录API网关控制台。
- 在左侧导航栏,单击【服务】,进入服务列表页。
- 在当前地域下,单击页面左上角的【新建】,新建一个服务。填写服务名为“livecallback” 【可自定义名称】,根据需要选择前端类型为http和https,根据需要勾选公网或内网VPC方式,点击提交即可
步骤3:新建通用API
1、在API网关控制台的左侧导航栏,单击【服务】,进入服务列表页。
2、在刚刚创建的API网关服务右边操作按钮中,点击“配置管理”进入基础配置页面,切换到管理API选项卡。
3、在通用API中,点击新建,进入新建API流程。
4、API名称填写livestat;前端类型按需选择http和https;路径填 /livestat/ ;请求方法选GET;按需选择鉴权类型;点击下一步
5、进入后端配置页,后端类型选择云函数SCF,命名空间按需选择default,名称选择刚刚创建的云函数livestat,勾选响应式集成,点击下一步
6、在响应结果页,直接点击完成,弹窗提示是否发布,点击发布服务
步骤4:新建运行角色
1、登录访问管理控制台,单机左侧导航栏中的【策略】。
2、点击新建自定义策略,选择【按策略生成器创建】
3、进入创建自定义策略流程,
效果(Effect)选择【允许】;
服务选择【云直播(live)】;
操作(Action)选择【DescribeLivestreamState】;
资源(Resource)填写 * 或 qcs::live:::domain/xxx.livepush.myqcloud.com
其中live
为直播推流路径,一般为live
,如果你的推流路径非live,则按需填写
其中xxx.livepush.myqcloud.com
为阶段一步骤5第8点所绑定的推流域名
4、点击【添加声明】,点击【下一步】填写策略名称为policygen-scf-livestat
点击【完成】
5、点击左侧导航中的【角色】、点击【新建角色】、选择【腾讯云产品服务】
6、进入新建自定义角色流程
支持角色的服务中,勾选云直播(live),云函数(scf),点击【下一步】
选择策略,搜索刚刚创建的策略policygen-scf-livestat
,勾选并点击【下一步】
角色名称按需填写:scf-livestat,点击【完成】
步骤5:完成SCF云函数的代码编写
1、登录 云函数控制台,单击左侧导航栏中的【函数服务】。
2、选择刚刚创建的云函数livestat,点击函数名进入后,切换到函数配置选项卡,点击右侧编辑按钮;
3、勾选运行角色,选择刚刚创建的角色scf-livestat
4、在环境变量中,添加如下变量,然后点击保存
redisHost:172.16.0.44 #此处填写阶段一步骤2中你购买的redis内网IP
redisPort:6379 #此处填写阶段一步骤2中你购买的redis内网端口
redisPassword:***** #此处填写阶段一步骤2中购买的redis的登录密码
streamStateTimeout:120 #此值为流状态超时更新时间
appName:live #一般为live,如果你的推流路径非live,则按需填写
domainName:****.livepush.myqcloud.com #此处填写阶段一步骤5第8点所绑定的推流域名
5、勾选私有网络,选择刚刚购买的Redis所在的VPC和子网
6、下载代码附件到本地
7、切换到函数代码选项卡,选择提交方法为“本地上传zip包”,选择刚刚下载的附件,然后点击保存按钮。
自此,阶段二已经实现,可以通过云API网关所允许的方式发起HTTP请求验证
本文中API网关 livestat只勾选了内网访问,未开放外网调用
登录同一个子网的一台CVM,通过curl测试可验证服务可用性: