1 網(wǎng)易自己的Demo
? ? ? ? ? ? 首先是講講網(wǎng)易云在線教育這個(gè)demo ?
集成的話可以參考下demo(記得初始化),這個(gè)就不說(shuō)了 首先是注冊(cè) 網(wǎng)易云的demo是用的自己封裝的 網(wǎng)絡(luò)請(qǐng)求用的是Executor寫(xiě)的 這個(gè)不是很懂久不介紹了
可以看到請(qǐng)求頭是三個(gè)參數(shù) 請(qǐng)求體是用戶名和昵稱和密碼拼湊成字符串上傳上去(這個(gè)用的是網(wǎng)易云自己的后臺(tái)服務(wù)器) 然后定義了兩個(gè)接口?
onFailed ?onSuccess把成功或者失敗后的message來(lái)回調(diào)
如果發(fā)生錯(cuò)誤的話可以去網(wǎng)易開(kāi)發(fā)文檔參考下code對(duì)于的具體錯(cuò)誤(Server)
然后開(kāi)始登陸 我們可以看到密碼是通過(guò)MD5加密的 通過(guò)得到AuthService服務(wù)登陸 對(duì)應(yīng)得清單文件服務(wù)要開(kāi)啟?
登陸以后的話開(kāi)始創(chuàng)建房間怎诫, 這個(gè)的話比較有意思的是網(wǎng)絡(luò)請(qǐng)求是對(duì)應(yīng)死的這個(gè)demo的appkey別的一律是顯示配對(duì)appkey錯(cuò)誤.如果請(qǐng)求成功的話瘾晃,會(huì)返回一個(gè)roomID,并且房主會(huì)默認(rèn)加入這個(gè)房間(自己集成的時(shí)候是需要手動(dòng)加入的)
然后就是所謂的ChatRoomActivity 但是真正的頁(yè)面邏輯是在ChatRoomFragment里面 可以看到是通過(guò)拿到ChatRoomService這個(gè)服務(wù)來(lái)拿到對(duì)應(yīng)進(jìn)入這個(gè)房間的roomId和url(這個(gè)房間推拉流的地址),但是我自己集成的時(shí)候這個(gè)是一直出問(wèn)題的具體原因在哪不知道
繼續(xù)流程走下去可以看到是初始化了ChatRoomFragment這個(gè)碎片
然后就開(kāi)始視頻的一些配置 我們可以看到j(luò)oinRoom是需要4個(gè)參數(shù) 第一個(gè)是roomId(創(chuàng)建生成 也可以搜索進(jìn)去)幻妓,第二個(gè)參數(shù)AVChatType
可以是VIDEO和AUDIO 第三個(gè)是AVChatOptionalConfig可以設(shè)置setLiveUrl(shareUrl)設(shè)置直播流地址(房主設(shè)置) enableLive(true);是否允許互動(dòng)直播蹦误。
enableAudienceRole(false);多人通話是否觀眾角色進(jìn)入劫拢。這個(gè)方法很關(guān)鍵 只能房主設(shè)置false 自身是觀眾的時(shí)候設(shè)置true要不然不能打開(kāi)Live
還有些設(shè)置視頻的幀率 還有視頻清晰度等等;Demo里面內(nèi)部封裝了權(quán)限管理寫(xiě)的蠻好用的强胰,畫(huà)布用的是AVChatVideoRender對(duì)象動(dòng)態(tài)加載到布局上面
AVChatManager.getInstance().observeAVChatState(this,true);通過(guò)注冊(cè)這個(gè)觀察者在對(duì)應(yīng)的onCallEstablished完成畫(huà)布的渲染
AVChatManager.getInstance().setupVideoRender(s,masterRender,false,mode); 第一個(gè)參數(shù)是url 第二個(gè)是畫(huà)布對(duì)象 第三個(gè)是繪制是否鏡像 第四個(gè)是直播的模式舱沧,這樣就可以把開(kāi)始視頻了。Demo里面的話自己寫(xiě)了一套權(quán)限管理 看起來(lái)還是很麻煩 ?這里也只是簡(jiǎn)單的說(shuō)了下demo 有興趣的可以自己去看看
2 自己集成的注意點(diǎn)
1 首先就是注冊(cè)了 首先用網(wǎng)易云的demo是完全不能注冊(cè)的除非用它的key 而且表單頭和請(qǐng)求體完全和Dmeo是不一樣的 如下所示
2 然后我們打開(kāi)開(kāi)發(fā)文檔打開(kāi)Server 發(fā)現(xiàn)請(qǐng)求頭和請(qǐng)求體所需要的參數(shù)如下所示
3 CreateRoom的時(shí)候需要房主在加入這個(gè)房間(Demo是不一樣的浪費(fèi)好久時(shí)間尷尬)
4 我們可以通過(guò)關(guān)閉上傳視頻流來(lái)打到只開(kāi)啟語(yǔ)音房的功能 startLive這個(gè)是要開(kāi)啟的要不然沒(méi)有聲音
5 在onDestroy的時(shí)候記得離開(kāi)這個(gè)房間 要不然下次是不能再次進(jìn)去這個(gè)房間的
6 AVChatManager.getInstance().enableAudienceRole(true); 這個(gè)設(shè)置為false的時(shí)候看不到別的觀眾
7 最好不用AVChatVideoRender作為布局 因?yàn)橐袚Q成別的視頻流的時(shí)候很難操作偶洋,最好是動(dòng)態(tài)加載上去
8 在沒(méi)有登錄的時(shí)候調(diào)用AVChatManager.getInstance().observeAVChatState(this, register)的時(shí)候會(huì)出現(xiàn)用戶沒(méi)有開(kāi)始直播的權(quán)限請(qǐng)求;
9 如果app本身是帶有背景音樂(lè)的話 會(huì)直接被網(wǎng)易云的sdk把音樂(lè)關(guān)閉 目前沒(méi)什么好的解決辦法只能通過(guò)伴音
10 設(shè)置播放遠(yuǎn)程用戶的視頻和本地用戶的視頻的時(shí)候盡量try catch