我在集成互動直播的時候,只取了觀看直播相關的。其他的都沒有加到項目中,但是集成的過程中,遇到了 進入直播間的時候,能聽到主播的聲音,發送點贊和評論都是好的,就是看不到畫面。下面是我列出的遇到的情景
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 循環裏面的代碼。至此觀衆端能夠正常觀看和正常的連麥。還需研究找到根本的原因。