在网页上用websocket播放RTSP实时流 性能优化 进阶方案
上篇文章,介绍了提高 视频流播放性能 的进阶方案, 现在实现一个完整的项目。
- 使用Tornado开发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
开发环境
Python3.7
解码视频流
使用 imutils 库解码视频流,提高解码速度。
将得到的图片转为字节存储到进程间共享队列 multiprocessing.Queue() 中

image.png
推送服务
从队列中取出后,调用 websocket write_message 发送

image.png
Websocket服务

image.png
前端JS
websocket 连接设置 binaryType: 'blob'
FileReader 读取二进制数据为ArrayBuffer

image.png
转为Blob对象

image.png
展示在前端 img 标签

image.png
这样就可以实现网页播放实时RTSP视频流啦。
完整代码git地址:tornado_websocket_stream