问题标签 [python-vlc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
128 浏览

python - 如何在 Python VLC MediaPlayer 中使用 QFile

我可以wav使用以下代码简单地从文件中播放文件:

我怎样才能对 qrc 资源文件做同样的事情?我尝试了这段代码,但似乎不起作用:

0 投票
1 回答
344 浏览

python - 为什么 VLC 的 .py 模式在“media_player_new”中返回“NoneType”?

几个星期以来,我一直在兜圈子,无法解决一个令人愤怒的问题……首先;我正在运行 64 位 Win10,使用 64 位 Powershell 调用 python 3.9(也是 64 位),这是一个带有 Tk GUI 的应用程序,并使用 python-vlc。它在笔记本电脑上运行了好几个星期,我现在正试图让它在具有相同设置(Win10、64 位 VLC、64 位 Python)的 PC 上运行。

该错误可以在 Python shell 中用几行简单的行重现:

或者,使用带有显式 .Instance() 的稍微不同的方法:

并测试我在它不起作用的机器上出来的结果:

在它工作的笔记本电脑上,它显示<class 'vlc.Instance'>

以下是我看过并尝试过的东西(关于每一个的更多细节,如下):

  1. 实例化媒体播放器所需的正确代码
  2. 使用 vlc.Instance('--verbose 3')
  3. vlc.py 内置 GUI/demo 导致相同的错误
  4. 检查 VLC 是否可以打开 .mp3 文件
  5. 重新安装和 64 位检查
  6. VLC DLL 位置和 %PATH% 环境变量
  7. 检查 vlc.py
  8. vlc.py 内部问题:实例。对 _CFunctions 的new () 调用返回 None

(1)创建播放器的代码

文档说 .MediaPlayer 如果不手动完成,则会自动创建实例。此处也说明了这一点:AttributeError: 'NoneType' object has no attribute 'media_player_new'和 .

无论我采用哪种方式(直接在 Python 中,或者通过将 frmMain.vlc 设置为 vlc.MediaPlayer() 在 gui 中保持打开状态,我都会得到相同的结果,所以我在这里只展示更简单的方法。

(2) i = vlc.Instance('--verbose 3')

Python VLC 脚本错误:AttributeError: 'NoneType' object has no attribute 'media_player_new'表示使用 i = vlc.Instance('--verbose 3') 查看可能的错误消息:我的输出“C:\Windows\system32”和没有错误。

在运行良好的笔记本电脑上,它会输出一屏技术细节。

(3) vlc.py inbuilt GUI/demo 导致同样的错误

在查看 vlc.py 时,我发现它有一个内置的简单 GUI。当我运行它时,文件本身会输出相同的错误:

这让我认为这是 VLC 安装或后端 DLL 所固有的。

(4)检查 VLC 是否可以打开 .mp3 文件

以下使 VLC 完整应用程序打开并正确播放文件:

此外,故意向 .MediaPlayer() 提供错误的文件路径会产生相同的错误,因此,在解析文件路径参数之前,它会遇到 NoneType 错误。

(5)重新安装和 64 位检查

许多类似的问题都集中在 32 位和 64 位安装之间的不匹配上。例如,带有 Python-VLC 的 PyInstaller:没有属性“media_player_new”错误https://superuser.com/questions/1281731/how-to-install-64-bit-vlc-library-for-64-bit-python-3-在 Windows 上。我已经卸载了 VLC 和 Python,重新启动、重新安装、重新启动并仔细检查了我已经安装了 64 位版本。

我从两台机器上卸载了它,并使用高级安装选项,使用完全相同的设置(不包括 Python 文档,包括 Tcl,包括 Python 启动器,为所有用户安装)在两台机器上进行了自定义安装。

检查两台机器上的 Python 是 64 位:

获取一个新的 vlc.py 文件:

检查 vlc 版本,在两台机器上,细节完全匹配:

在运行 VLC 完整应用程序时,两台机器上的“关于”屏幕也会显示“3.0.12 Vetinari”。

32 位和 64 位不匹配有不同的错误(未找到文件、%1 不兼容等),所以,这不是问题所在。

其他一般安装问题,例如,Python vlc 安装问题在 python 中导入 VLC 模块时的属性错误,涵盖了我已经做过的一些相同的事情。

(6) VLC DLLs 位置和 %PATH% 环境变量

Python vlc 安装问题和其他一些问题与 %PATH% 和 Python 不知道在哪里寻找 vlc DLL 有关,但是,这不是我的问题。

微软表示,Sytem32 是 Windows 搜索 DLL 的默认位置:https ://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order 。

我已经浏览了 vlc.py,在“find_lib()”中,我可以看到它在 /system32/ 中找到了 libvlc.dll 的正确位置。我删除了 2x DLL 文件(另一个是 libvlccore.dll)并用新安装的 VLC 的新副本替换它们。没有区别,但是,这意味着我不需要担心 %PATH% 环境变量,因为它可以轻松自动地在 /system32/ 中找到 DLL。

此外,上面由python -m vlc -v列出的 dll 版本正确地在 /system32/ 中找到它。

(7)检查vlc.py

我已经将文件从笔记本电脑(Python 可以调用 VLC 并正常播放 .mp3 文件)复制到桌面(它会导致错误),但结果相同。文件版本看起来完全一样。

验证我确切知道正在使用哪个 vly.py;它在错误的 Stacktrace 中,并且:

返回两台机器上的预期文件路径。将其复制到本地目录不会改变任何内容(除非发生在新位置的文件中,如您所料)。

我还从https://git.videolan.org/?p=vlc/bindings/python.git;a=blob;f=generated/3.0/vlc.py;h=fdb603002425e082b1d6b8ac08ab8322248d3ac7下载了最新版本的 vlc.py ;hb=头

该文件在同一行代码上产生相同的错误(尽管有几个行号不同):

(8) vlc.py 内部问题:Instance。对 _CFunctions 的new () 调用返回 None

它运行 find_lib() 将 dll 位置正确设置为 system32。Instance 类由 Instance 初始化(我猜)。new () ,它调用 libvlc_new() 返回 [b'vlc'],这看起来不错(它不是 None)。但它随后将其传递给 _Cfunctions(通过 f()),后者返回 None。这作为 Instance() 实例返回,是问题的根源。

我在 vlc.py 中添加了一些 print() 语句(测试时,我倾向于将“Line xxxx”放在 print 语句中,以帮助我稍后删除 prints()!):

在它不起作用的PC上:

在它工作的笔记本电脑上:

f 是调用_Cfunctions 的子函数。

0 投票
0 回答
198 浏览

python - Python VLC 行为 - 播放后如何从 media_list 中删除以及我如何知道现在正在播放什么

我正在开发一个程序来替换旧 Wurlitzer 点唱机的所有内容。我将有 3 个设备,一个 Ipac(用于将选择按钮转换为按键),一个 Arduino Mega(用于控制“正在播放的灯”和 2 个其他继电器)和一个 Raspberry Pi 4(它将让我的 python 程序无头运行)。

我终于想出了如何在 Python 中更好地使用 VLC,并且在这个网站的帮助下,我的媒体列表工作了,“下一步”按钮现在工作了。

这是我的代码:

我的第一个挑战是“下一步”按钮。如果我在播放列表中放 3 多首歌曲,在播放第一首歌曲并开始播放第二首歌曲后,我点击跳过(在本例中为“Y”)按钮并从第二首曲目转到第三首曲目。好的酷。但如果我再次点击“下一个”,它会回到第一首曲目。我该如何阻止这个?播放完一首歌后,我希望 VLC 忘记它,或者至少不要在点击“下一个”时返回。

我的第二个挑战,坦率地说是更重要的一个......我需要知道 VLC 何时开始播放列表中的下一首歌曲。你可以看到“def MusicPlayer”……这曾经是我在 VLC 播放时试图控制每首歌曲的时候。它不能正常工作,这就是它被评论的原因,但它显示了我需要对以下几行做些什么:

我需要获取正在播放的内容的完整路径,因此我可以将其拆分并获取目录继续实际文件名。这将是已输入的选择(A1、B2 等)。我需要将其发送到 Arduino 设备,以便在播放该曲目时自动点唱机上的“正在播放”灯正确亮起。我还需要知道 vlc 播放器是否停止(播放列表中的歌曲用完),因为我需要向 Arduino 发送一个“关闭”代码,这样它就知道不会点亮任何东西。

任何帮助将不胜感激。

谢谢。布赖恩

0 投票
1 回答
378 浏览

python-3.x - Python VLC player.next() 控件

我正在编写一个基于组合键(A1、B2、C3 等)播放媒体的 Jukebox 程序。除了“media_player.next()”命令外,一切都按我期望的方式工作。

假设您排队 3 首歌曲。如果你按“y”键,它会像我预期的那样跳过这首歌。我的问题是,一旦它到达第三首歌曲,如果你再次按“y”,它会回到第一首歌曲。我不想要那个。我希望“y”键在媒体列表中带您前进……如果那是媒体列表中的最后一首歌曲,请不要转到下一首歌曲。我怎么知道这是否是媒体列表中的最后一首歌,或者你如何阻止 VLC 回到开头?

0 投票
0 回答
287 浏览

python - 使用 libVLC Python 录制 RTSP 流

我一直在尝试在 python 中使用 libVLC 录制 RTSP 流。我有一个适用于 cvlc 的基本命令,但我无法对 libVLC 做同样的事情。

这是 cvlc 命令:

这是我使用python的地方:

0 投票
0 回答
79 浏览

python - 使用 Python-vlc 的播放器。如何像在 YouTube 上一样创建 10 秒的缓冲区(提前加载视频)

我想转发从mrl收到的视频,但是由于没有缓冲区,所以转发10秒需要很长时间,我想知道缓冲区是否可以实现。

我的代码:

0 投票
1 回答
227 浏览

python - 清除 vlc media_list_player 的媒体列表将不允许重新启动媒体播放器

我正在开发 Raspberry Pi 4B,我正在创建一个音乐播放器来替换自动点唱机的内部。我正在尝试使用组合键将音乐输入 VLC。在这种情况下,选择“A1”将转到作为“/media/usb1”安装到“A1”文件夹的 USB 记忆棒,将找到的任何媒体添加到 media_list_player 正在播放的播放列表中。这按设计工作。

当我试图清除媒体列表以重新开始时,我的问题就出现了。我需要使用相同的 media_list_player 名称,但是一旦我创建了一个新的媒体列表,我就无法重新启动播放器。

这是我的代码片段:

对我来说,我按下“A1”,音乐按预期开始。我按了“W”,它按预期停止了。在窗帘后面,我还通过创建一个新的空白列表来清除媒体列表。当我清除列表时,再次点击“W”没有任何作用,所以这是有道理的。我按“A1”并希望再次听到音乐,但我没有。我看到“添加媒体播放”,但没有声音。如何重新启动媒体列表播放器?或者可能更合适的问题是,我如何清除媒体列表(通过从列表中创建新媒体或删除媒体)并允许使用相同的引用来使用媒体播放器?

0 投票
0 回答
52 浏览

libvlc - 使用 python 启动一个普通的 VLC 会话

我想/需要将一些自定义设置挂钩到 VLC。例如,我需要跟踪播放进度,并且在某些事件(如 5 秒)直到轨道结束时,必须采取其他效果。

我想过在 python 中执行此操作并python-vlc用于启动/控制 VLC 实例。

我发现的基本结构(这里是一个通用的过程示例)是:

但是,这不会像我直接打开 VLC 程序一样生成经典的 VLC (Qt) 界面。

有没有办法像我在控制台中启动一样启动普通的 VLC (Qt) GUI,但能够以编程方式访问该程序?

我需要这些(可能还有更多)信息:

  • 新曲目开始播放时的事件
  • 播放暂停时的事件
  • 曲目即将结束时的事件(例如结束前 3 秒)
  • 当前播放文件的名称
  • 最终触发播放/暂停播放的选项
  • 最终将文件添加到播放列表的选项
0 投票
0 回答
884 浏览

python - 当我尝试使用“set_position()”使用 python-vlc 播放流式视频时出现“时间戳转换失败”

我正在尝试在流式视频中添加播放功能

我从流媒体网站获得流媒体视频数据,并继续将它们写入 .flv 文件。然后视频文件将在 python-vlc 中播放。当我试图set_position()在文件仍在写入的同时在准确的时间播放视频时,我遇到了如下错误:

0 投票
1 回答
89 浏览

python - 在 Python 中开始播放 URL 流时的回调函数

我目前正在为 Raspberry Pi 开发 Python 中的网络广播播放器。功能很简单:在用户输入时,程序从预定义列表中随机选择一个 URL 广播流,并通过 omxplayer 作为子进程开始播放它。

这是我的代码:

但是,我在 Raspberry Pi Zero 上运行此代码,通常需要 3-4 秒(甚至更长时间)才能开始播放流。我想做的是播放本地音频文件(本例中为noise.wav,可以在以下位置生成:https ://www.random.org/audio-noise/ )直到流开始的确切时刻播放,因此在通勤广播电台之间不会有无声的死亡时刻。我的问题是我不知道如何实现这样的事情,因为当媒体流实际加载并开始播放时,我没有发现任何由 omxplayer 触发的信号或事件,也没有发现 vlc 或 mplayer。

然而,我确实发现 omxplayer 会向 stdout 发送一些信息,这些信息会在流开始播放时准确打印出来(vlc 和 mplayer 也是如此)。这是一个例子:

我很好奇是否有某种方法可以使用此输出作为触发器来阻止noisePlayer 播放(使用noisePlayer.stop()),或者是否有任何其他方法可以在无线电流开始播放时触发noisePlayer.stop()?我尝试过的一个选项是使用线程模块中的 Timer 功能,但它通常与可以更快开始播放的无线电流重叠:

我发现的唯一一篇关于我关注的文章是:Python 与 omxplayer 通信 但是,它并没有完全回答我的问题。

如果有人能对这个问题给出一个确切的实现或如何解决它,我将非常感激,因为我根本无法理解它:)