騰訊雲互動直播集成有聲音,無畫面研究和解決

我在集成互動直播的時候,只取了觀看直播相關的。其他的都沒有加到項目中,但是集成的過程中,遇到了 進入直播間的時候,能聽到主播的聲音,發送點贊和評論都是好的,就是看不到畫面。下面是我列出的遇到的情景

1.主播開直播的時候,IOS 端和android 都看不到畫面,能聽到聲音

ios 直接是黑屏顯示,android 端也是黑屏顯示,但是 android 端回顯示 互動直播的小畫面。當和另一個人連麥的時候,觀衆端看到的直接是連麥人的畫面;

這個原因在主播端,有可能是主播創建的房間的hostId 和IM 註冊時候使用的ID 不一樣。因爲android 端,我是從1.7 升級過來的,hostId 即原來的手機號碼,但是手機號碼 使用的時候會加上 86-xxxx,由於我在註冊的時候,不需要用戶填寫 86,set hostId 是沒有86 的,但是騰訊雲後臺註冊的賬戶是有86 的,所以 在登陸IM的時候,手動添加了 86,但是 userInfo 裏面並沒有86 的前綴,但是創建房間的hostid 沒有86 。

在觀衆端 獲取到的hostId 是帶有 86 的,導致不一致,所以導致上述的問題,

解決方案:查看觀衆端 獲取到的hostid 和主播端的hostid ,以及註冊IM 的hostid ,保持一致。

2.主播開直播的時候,IOS 端看到畫面,android 端看不到畫面

這個問題:主要就是android 觀衆端集成時候的問題。需要查看下調用的流程

這裏寫圖片描述

其問題可能出來 請求遠端用戶的視頻數據這裏:

/**
     * AVSDK 請求主播數據
     *
     * @param identifiers 主播ID
     */
    public void requestViewList(ArrayList<String> identifiers) {
        if (identifiers.size() == 0) return;

     //   for(int j=0;j<identifiers.size();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<String> 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");
        }
    };

這裏寫圖片描述

mRequestViewListCompleteCallback 這裏對比demo 上面的顯示 沒有調用for 循環裏面的showView,而我這裏返回的數組的長度不爲0,調用for 的showView 導致看到是連麥人的畫面。

說明下:AVEndpoint.requestViewList 我請求的參數和demo 裏面是一樣的,但是回調的返回值卻不一樣,看api 文檔也沒有詳細的說明,待進一步研究

在1.7 版本中,回調函數沒有做任何處理。沒有那個for 循環的

我現階段的解決方案就是 註釋掉 for 循環裏面的代碼。至此觀衆端能夠正常觀看和正常的連麥。還需研究找到根本的原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章