目標(biāo): 多人實(shí)時(shí)互動(dòng)(多達(dá)數(shù)十到數(shù)百人)
?盡量減少服務(wù)器的資源(中心轉(zhuǎn)發(fā)式的10%以下)
?音視頻延遲控制在1s以內(nèi)
?純web、瀏覽器就可以聚會(huì)了
技術(shù): 應(yīng)用層組播
–利用webrtc的p2p data channel分發(fā)數(shù)據(jù)
(使用 simple-peer庫(kù))
–模糊分層千所、性能激勵(lì)的p2p組網(wǎng)分發(fā)
–通過超級(jí)節(jié)點(diǎn)(服務(wù)器)提供傳輸保證
–通過socket.io和服務(wù)器傳輸控制信息
–利用webrtc的p2p data channel傳遞節(jié)點(diǎn)間的控制信息
開發(fā)中主要是視頻的顯示問題:
一開始使用了MediaStreamRecorder這個(gè)庫(kù)來錄制宝穗,但是播放就不太好控制眠冈,另外洲尊,這個(gè)庫(kù)如果設(shè)置間隔小于1000ms晓锻,就出問題。? 所以后來參考 webrtc samples中的MediaRecorder來錄制肩祥,使用MediaSource Extension來播放。? 播放中總是報(bào)告有問題缩膝,MediaSource播放第一段后就ended了混狠,排除了數(shù)據(jù)、傳輸?shù)葐栴}疾层,最后覺得是關(guān)鍵幀的問題将饺。?
參考如下,兩個(gè)鏈接:
https://blog.csdn.net/camike/article/details/82797768
MediaSource對(duì)象上有三個(gè)主要事件痛黎, sourceopen予弧、sourceended、sourceclose湖饱。其中掖蛤,sourceopen事件是在給video.src賦值之后觸發(fā);sourceended事件是在用戶主動(dòng)調(diào)用終止或者視頻數(shù)據(jù)解析井厌、播放錯(cuò)誤時(shí)被觸發(fā)蚓庭;sourceclose事件是在SourceBuffer和MediaElement中無可用數(shù)據(jù)(一般是播放到視頻末尾)時(shí)被觸發(fā)。我們一般需要在給video.src賦值之后仅仆,監(jiān)聽sourceopen事件器赞,以確保MediaSource和HTMLMediaElement已經(jīng)完成綁定,并在此之后才開始進(jìn)入數(shù)據(jù)處理流程墓拜。
下面這個(gè)說的更清楚:
https://blog.csdn.net/Vikanill/article/details/99213067? 講解了使用mse要注意的事項(xiàng)
最后總算是做出來了港柜,不過離實(shí)用還有很多事情要做。