999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于WebSocket 技術與MSE 技術的實時音頻流播放實現

2022-11-12 10:21:16李紀濤
科學技術創新 2022年33期

李紀濤

(國家廣播電視總局無線電臺管理局,北京 100866)

1 WebSocket 技術

WebSocket 是HTML5 開始提供的一種在單個TCP 連接上進行全雙工通訊的協議,允許服務端主動向客戶端推送數據, 使得客戶端和服務器之間的數據交換變得更加簡單。在Websocket 技術出現之前,由于Http 固有的技術特點,只能由客戶端對服務端發起Http 請求,然后服務端返回最新的數據給客戶端,而不能由服務端主動發起對客戶端的連接請求及數據發送。為了實現推送技術,只能采用Ajax 輪詢的方式,這種方式有明顯的缺點,即瀏覽器需要不斷的向服務器發出請求,浪費系統資源、數據實時性差。而Websocket 的出現解決了以上的問題[1]。WebSocket 中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,并進行雙向數據傳輸。瀏覽器和服務器只需要做一個握手的動作,然后,瀏覽器和服務器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送[2]。MSE (Media Source Extensions),即媒體源擴展,可以理解為一種API,其提供了實現無插件且基于Web 的流媒體的功能。通過MSE,媒體串流能夠通過JavaScript 創建,并且可以使用HTML5 的

2 系統框架及工作流程

系統采用B/S 系統架構,后端能夠實時監聽WebSocket 請求及響應音頻數據,并根據要求將音頻字節流發送給前端,系統框架及工作流程見圖1。

圖1 系統框架及工作流程

(1) 首先服務端啟動后開始進行WebSocket 偵聽。

(2) 客戶端瀏覽器向服務端發起WebSocket 連接,服務端響應客戶端的連接請求,創建WebSocket連接。

(3) 創建成功后,客戶端響應OnOpen 事件,開啟音頻數據獲取請求,并創建音頻播放對象。

(4) 服務端響應客戶端請求數據事件,并持續向客戶端發送音頻字節流。

(5) 客戶端響應OnMessage 事件,獲取音頻字節流,向音頻播放對象數據緩沖區中添加數據。

(6) 開始播放音頻數據。

3 服務端技術實現

服務端主要實現WebSocket 監聽,音頻字節流數據獲取,音頻字節流數據發送等幾個功能,為此服務端需設置成常開系統,如windows 服務,或者相應的windows 程序,以實現對服務的持續服務。本研究以C#開發語言為例進行說明。

在服務端定義了兩個字典分別用來存放發送的音頻流以及請求的音頻流,由于音頻數據,特別是mp3 數據,需要一定的數據量累計才能實現播放,因此設計了一個fifo 隊列用來存放發送給客戶端的數據,對數據進行緩沖處理后再進行發送。同時為支持多客戶端,同時不同的客戶端可以播放不同的音頻流,故此,設計了對客戶端請求進行存儲,以滿足對多個播放請求推送相應不同的音頻字節流。為適應不同的音頻格式,在推送音頻數據前,還將音頻格式進行標識,以適應前端調用不同的音頻解碼播放[3]。

4 客戶端WebSocket 實現

WebSocket 為html5 提供的特性,為此客戶端瀏覽器必須為支持html5 的瀏覽器。

5 客戶端音頻流播放實現

