移动直播连麦常见问题(FAQ)


移动直播 Demo 的直播体验室登录失败

发布时间:2018年7月10日 更新时间:2018年7月10日 贡献者:chaoli

根据使用情况:

  • 使用腾讯云 Demo 只有在 10:00 ~ 22:00 才可用。
  • 使用腾讯云/自建 roomService,请确保能正常获取到登录信息,完整的登录信息如下所示(字段一致,以实际内容为准)。
    {"userID":"user_0b3c0713_73d4","sdkAppID":1400080451,"accType":"24565","userSig":"eJxtjVtvgjAAhf9LX1220ouUJT4oU0Oi7gJM40uDtMy6gbS2KFn238cce9vr*c75zidIFvFtVtdK8MxybAS4Bx6BEDJIqAdufnmeH11luW1r2XFE6JD2SAlZWVUoaTrgTtJwuMM59D3MfSxI3zqJd349*c9uVflj9ShiBAcBRn0uL7UykmeFvcoRDVC3-DOqty5bTp-D6GG*Z0-b*UbCJl2U8e7VvaCUuX3YTsYlkcfm8PjBjNUzp8dqUul1Oqz0YTpIrK*aFq-OqyJalmFWbe-iWRJvBhFc0yTS59EIfH0D2cZWy__"}
    
  • 使用腾讯云 roomService,登录信息由开发者的业务服务器下发,如何生成 userSig 请参考文档派发UserSig(IM云通讯)
  • 使用自建 roomService 请确保 config.js 的参数都配置对了,可使用 https://开发者的业务服务器地址/weapp/utils/check_config 接口校验,返回 {"result":"检查正确"} 代表正常。

登录信息获取不到/im登录失败/小程序双人音视频获取推流地址是null?

发布时间:2018年7月10日 更新时间:2018年7月10日 贡献者:chaoli

都是没有正确获取到登录信息导致的。

  • 使用腾讯云 Demo 只有在 10:00 ~ 22:00 才可用。
  • 使用腾讯云 roomService,登录信息由客户业务服务器下发,url和接口名称都是客户自定义的,终端与后台要对齐。腾讯提供三种签发登录信息的源码PHP&JAVA&Node.js版本
  • 使用自建 roomService ,访问url修改成客户业务服务器url。腾讯提供两种roomService的源码。 JAVANode.js

[注意] demo中获取登录信息的请求都是get请求,可直接在浏览器中验证。客户采用方案二自定义接口时,如果采用post请求,要修改demo中的请求方式(小程序中遇到的比较多)。


roomtool是什么?为什么我用了你们的roomservice,还需要自己配置roomtool,每次换了im账户都需要重新配置roomtool吗?

发布时间:2018年7月10日 更新时间:2018年7月10日 贡献者:chaoli

是的,每次换了im账户都需要重新配置roomtool。

roomtool是个配置工具,基于Node.js的,用于配置客户的直播、im信息到腾讯云roomService后台,需要在使用前安装Node.js。

当客户使用腾讯云roomService时,就需要此操作。因为腾讯研发团队提供的roomService是个开源组件,config.js的配置文件里面没有客户直播控制台的各项参数,需要用roomtool工具将客户直播参数配置上去,roomservice才能识别客户的直播和im的云服务。

[注意]roomService业务服务器相对直播服务/云通信服务而言,好比登录的三方鉴权模式,登录的最终校验是云服务上完成的,而“三方服务器”roomService要想生成加密的userSig并进行本地校验,就需要云通信应用的公钥私钥这些敏感信息,roomService开源组件不可能包含这些敏感信息,也没有做成从客户开通的直播/云通信服务中自动获取,所以就需要手动添加公钥私钥到roomService的config.js文件中去。roomtool就是这样一个配置工具,参考roomtool文档,把直播/云通信服务的各项参数配置到roomService。roomtool


登录rtcRoom返回{code = 0, data={}}?

发布时间:2018年9月25日 更新时间:2018年9月25日 贡献者:chaoli

