使用腾讯云直播开发直播功能

2020-10-19

  最近公司开发app直播功能我是后端使用java开发经过考虑选择使用腾讯的云直播功能主要是考虑到腾讯在这方面可以说是很有实力的了。然后就是选择产品的问题腾讯提供了几种直播的解决方案最完整的是互动直播这是一套比较完善的直播解决方案但是费用比较贵所以。。。我们选择了云直播和云通信(IM)组合主要是因为本来app中就集成云通信也就是云直播用来做视频交互云通信用来做弹幕和直播间内的业务交互。不要问我为啥不自己搭建直播服务没技术、更没实力光带宽就能搞死人好了废线c;开始记录。

  在考虑自己的需求是不是合适腾讯直播的时候可以先注册一个腾讯云账号在腾讯云产品中选择云直播开通服务并进入云直播产品控制台新用户免费赠送20G的测试流量可以让你测试是否适合使用好不好用。

  创建拉流(播放视频流)和推流(主播直播视频流)域名这些在腾讯云直播的文档里面都有我就不做搬运工了文档链接

  2019/09/05补如果直播需要海外直播的线c;其实很简单腾讯云直播有海外加速节点如果是主播在海外直播用户在国内看那么只需要你推流地址CNAME对应的域名是国内已经备案过的域名那么默认就可以在国外直播如果你没有已经备案过的域名那么在你创建账号的时候腾讯云会给你自动生成一个推流域名你可以直接使用那个域名推流那个默认开着海外节点的如果是国内开播国外看播那不存在啥问题的因为国外本来就可以自由访问国内网络文档贴一下

  创建好两个地址之后可以先去云直播控制台的辅助工具中找地址生成器根据你创建的推流拉流地址测试着创建两个地址熟悉一下这个地址的规则AppName其实就是区分你这个地址属于你的哪个app或者根据你的具体需求可以是不同的app也可以是不同的业务区分StreamName就是相当于你的直播间号(直播间id)两个都生成一下之后就会发现推流和拉流地址其实是对应的具体大家自己试试哈

  因为我们的业务是手机直播手机看播所以推流自然就是手机推流这里需要前端同学(ios?安卓?)配合在手机端使用腾讯云直播文档中提供的SDK把生成的拉流和推流地址进行测试具体我就不懂了哈我是个彩笔后端前提说一下如果是手机端直播推流只能是用rtmp格式拉流的线a;FLV格式每种格式的优缺点腾讯云文档中说的很清楚了大家自己去看哈我们选择FLV是因为FLV综合来说延迟较低、适用性高。调试推流和拉流的时候有一个小程序可以用来调试腾讯云视频

  这些都准备好之后就是直播的问题了这里要看你们的直播需求是怎么样的我这里举个大众化的例子就是每个用户都可以有自己的直播间当你有推流和拉流域名之后你可以定一个AppName这个AppName就是一个标识然后你需要建一张数据库表LiveRoom(名字随意)这个表的主键就可以用来当作房间号(你也可以使用其他字段)这个房间号其实就是拼接到推流和拉流地址里面的StreamName这个StreamName不需要手动去腾讯云注册直接拼接在地址中使用就好注意不同直播间的StreamName不能相同哈如果你的推流地址中的StreamName相同那么只有第一个开始推流的是有效的也就是说同样的推流地址谁先推谁的有效拉流只能拉到第一个推流的那个。

  如果以上都成功了那么恭喜你视频交互是可以使用了其他的就是完善细节问题了那么直播肯定要有弹幕啊所以就需要云直播和云通信配合使用了云通信具体不是我搞的我就不在这里多说了反正类似qq聊天群一个直播间可以对应一个聊天室群把聊天室和直播间绑定主播开播之后视频推流开始同时IM接入主播就是这个聊天室群的群主(或者管理员)可以禁言所有用户也可以全体禁言同时直播间中的所有交互都可以使用IM来做交互比如直播间水友聊天、用户进入直播间、用户在直播间购买了某些商品等等都可以通过前后端配合定义各种消息类型(json格式的等等)如果是普通的直播间聊天那么直接前端给IM服务发消息不用经过我们自己的app减少交互带来的服务器压力客户端收到消息直接显示为弹幕。但是比如某用户进入直播间这种就可以通过服务端给IM服务发一条消息这个消息的内容就是和前端定好的消息类型比如消息是json格式其中有个type表示这个消息是干嘛用的比如某用户进入直播间、某用户在直播间购买了某个商品、某用户关注了直播间等等。这样基本上直播就正常使用了视频活动和聊天功能都得到解决。

  以上基本完成了一个直播功能但是一般我们肯定有直播列表直播记录等等需要我们去分析直播数据直播记录和直播数据分析腾讯云直播控制台都可以查询如果要做也可以调用api使用由于这个比较复杂就不说了需要我们自己根据云直播提供的api去使用。下面就说一个基本上大家都有的功能把直播间列表(仅显示在直播的直播间)

  直播间列表这个功能。。。说实话我开始走了很多弯路因为直播间是我们自己本地库的状态肯定也是维护在我们自己库里面的但是主播端呢。。。贼麻烦各种网络不好啊、app奔溃啊、app卡死啊、手机没电啊、手机爆炸。。。可能就这些把主要是主播端的各种异常情况导致用户看播的时候经常出问题。一开始的时候我是想接腾讯云的直播推流拉流回调然后根据这个回调去调整我们自己库里面的直播间状态然后我就奔溃了。。。这什么玩意嘛这个回调一点规律没有对于主播端异常断网、app奔溃等很不好用尤其是那个主播端如果网络不好经常就会出现我们数据库里直播间状态和实际情况不符所以我果断放弃使用这个玩意变更直播间状态这个只用来记录直播的一些日志比如谁在什么时候推流什么时候出现了断流是主播主动断流还是异常情况等等说个题外线c;在做这个的时候有考虑过心跳方式做这个但是其实直播的客户端SDK其实和腾讯云是有心跳机制的所以没必要自己在做费事。

  上面说了一堆废话(我踩过的坑)接下来说一下怎么让直播间列表比较准确的显示出确实是在直播的直播间我们可以看腾讯云直播的api文档中有一个接口这个接口可以查询所有正在直播的流哎这个接口不就是我们所有正在直播的直播间嘛。。。所以方案就来了写个定时任务一分钟请求一波这个接口获取正在直播中的流把这个接口里面获取到的正在直播中的流然后根据腾讯云中提供的正在直播中流和我们库里面的正在直播状态的直播间做对比把腾讯中正在直播的而我们库里没有在播的找出来改为正在直播状态把我们库里在播的而腾讯云接口返回中没有的找出来改为结束直播状态。通过我的实践发现这个接口的数据比较实时而且这个接口调用频率限制是一秒500次完全够我们定时任务来处理这个。这样可以说是很完美的解决了直播列表中直播间状态的问题而且这个接口有分页功能也不用担心一次请求数据过大的问题。

  以上基本描述完了一个粗糙的直播需求再说几个需要注意的点

  1.推流和拉流域名仅仅是个域名不存在对应关系只要是你这个腾讯云账号的推流和拉流域名如果你的房间号(StreamName)一样就算你一个是测试环境的推流地址和测试的appName你照样有可能在正式环境的那个StreamName下拉到测试环境的推流视频我就遇到过这个坑我们测试环境有个直播间号是100005正式环境也有一个同样的结果我们测试环境开播测试正式环境用户也在开播结果拉流的时候看到了我们测试环境的直播画面还好我们都是老实人。。。。

  2.断流回调不可靠最好只用这个记录直播间的直播记录好用这个记录来查问题这个回调配置在云直播控制台的功能模板-回调配置这个配置新增的时候记着一个点不要只配一个回调接口比如你想配断流回调那你得推流和断流回调都配这两个回调用同一个接口就好回调的参数可以区分是断流还是推流推流回调比较及时断流回调比较坑不要照这个规律

  3.腾讯云直播控制台功能还算可以前端很多数据都可以在控制台查看比如某个直播间推流拉流相关数据如帧数、流量、并发连接等等。

  2019/09/05补最后再补腾讯云提供的一个主播端查看推流网络情况的检测地址这个的使用方法是打开网址填写你们的推流域名然后点击提交检测结果这个地址如果给主播用你可以直接把你自己先检测一遍然后他的链接就会变成你们推流地址的链接然后直接把新的链接给你们的主播去检测网络我们直播上线c;很多都是主播端网络贼差然后整天说这个不好那个不好。。。无语

  2019/11/18补前几天写了一篇连麦的文章整理的还算详细有需要的同学可以看超详细的《使用腾讯云移动直播开发连麦》

  直播转码就是看播端可以调标清、高清、原画 这种就是转码就是看播视频的码率问题吧

  如果要配置转码首先进入腾讯云直播控制台在左边菜单栏进入功能模版-转码配置进去之后根据自己需要配置转码模版模板名称 配置成简写的英文方便在拉流地址后面拼接配置好模版之后点击云直播控制台的域名管理 选择你们的拉流域名点进去之后在上面有个模版配置点击去在右上角点击编辑在弹出的窗口中选择你配置的转码模版并进行配置注意这里配置之后会在你的域名里面延时生效。

  这里配置完成之后相当于你的腾讯云直播服务里面已经有了你配置的转码模版然后在你生成拉流地址的时候把上面配置的 模板名称 拼接到拉流地址后面拼接方式为播放地址_转码模板名称

  记录一下如果要保证直播效果和流畅度首先对于直播的流畅度体验他是依托于一个好的网络(好的上行速率)主播网络上传环境不好啥都没用其次就是在我们开发过程中可以在app端开播是通过后端接口返回主播开播时设置的各种参数比如

  以上参数仅供参考主要还是靠调试需要后端动态返回各项参数值app主播开播时根据效果调配同时开发人员和主播触达问题也需要靠客户端上报主播的异常手机异常信息进行分析(可以找腾讯云工单)这个事情需要尝试摸索出最适合的方案

  就说这点吧以后又想说的再补写了这么多感觉跟写作文一样。也不知道有没有人能看懂。。。

  ,之前没接触于是先去看了下主流第三方平台的SDK,想看下哪个平台的更好一些。本文没什么技术含量,仅仅是将相关官网的资料整理,做了一点对比,方便看到各平台优点。 首先看过各个平台

  ,下面为相关文档和程序URL规则:防盗链计算:小程序源码调试(推流):

  * * */ public class TencentYunVedioUtil { public static final String bizid = 54852; //推流防盗链的key public static final String push_key = cbdaq2bbfqewrb6a446213ba5db847...

  ,具体还有弹幕啊连麦啊聊天啊等等,我们后面再讲 我大致总结了下: 第一步:推流地址

  软件层出不穷。有的通过自己的推广宣传确实火了起来,比如:映客。 我之前也是在一家专门做视频

  的这个概念。后来离开这家公司,到现在的公司,做了一段时间,又有需要做视频

  一、 video.js 视频播放github:基础代码:script src=

  要考虑的东西太多了,根本不是一个人能够搞定的。 从采集编码传输到解码播放这个过程要处理的东西太多了:单就视频的采集来说就涉及两方面数据的采集:音频采集和图像采集,涉及到各种算法,这是一个很庞大的工作量。 音频采集 音频的采集过程主要通过设备将环境中的模拟信号采集成 PCM 编码的原始数据,然后编码压缩成MP3,AAC,HE-AAC,O...

  一. 原理: 主播:推流(推流地址) 观众:拉流(播放地址) 二.登陆官网 三.查看官方文档 四.复制代码 推流代码 package com.example.tengxunyun; import android.Manifest; import android.os.Build; import android.support.v7.app.A...

  从刚开始的简单学习HTML语言,到进入实验室跟着老师,学长学习Java,Android,这一年收获很多,这并不是说我的编程能力得到了多高的提升,而是我认为自己的思路变得和以前不一样了,学会了很多解决问题的实际技巧,明白了思路远远比答案更重要,虽然这个学期离开了实验室,很遗憾,但一年的经历让我在解决其他问题的时候同样受益匪浅。在这个时候写这篇博客也是给自己一个交代,还记得当时学习编程的目的就是要做一...

  java根据list中对象的属性找出list重复数据或去除list重复数据