4

我正在使用 vlc python 绑定来播放视频。然后我得到了这些错误:

[0x3d0c58] main window error: corrupt module: /Applications/VLC.app/Contents/MacOS/plugins/libmacosx_plugin.dylib
[0x3c9af8] vout_macosx vout display error: No drawable-nsobject nor vout_window_t found, passing over.
[0x3178a98] main video output error: video output creation failed
[0xa48c98] main decoder error: failed to create video output

视频不会显示。但是音频还可以,我可以毫无问题地听到音频。而且我还可以毫无问题地调用所有其他 python vlc 函数,如 play()、pause()、...。就是没有视频。

它是 VLC 2.0.8 32bit,OSX 10.8.4 64bit,python 是 3.3.2 32bit。直接使用 VLC 播放任何视频都没有问题。这只发生在我使用 python 命令行时。

但是我在 Windows 7 中做了同样的事情,一切都很完美。那么这是一个mac唯一的问题吗?

我从以下位置下载我的 python vlc 绑定:http: //liris.cnrs.fr/advene/download/python-ctypes/

4

2 回答 2

1

提到的解决方案(使用 -I macosx)之所以有效,是因为它启动了一个接口,该接口为 vout_macosx 模块提供了一个 NSObject(macosx 窗口句柄)。从 libvlc 启动时,默认情况下不存在此类界面/窗口。它可以在其他平台上运行,因为视频输出模块知道如何创建自己的窗口,但在 macosx 上却不是这样。

您有 2 个选项:

  • 在 macosx 中创建一个窗口(使用本机 cocoa API 或 Qt 之类的小部件库),并通过 set_nsobject() 方法传递其引用

  • 安装 XQuartz X11 服务器并使用 x11 视频输出模块(不是很满意也不是很高效,但可以)

于 2013-10-11T07:38:30.143 回答
1

只需在调用 player.play() 之前添加一些这样的代码。正如 Oliver 的评论所提到的,您需要创建一个 Window 并将其传递给 VLC。

我还没有在任何其他平台上进行过测试,但听起来其他平台上不需要这个,尽管我用于灵感的 github 上的代码似乎有系统特定的代码。

    if sys.platform == "darwin":
        from PyQt4 import QtCore
        from PyQt4 import QtGui
        import sys

        vlcApp =QtGui.QApplication(sys.argv)
        vlcWidget = QtGui.QFrame()
        vlcWidget.resize(700,700)
        vlcWidget.show()
        player.set_nsobject(vlcWidget.winId())

    player.play()
于 2015-02-13T13:09:53.290 回答