MediaSource 是媒體資源HTMLMediaElement 對象的接口。 MediaSource 對象可以附著在HTMLMediaElement 在客戶端進行播放。JavaScript 可以通過URL.createObjectURL 方法生成一個臨時的src,該src 和MediaSource 對象綁定,MediaSource 對象通過自己的SourceBuffer 集合從外部接收數據,然后將數據輸入到HTMLMediaElement 對象進行數據解析播放。一個MediaSource 對 象有至少一個或多個SourceBuffer 對象。MediaSource 對象上有三個主要事件, sourceopen、sourceended、sourceclose。 其中,sourceopen 事件是在給audio.src 賦值之后觸發;sourceended 事件是在用戶主動調用終止被觸發;sourceclose 事件是在SourceBuffer 和MediaElement 中無可用數據(一般是播放到視頻末尾)時被觸發[4]。我們一般需要在給audio.src 賦值之后,監聽sourceopen 事件,以確保MediaSource 和HTMLMediaElement 已經完成綁定,并在此之后才開始進入數據處理流程。數據處理的過程,主要是圍繞SourceBuffer 對象展開的,SourceBuffer 對象通過監聽updateend 事件,判斷audioTrunks 中是否有數據,如果有數據則通過appendBuffer 函數將數據添加到SourceBuffer 中,如果沒有數據則添加一段極短時間的空數據,以保證持續觸發數據更新事件,通過這種方式能夠實現對audioTrunks 緩沖區的持續檢查,這樣,當WebSocket接收到數據并添加到audioTrunks 中,確保持續進行音頻流播放[5]。

6 結論

本研究詳細介紹了B/S 系統中實時音頻流播放的具體技術實現及實現中的注意事項,提供了一整套實時播放音頻流的技術方案,對于廣播發射臺的音頻監聽業務需求具有指導意義。

主站蜘蛛池模板: 久久久精品国产亚洲AV日韩| a国产精品| 国产男人天堂| 久久国产黑丝袜视频| 亚洲AV无码不卡无码| 国产尤物jk自慰制服喷水| 国产青榴视频在线观看网站| 久久亚洲AⅤ无码精品午夜麻豆| 久久成人免费| 老司机精品一区在线视频| 九九九国产| 国产一级在线观看www色| 全部无卡免费的毛片在线看| 激情無極限的亚洲一区免费 | 亚洲精选高清无码| 99热线精品大全在线观看| 亚洲综合色区在线播放2019| 国产欧美日韩另类精彩视频| 色婷婷成人| 成人av专区精品无码国产| www精品久久| 人人妻人人澡人人爽欧美一区| 综合五月天网| 性欧美精品xxxx| 激情视频综合网| 久久精品aⅴ无码中文字幕| 天堂成人av| 国产在线视频福利资源站| 日本成人在线不卡视频| 亚洲精品国产成人7777| 幺女国产一级毛片| 国产成人亚洲精品无码电影| AV不卡无码免费一区二区三区| 亚洲视频免| 国产97色在线| 国产自视频| 亚洲日韩精品无码专区97| 91久久大香线蕉| 日本国产一区在线观看| 精品综合久久久久久97超人| 国产一级无码不卡视频| 狠狠色噜噜狠狠狠狠奇米777| 久草视频精品| 免费在线一区| 热99精品视频| 国产中文一区a级毛片视频| 国产免费怡红院视频| 日本www在线视频| 国产免费高清无需播放器| 波多野吉衣一区二区三区av| 青青久视频| 伊人久综合| 无码丝袜人妻| 免费激情网站| 午夜国产精品视频| 亚洲黄网在线| 免费又爽又刺激高潮网址| 在线观看国产精品日本不卡网| 999福利激情视频| 国产精品jizz在线观看软件| 久久一色本道亚洲| 97av视频在线观看| 国产精品自在线天天看片| 华人在线亚洲欧美精品| AV不卡在线永久免费观看| 国产无套粉嫩白浆| 国产一级无码不卡视频| 性网站在线观看| 亚洲视频一区| 中国精品自拍| 五月天在线网站| 18禁黄无遮挡免费动漫网站| 五月婷婷激情四射| 国产爽歪歪免费视频在线观看| 精久久久久无码区中文字幕| 国产电话自拍伊人| 国产精品永久在线| 亚洲欧美在线看片AI| 精品久久蜜桃| 久久精品无码一区二区日韩免费| 免费高清毛片| 亚洲人成高清|