使用Python管理多平台视频流的最佳方法是什么?

4 投票
2 回答
856 浏览
提问于 2025-04-17 00:11

我心里这个问题已经想了一年多了。我想你们可能有答案。

在某个Python图形界面应用中,我需要显示一个视频流。并且我需要录制这个视频流的一部分,以便以后再观看。

此外,我还想让这个Python应用可以在多个平台上运行(比如OSX、GNU和Windows)。

我对很多解决方案都持开放态度:

  • 把摄像头连接到一个流上,然后用Python应用读取这个流。(RTP加上VLC可能可以实现)
  • 使用Phonon来读取摄像头。
  • 创建一个抽象类来定义不同的读取方式,根据操作系统使用Quicktime、Win32或GStreamer。

你们有什么经验?你们会用什么方法来实现这个呢?

2 个回答

0

很遗憾,这个事情并不简单。我写了一个大部分完成的程序,可以在三大桌面操作系统上进行视频录制和播放。不过,视频播放和录制在跨平台上还是有很多问题,除了用HTML嵌入的方式。这主要是因为以下几点:

  • 视频编码格式是专有的
  • 操作系统不支持常见的编码格式
  • 像ffmpeg这样的项目有一些许可证要求,如果你以某种方式使用它们,就必须公开你的源代码
  • 现有的视频播放软件大多是手动重写的,每个软件都要处理每一帧、缓冲、流媒体、音频同步等问题。

所以你可以选择使用HTML,或者忍受以下编程库带来的跨平台问题:

  • Python mplayer
  • Python vlc
  • Python opencv
  • Python pyaudio
  • Python pyside/pyqt phonon 或 qtmultimedia

一旦你在一个开发机器上搞定了,准备好在用户的机器上安装时可能会出问题(可以通过:pyinstaller / appdmg / apt / chocolatey / Inno Setup 来分发)

在OSX上,brew还是有很多问题,但macports表现得更好(我还是做了很多补丁)

Linux是最简单的。

Windows的难度在两者之间。

我很想知道iOS / Android / Windows RT / Kindle的情况如何。

这个问题并不是独特的,甚至Netflix也还没有一个跨平台的视频应用:https://www.quora.com/Is-Netflix-building-an-app-for-the-Mac-App-Store?share=1

2

我也时不时关注这个问题,发现这个任务本身的复杂性太高了,没法用简单的库来解决你提到的问题。不过,我建议你可以试试pyopencv,这个库专门处理你说的任务。它有一个可以处理网络摄像头输入的类,适用于各种平台,而且在Python社区里有不少用户分享了例子。最新版本是2.3.1,更新得还挺及时的。你可以在一个非常有用的网站上找到Windows版本(这不是我自己的网站,只是推荐一下):

http://www.lfd.uci.edu/~gohlke/pythonlibs/

你提到想了解一些库的使用经验,我可以告诉你:gstreamer在Linux上对我来说很好用,但在Windows上设置起来非常麻烦,最后也没能成功。这是很久之前的事了,也许现在情况有所改善。vlc.py是一个简单的库,可以用来测试一下vlc是否适合你。不过,目前它在64位Windows平台上不太好用,原因不太清楚,但似乎很多人都遇到过类似的问题,所以这就要看你需要多少跨平台的支持了。

撰写回答