在Django项目中进行网络摄像头直播

3 投票
3 回答
8616 浏览
提问于 2025-04-17 22:23

我现在在做一个Django项目,想要让用户能够通过他们的摄像头互相进行视频会议。我知道html5有这个功能,但我现在不想用它,因为很多浏览器还不支持这个功能。有没有人能给我一些建议,告诉我该怎么做呢?谢谢!

3 个回答

2

简单来说,你需要使用Flash,或者确定你想支持哪些浏览器。

把你的摄像头视频流传到浏览器这件事,HTML5有点支持,但在现代浏览器中,Flash是完全支持的。

更复杂的是,如何把这个视频流传给其他人进行通话。有两种方法:一种是让每个人把自己的视频流传到一个中央服务器,然后这个服务器再把所有视频流发给房间里的每个人;另一种是让每个人直接连接到彼此。

对于任何实时聊天应用,你都希望使用第二种方法(因为中央服务器的延迟会让体验变得很糟糕)。

在网页上,你可以选择WebRTC、RTMFP、HLS或者插件。WebRTC非常棒,但还在完善中。最重要的是,IE浏览器不支持它,所以如果你希望这个应用能被公众使用,很多用户可能就无法使用了。HLS是苹果的技术,支持也不太稳定(而且效率也不是很好)。

关于RTMFP,可以看看cirrus/stratus。他们有一个示例应用展示了这项技术(顺便说一下,这就是ChatRoulette使用的技术)。当然,这需要Flash,但在我看来,这是覆盖尽可能多平台的最佳选择,而不需要用户先安装什么东西。

至于你选择的网页框架(比如Django),其实没什么太大关系,因为你不希望用户把视频流上传到服务器。服务器的工作只是帮助发现和连接,为此你可以考虑使用像APE这样的推送/喜鹊服务器。

3

在客户端,你可以看看 getUserMedia.js 这个工具,它可以帮助你从摄像头捕捉视频。如果你的浏览器不支持 getUserMedia() 这个功能,它还会提供一个Flash的备用方案。

在服务器端,我觉得Drewness的回答已经讲得很清楚了。

3

很难说只用这一种东西,因为实际上你需要的是一系列符合你个人需求的工具。下面是一些资源链接,可以帮助你入门。

  • OpenCV - 提供了用于摄像头的Python接口
  • Tornado - 一个Python的网页框架和异步网络库
  • Twisted - 用Python编写的事件驱动网络引擎

撰写回答