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