集成互动直播时遇到的问题及解决方法

发布时间: 2024-06-10 18:17:41 作者: 低调看直播 阅读时间:2分钟

1、主播直播时,iOS及iOS设备上看不到画面,但是可以听到声音。

iOS 上屏幕是黑的nba风云直播有声音不视屏,客户端也是黑的,但客户端会显示一个小型的互动直播屏幕。当与另一个人连接时,观看者会看到对方的屏幕。

原因在主播端,可能是创建房间用的ID和注册IM时用的ID不一样,因为我从1.7升级过来的,也就是原来手机号,但是用手机号登录时,会添加86-xxxx,由于我注册时不需要用户填写86,所以设置里没有86,但是腾讯云后台注册的账号有86,所以登录IM时手动添加了86,但是里没有86前缀,创建的房间里也没有86。

在观看者端得到的却是86,这就导致了不一致,从而引发上述问题。

解决方法:检查观众和主播获取的信息以及IM上注册的信息是否一致。

2、主播直播时,iOS端可以看到画面,但是其他端看不到画面。

该问题主要由于查看器集成导致,需要检查调用流程。

这里写图片描述

问题可能出在这里请求远程用户的视频数据:

/**
     * AVSDK 请求主播数据
     *
     * @param identifiers 主播ID
     */
    public void requestViewList(ArrayList identifiers) {
        if (identifiers.size() == 0) return;
     //   for(int j=0;j
     //       Log.i("AAAA", "请求主播数据 for  j="+j+",identifiers=" + identifiers.get(j));
     //   }
        AVEndpoint endpoint = ((AVRoomMulti) QavsdkApplication.getInstance().getQavsdkControl().getAVContext().getRoom()).getEndpointById(identifiers.get(0));
        Log.d("AAAA", "requestViewList hostIdentifier " + identifiers + " endpoint " + endpoint);
        if (endpoint != null) {
            ArrayList alreadyIds = QavsdkApplication.getInstance().getQavsdkControl().getRemoteVideoIds();//已经存在的IDs
            for (String id : identifiers) {//把新加入的添加到后面
                alreadyIds.add(id);
            }
            int viewindex = 0;
            Log.i("AAAA", "requestViewList alreadyIds size: " + alreadyIds.size());
            for (String id : alreadyIds) {//一并请求
                if (viewindex >= 4) break;
                AVView view = new AVView();
                view.videoSrcType = AVView.VIDEO_SRC_TYPE_CAMERA;
                view.viewSizeType = AVView.VIEW_SIZE_TYPE_BIG;
                //界面数
                mRequestViewList[viewindex] = view;
                mRequestIdentifierList[viewindex] = id;
                viewindex++;
                Log.i("AAAA", "requestViewList 一并请求 id: " + id);
            }
            int ret = AVEndpoint.requestViewList(mRequestIdentifierList, mRequestViewList, alreadyIds.size(), mRequestViewListCompleteCallback);
            Log.i("AAAA", "requestViewList ret : " + ret+",viewindex="+viewindex);
        } else {
            Toast.makeText(mContext, "Wrong Room!!!! Live maybe close already!", Toast.LENGTH_SHORT).show();
        }
    }
private AVEndpoint.RequestViewListCompleteCallback mRequestViewListCompleteCallback = new AVEndpoint.RequestViewListCompleteCallback() {
        protected void OnComplete(String identifierList[], AVView viewList[], int count, int result) {
            Log.i("AAAA", "请求直播数据完成 identifierList[]="+identifierList.length+",viewList="+viewList.length+",count="+count+",result="+count);
            // 为什么会有数据
//            for (String id : identifierList) {
//
//                Log.i("AAAA", "请求直播数据完成  mLiveView.showVideoView REMOTE="+REMOTE+",id="+id);
//                mLiveView.showVideoView(REMOTE, id);
//            }
            // TODO
            Log.d(TAG, "RequestViewListCompleteCallback.OnComplete");
        }
    };

和上面demo的展示对比一下,没有调用for循环,这里返回的数组长度不为0,调用for的结果是看到的是连接麦克风的人的画面。

解释:我请求的参数和demo中的参数一致,但是回调的返回值不一样,API文档中没有详细的解释,需要进一步研究。

在1.7版本中,回调函数没有做任何处理。

我现在的解决办法是把for循环里面的代码注释掉nba风云直播有声音不视屏nba风云直播有声音不视屏,现在观众可以正常观看和连接了,还是​​要找到根本原因。

标签: 主播 直播 集成 画面 原因