用Python实现WebRTC
我想用Python和Twisted搭建一个流媒体服务器,这个服务器可以接收WebRTC的视频流,然后对这些视频流应用一些OpenCV的算法。
不过我找不到适合Python的WebRTC模块。请问我该如何用Python和Twisted发送和接收WebRTC的视频流呢?
谢谢!
3 个回答
我遇到过类似的问题,最后我创建了一个服务器,这个服务器可以启动一个无头的Chrome浏览器实例。通过这个浏览器,我可以访问WebRTC流,使用MediaRecorder录制一些数据块,最后通过WebSocket把这些数据块发送出去。
我希望能有一个基于Python的解决方案,这样我就不需要中间的服务器来启动无头的Chrome浏览器实例,但我一直找不到这样的方案。
我一直在使用Node.js和Puppeteer,不过你也可以从你的Python服务器启动浏览器实例,然后通过普通的套接字或者其他你喜欢的方式把解码的数据发送回来。
我开始整理创建一个Python WebRTC端点所需的基本模块。
其中一个是基于asyncio的互动连接建立模块:
https://github.com/jlaine/aioice
另一个是libsrtp的Python绑定:
https://github.com/jlaine/pylibsrtp
我们还需要在OpenSSL绑定中支持SRTP密钥管理:
https://github.com/pyca/cryptography/pull/4099
在这些基础上,我们可以构建一个基于asyncio的WebRTC实现:
https://github.com/jlaine/aiortc
我已经成功让Chrome和Firefox与一个基于Python的服务器建立音视频流。
你可以不断地截屏,然后把这些截图发送到一个websocket,让你的twisted服务器可以查看每一张截图。
我对一些常用的录屏工具进行了修改,我的版本可以把Jpeg格式的图片通过websocket发送出去。你可以随意使用和修改这个工具,以便更好地满足你的需求。源代码在这里。我用的例子是把截图发送到一个用C语言写的libwebsocket服务器,但同样的JavaScript代码也可以用来发送到任何websocket服务器。