在網(wǎng)頁上用websocket播放RTSP實時流 性能優(yōu)化 進階方案
上篇文章圃郊,介紹了提高 視頻流播放性能 的進階方案渣窜, 現(xiàn)在實現(xiàn)一個完整的項目。
- 使用Tornado開發(fā)websocket服務
- 使用Opencv對RTSP流進行解碼
- 前端ArrayBuffer讀取二進制數(shù)據(jù)龙巨, 轉(zhuǎn)為Blob對象
- FileReader讀取Blob為base64字符串吁恍,由img標簽顯示圖片
Torando 在高版本5.0+ 客蹋, 在Application中加入線程,會出現(xiàn) RuntimeError: There is no current event loop in thread 'Thread-1'.錯誤棘捣, 建議降低版本為4.5
開發(fā)環(huán)境
Python3.7
解碼視頻流
使用 imutils 庫解碼視頻流,提高解碼速度休建。
將得到的圖片轉(zhuǎn)為字節(jié)存儲到進程間共享隊列 multiprocessing.Queue() 中
image.png
推送服務
從隊列中取出后乍恐,調(diào)用 websocket write_message 發(fā)送
image.png
Websocket服務
image.png
前端JS
websocket 連接設置 binaryType: 'blob'
FileReader 讀取二進制數(shù)據(jù)為ArrayBuffer
image.png
轉(zhuǎn)為Blob對象
image.png
展示在前端 img 標簽
image.png
這樣就可以實現(xiàn)網(wǎng)頁播放實時RTSP視頻流啦。
完整代碼git地址:tornado_websocket_stream