在網頁上用websocket播放RTSP實時流 性能優(yōu)化 進階方案
上篇文章,介紹了提高 視頻流播放性能 的進階方案, 現在實現一個完整的項目。
- 使用Tornado開發(fā)websocket服務
- 使用Opencv對RTSP流進行解碼
- 前端ArrayBuffer讀取二進制數據, 轉為Blob對象
- FileReader讀取Blob為base64字符串,由img標簽顯示圖片
Torando 在高版本5.0+ , 在Application中加入線程,會出現 RuntimeError: There is no current event loop in thread 'Thread-1'.錯誤, 建議降低版本為4.5
開發(fā)環(huán)境
Python3.7
解碼視頻流
使用 imutils 庫解碼視頻流,提高解碼速度。
將得到的圖片轉為字節(jié)存儲到進程間共享隊列 multiprocessing.Queue() 中

image.png
推送服務
從隊列中取出后,調用 websocket write_message 發(fā)送

image.png
Websocket服務

image.png
前端JS
websocket 連接設置 binaryType: 'blob'
FileReader 讀取二進制數據為ArrayBuffer

image.png
轉為Blob對象

image.png
展示在前端 img 標簽

image.png
這樣就可以實現網頁播放實時RTSP視頻流啦。
完整代碼git地址:tornado_websocket_stream