腾讯云直播开发日记(三) 聊天室-直播转码-连麦混流

腾讯云直播开发日记(三)

直播的时候,用户还是需要和主播互动的,我们当前的互动就只有刷礼物,那没钱说礼物怎么搞? 不得让他们吹水? 所以我们需要做一个聊天室, 这个话自己也能做, 系统上线迫在眉睫,工作刻不容缓,所以我们一致决定使用最强能力

因为我们是先有的社交后有的直播, 所以直播和社交的并不是同一个厂商, 我们的IM相关是网易的, 但是开发思路都一样, 也给大家说一下.

IM应用场景介绍

因为就是tcp长连接, 所以基本功能大家都能想象出来, 例如常见的: 加好友, 群聊, 点对点聊天等等, 根据这些我们再进行相关扩展

单聊

点对点聊天,支持的消息类型包括文字、图片、语音、视频、地理位置、文件、通知、提示、智能对话机器人、自定义消息。同时提供离线消息、漫游消息、多端同步、云端历史记录、消息推送能力。像这个还是比较有意思的

群聊

建立一个群, 群里有不同角色, 大家一顿瞎聊, 查看群成员然后交友

聊天室

聊天室是一种比群组组织更加松散的形态,用户可以随意进出聊天室,一般来说也没有太固定的组织形态。典型的应用场景例如娱乐直播、教育直播内的多人聊天。 我们的直播 看来就需要这个了

直播接入聊天室

聊天室肯定要是需要标识符的, 我们需要将直播间和聊天室关联, 那么 进入直播间 = 进入聊天室 创建直播间 = 创建聊天室 关闭直播间 = 关闭聊天室 直播间聊天 = 聊天室聊天

我们可以在live_room增加一个im_room_id, 这样的话就可以完成吹水功能, 流程和大家简述一下:

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

再说一个场景: 例如斗鱼直播和虎牙直播, 冲的越多就对应等级越高, 进来还有出场动画, 那这个我们能不能利用我们讲的知识实现了呢? 博主就不细说了, 相信大家都明白了

IM基本就这么些, 看看文档结合业务开发应该是比较轻松的

直播转码

直播转码就是看播端可以调:标清、高清、原画 这种就是转码,就是看播视频的码率问题, 按分钟收费

文档地址:

https://cloud.tencent.com/document/product/267/20385
https://cloud.tencent.com/document/product/267/32834

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

这里配置完成之后,相当于你的腾讯云直播服务里面已经有了你配置的转码模版,然后在你生成拉流地址的时候,把上面配置的 模板名称 拼接到拉流地址后面,拼接方式为:播放地址_转码模板名称
比如你配置了一个高清模板,模版名称为:hd
原来的播放链接是:http://playxxx.com/live/123456.flv
转码后的播放链接是:http://playxxx.com/live/123456_hd.flv

这样基本就完成了看播转码

连麦\混流

我们经常看直播就会发现, 主播是可以和主播进行视频互动, 这个操作我们就叫做混流.

文档

如何实现连麦:https://cloud.tencent.com/document/product/267/8108
云端混流:https://cloud.tencent.com/document/product/267/8832
连麦混流方案:https://github.com/tencentyun/qcloud-documents/blob/master/product/%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1/%E7%A7%BB%E5%8A%A8%E7%9B%B4%E6%92%AD/to-del/%E8%BF%9E%E9%BA%A6-%E5%8D%87%E7%BA%A7%E6%96%B9%E6%A1%88(Android).md

如何实现多路混流

选择连麦方案

这个图应该很明确的说明了连麦混流的2个方式,混流其实就是把两个推流的画面混在一起,生成一个叠加的画面,然后用户就可以同时看到两个主播的直播, 需要购买连麦包

连麦

  • 客户端混流

支持的样式灵活,可以平滑的处理连麦画面切换, 需要获取两个推流地址, 然后操作, 服务端的话可以给客户端返回需要混流的流地址, 跟服务端没啥大关系

  • 服务端混流

服务端混流,其实就是拿到连麦的两个人的推流流id,然后调用混流的Http接口,腾讯云会把你传过去的参数解析,然后把两个流混成一个流,混好之后的视频流会输出到你指定的流的输出流上面,就实现了服务端混流。

我们选择了客户端混流, 客户端混流灵活, 对连麦异常断开处理比较友好, 博主只是个后端菜狗, 所以就没法描述更多客户端细节了

您的支持是对我最大的鼓励!

发表于: 作者:憧憬。
关注互联网以及分享全栈工作经验的原创个人博客和技术博客,热爱编程,极客精神
Github 新浪微博 SegmentFault 掘金专栏