返回{code = 0, data={}}代表访问地址是通的,但是访问的接口不存在,检查一下访问的url里面是不是有拼接错误。

常见的有:把rul中的rtcRoom换成double_room/multi_room。

实时通话方案叫rtcRoom,分为双人视频通话和多人视频会议场景,这两个场景对应的接口名称就是double_room和multi_room。

http://youRoomserviceID/weapp/double_room/login?accountType=9527&sdkAppID=1400119527&userSig=eJxNjVtrwjAYhv9Lbx1bDiZ1Ay*qk65aJ8V1hTEIoUnshzYpbSobY--dUpTt9nnew0-wlu7vZVm63nrhvxsdPAUouBsxKG09GNDtAK9MNg0oIb2grfoX7dRRjGpgeIoQxpSE-Cr1VwOtFtL4cQkzxghCt*pZtx04OwiCMMOEIvQnPdR6rNCQ4fBxNr39wWHA21W2TF76MOk3GxNv*30bml09MROOdC5zYjh-RudllzYur2p7imCxpnZR2HUZ1zz7OJJqp95j7d2scKcySjLARRrB50O16l4P83nwewEXolXf&userID=10769

roomservice中,房间和群组是什么关系?

发布时间:2018年11月9日 更新时间:2018年11月9日 贡献者:chaoli

移动直播sdk、即liteAVSDK,最基本的能力是:推流、拉流。

推流:是指将音视频数据采集编码之后,推送到您指定的视频云平台上。组件是LivePusher。

拉流:是从云服务器上面获取到音视频数据,在本地渲染播放。组件是LivePlayer。

可见,移动直播sdk是没有提供房间管理的功能的,这部分由客户自己完成。腾讯云研发团队提供了房间管理的开源代码,即后台roomservice、终端liveRoom/rtcRoom。

roomservice中引入了云通信SDK的群组、消息功能。

房间与群组的关系:终端createRoom请求到后台,后台创建roomid(只是一个字符串)、同时调用云通信restAPI创建im群组,roomid字符串与groupid字符串相同,这就是我们说的真正的房间。

所有人进入直播间,都要加入群组:调用joinGroup加入groupid。大小主播要开始推流了,要加入到roomid:调用addPusher加入roomid。

所以:房间可以理解成直播间,包括roomid和groupid,groupid里面的是直播间里的所有人,roomid里面的都是推流者。


创建房间接口doCreateRoom调用成功,但是查询房间接口getRoomList查询不到房间的信息

发布时间:2018年7月3日 更新时间:2018年7月3日 贡献者:chaoli

参考 Demo 按顺序调用doCreateRoom()->addPusher()->startHeartbeat()时才会激活房间,只调用doCreateRoom()的话房间并未激活,因此会查询不到。

[注意]roomService 后台逻辑: 客户端调用doCreateRoom()接口请求到后台,后台调用 restAPI 创建 IM 群组,把 IM 群 ID 返回给客户端;当客户端调用addPusher()加入 IM 群组时,激活房间。startHeartbeat()用于进程检测机制。

doCreateRoom(roomID, roomInfo, new BaseRoom.CreateRoomCallback() {
                                @Override
                                public void onError(int errCode, String errInfo) {
                                    callback.onError(errCode, errInfo);
                                }

                                @Override
                                public void onSuccess(final String newRoomID) {

                                    //5.请求CGI:add_pusher,加入房间
                                    addPusher(newRoomID, pushURL, new AddPusherCallback() {
                                        @Override
                                        public void onError(int errCode, String errInfo) {
                                            callback.onError(errCode, errInfo);
                                        }

                                        @Override
                                        public void onSuccess() {
                                            mCurrRoomID = newRoomID;

                                            //6.调用IM的joinGroup,加入群组
                                            jionGroup(newRoomID, new JoinGroupCallback() {
                                                @Override
                                                public void onError(int errCode, String errInfo) {
                                                    callback.onError(errCode, errInfo);
                                                }

                                                @Override
                                                public void onSuccess() {
                                                    mHeartBeatThread.startHeartbeat(); //启动心跳
                                                    callback.onSuccess(newRoomID);
                                                }
                                            });
                                        }
                                    });
                                }
                            });

