目標(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ā)
–通過(guò)超級(jí)節(jié)點(diǎn)(服務(wù)器)提供傳輸保證
–通過(guò)socket.io和服務(wù)器傳輸控制信息
–利用webrtc的p2p data channel傳遞節(jié)點(diǎn)間的控制信息
開發(fā)中主要是視頻的顯示問(wèn)題:
一開始使用了MediaStreamRecorder這個(gè)庫(kù)來(lái)錄制,但是播放就不太好控制,另外,這個(gè)庫(kù)如果設(shè)置間隔小于1000ms,就出問(wèn)題。? 所以后來(lái)參考 webrtc samples中的MediaRecorder來(lái)錄制,使用MediaSource Extension來(lái)播放。? 播放中總是報(bào)告有問(wèn)題,MediaSource播放第一段后就ended了,排除了數(shù)據(jù)、傳輸?shù)葐?wèn)題,最后覺(jué)得是關(guān)鍵幀的問(wè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中無(wú)可用數(shù)據(jù)(一般是播放到視頻末尾)時(shí)被觸發(fā)。我們一般需要在給video.src賦值之后,監(jiān)聽(tīng)sourceopen事件,以確保MediaSource和HTMLMediaElement已經(jīng)完成綁定,并在此之后才開始進(jìn)入數(shù)據(jù)處理流程。
下面這個(gè)說(shuō)的更清楚:
https://blog.csdn.net/Vikanill/article/details/99213067? 講解了使用mse要注意的事項(xiàng)
最后總算是做出來(lái)了,不過(guò)離實(shí)用還有很多事情要做。