这个问题在我的脑海里已经有一年多了。我想你们可能知道答案了。
在一些Python GUI应用中,我需要显示视频流。我需要记录这个流的一部分以便稍后重新读取。
此外,我需要使这个python应用程序多平台(OSX, GNU, Windows)
我对许多解决方案持开放态度:
- 将相机连接到流并使用python应用程序读取流(RTP + VLC可以做到这一点)
- 使用声子读取相机
- 创建一个抽象类来定义不同的阅读器,并在操作系统中使用Quicktime, Win32或GStreamer。
你的经验是什么,你会用什么来做到这一点?
我也定期研究过这个问题,似乎底层任务的复杂性太高,无法为您的主题问题提供一个简单的快捷抽象库。但是,我建议使用pyopencv来完成您所阐述的特定任务。它有一个用于网络摄像头输入/捕获的类,它可以跨平台工作,并且有一个合理的用户基础,在python中发布示例。最新版本是2.3.1,也是最近的版本。你可以在一个非常有帮助的网站(不是我的,只是说说)上找到一个为你编译的windows版本:
http://www.lfd.uci.edu/gohlke/pythonlibs/
既然你问我使用几个库的经验,我想说:gstreamer在linux上对我有用,但在windows上安装起来非常痛苦,不适合我。这是相当长的一段时间以前,也许它现在工作得更好。py是一个简单的库,用于测试VLC是否适合您。目前它还不能在64位windows平台上运行;不确定原因,但似乎许多人都报告了类似的错误,所以这取决于您需要多少跨平台支持。
不幸的是,这并不容易做到。我已经编写了一个在3个主要桌面操作系统上进行视频录制/播放的程序的大部分。除了HTML嵌入之外,以"开箱即用"的方式播放/录制视频的状态在跨平台上仍然没有得到解决。这与以下事实有很大关系:
- 编解码器是专有的
- 操作系统不支持通用编解码器
- ffmpeg和类似的项目有许可证,如果您以某些方式包含它们,则要求您发布源代码
- 许多现有的视频播放播放器都是手工重写的,以处理每个帧,缓冲,流,音频同步等。
所以你可以使用HTML,或者你可以忍受以下编码库的跨平台问题:
- Python媒体播放器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