使用liveRoom/rtcRoom开启直播时,报“房间已存在”错误?

发布时间:2018年8月23日 更新时间:2018年8月23日 贡献者:chaoli

创建房间api见上doCreateRoom(),会传入roomId到roomService后台,后台将roomId作为groupId创建im群组。

默认roomId传入空字符串“”,后台会生成一段随机数作为roomId和groupId。

当客户指定roomId创建群组时,有可能会遇到“房间已存在错误”。原因:已开启的groupId没有按正常流程关闭,如客户前期调试拆分调用接口,导致关闭直播间时关闭了roomId而没有关闭对应的groupId。云通信控制台还保存有这个群组,在控制台手动解散群组就可以解决。

[注意]不建议客户使用同一个roomId反复创建房间,容易出现消息收不到的问题:云通信的同一个groupId反复解散创建,可能会触发去重,需要在收到解散群组的通知的时候,通过 deleteLocalMsgs 把对应群组会话的本地消息删除了。房间的描述信息,可以通过roomInfo添加。


房间在什么条件下会关闭,可以通过哪个接口关闭?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:chaoli

房间关闭的条件:

  • 主播主动离开房间时,关闭房间
  • 主播心跳断开 20s,关闭房间(判断机制是基于 roomService 的后台逻辑,开发者可自行修改)
  • 调用关闭房间的接口destroyRoom

[注意]前两个条件,是roomservice后台的默认触发条件,客户如果没有开启心跳,20S后业务后台会关闭房间。所以要修改前两个条件,请修改后台代码。第三个条件是对外暴露的接口,因为有前两个条件的存在,覆盖了大部分场景,所以我们终端demo中没有调用destroyRoom


进房出房报Token过期,鉴权失败?

发布时间:2018年7月3日 更新时间:2018年7月3日 贡献者:chaoli

  • liveRoom登录成功后,后台会返回token,这个token是与uerid对应的,之后调用liveRoom的每一个接口,都要带入token。
  • 当客户用同一个userid在其他终端重新登录了,后台会根据userid生成新的token,但是原终端上没有收到踢重消息,也没有更新token,当调用接口时,带入的是老token,自然访问不成功,报token过期。
{"code":0,"message":"请求成功","token":"a654920f44360d70bb239c22f183d3ce*5373c689*Mjc2NTg=","userID":"21907019"}

POST https://room.qcloud.com/weapp/live_room/get_room_list?userID=21907019&token=a654920f44360d70bb239c22f183d3ce*5373c689*Mjc2NTg= http/1.1

连麦中观众列表该怎么做,roomService 提供的三个接口可用吗?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:chaoli

不能直接使用 roomService 提供的观众管理接口:addAudiencedelAudiencegetAudiences

原因:这几个接口设计之初只是为了 Demo 的界面观众展示,出于方便数据直接存放在内存里,最多存储 30 个人(可修改)。

开发者的直播 APP 在处理观众管理时通常会有一些业务实现,如头部观众优先显示,而且实际线上运行时存储量大,不推荐使用内存存储。

建议开发者自行搭建数据库存储观众信息,使用 roomid 与直播间进行关联,观众列表可以参考腾讯视频云自由开播后台服务进行实现。


移动直播连麦时,大小画面的位置可变吗?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:chaoli

可变。

主播端/连麦端的大小画面是在客户端本地进行渲染叠加的,UI 上的位置显示开发者可自行改变。

普通观众端看到的大小画面是云端混流后的画面,可以通过修改云端混流时的大小画面参数来进行配置,具体参数请参考文档云端混流进行配置。


连麦时有回音?

发布时间:2018年7月10日 更新时间:2018年9月25日 贡献者:chaoli

可以开启回音消除。

setVideoQuality设置参数:大主播推流VIDEO_QUALITY_LINKMIC_MAIN_PUBLISHER、小主播推流VIDEO_QUALITY_LINKMIC_MAIN_PUBLISHER。内部自动实现回音消除。

enableAEC(true)是回音消除接口,如果连麦没有采用上面两种模式,就需要手动调用这个接口。

[注意]回音消除要配对使用,假如客户用了三方推流设备连麦,回音消除有可能无效。

[注意]建议连麦时,两台设备保持3米以上。开启了回音消除,会过滤掉手机喇叭播放出的声音。但是两台手机离的过近,两端的麦克风同时录入了两端的声音,这种回音会伴随有蜂鸣声,只能从使用场景上规避。


纯音频连麦,要怎么做?

发布时间:2018年7月10日 更新时间:2018年7月10日 贡献者:chaoli

  • 把音视频推流换成纯音频推流
  • 云端混流换成纯音频混流,混流的包体如下所示:
  • 可在liveroom方案上修改,改动量不大。也可自研。

    [注意] 开发者如果启动纯音频推流,但是通过 rtmp/flv/hls 方式的播放地址拉不到流,请提工单联系我们。

     {
        "timestamp":int(time.time()),           # UNIX时间戳,即从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数
        "eventId":int(time.time()),             # 取随机数即可,标识一次网络请求
        "interface":
        {
            "interfaceName":"Mix_StreamV2",        # 固定取值"Mix_StreamV2"
            "para":
            {
                "app_id": 9527,                # 填写直播APPID
                "interface": "mix_streamv2.start_mix_stream_advanced",  # 固定取值
                "mix_stream_session_id" : "5000_enson",                # 填大主播的流ID
                "output_stream_id": "5000_enson11",                    # 填大主播的流ID
                "output_stream_type": 0,                               # 填输出流类型
                "input_stream_list":
                [
                    # 大主播:背景画面
                    {
                        "input_stream_id":"5000_enson11",    # 流ID
                        "layout_params":
                        {   
                            "image_layer": 1                # 图层标识号:大主播填 1 ; 
                            "input_type": 4                 # 标记混入纯音频
                        }   
                    },
                    # 小主播按照顺序填写2、3、4、5、6
                    # 小主播1
                    {
                        "input_stream_id":"5000_enson22",    # 流ID
                        "layout_params":
                        {   
                            "image_layer": 2,               # 图层标识号
                            "input_type": 4                 # 标记混入纯音频   
                        }   
                     }, 
                ]
            }
        }
    }

连麦可以不用 roomService 吗,自研需要哪些技术?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:chaoli

开发者可以不使用 roomService 自行搭建房间管理后台服务,基础技术见如何实现连麦


我公司已经集成聊天功能,现在想加入视频聊天,实现ios、安卓、小程序互通,可以引用roomservice组件吗?

发布时间:2018年7月10日 更新时间:2018年7月10日 贡献者:chaoli

不推荐

  • 直播类app都分:数据通道、信令通道。移动直播sdk只提供了音视频的数据通道,即上行推流和下行拉流;信令通道用的是三方消息系统。
  • roomservice开源组件中的信令通道用的是云通信精简版sdk
  • 客户可以自研,仿照liveroom/roomservice中消息系统的耦合方式去做。

    [注意]客户之前用的如果是云通信V2、v3版本开发的,也不推荐使用roomservice开源组件,与云通信精简版sdk相比,有部分接口变动了。


使用roomserver方案二部署成功,推流失败?

发布时间:2019年1月3日 更新时间:2019年1月3日 贡献者:dgaohuang

  • 确认一下是否开启了自定义推流域名,把原有的数字域名禁用?(启用原推流域名)
  • 确认一下是否该直播流地址给禁用,可以调用一下api启用推流,或者在控制台开启推流

    [注意]目前域名备案,可以使用自己的域名,因原有的拉流域名已被回收,推流不回收,roomserver默认推流还是原域名地址,播放地址是会通过roomserver识别后台cname下的拉流域名进行替换,需要使用自己域名地址推流的,建议用方案三,修改一下域名拼接 。


results matching ""

    No results matching ""