python - 使用 VLC 在单独的函数中播放/暂停音轨
问题描述
我有一个使用 VLC-python 库播放音轨的函数(cmd_sr)。
我的目标是有不同的功能来暂停、停止、更改曲目等。但是如果我尝试在不同的功能中暂停曲目,则没有任何变化。如果我将 p.pause() 添加到 cmd_sr 函数中,它工作正常。
有没有办法将 cmd_pause() 函数嵌入到 cmd_sr() 中,或者以某种方式允许它被任何函数访问或暂停?
def cmd_sr(stream_url):
global p
p = vlc.MediaPlayer(stream_url)
p.play()
def cmd_pause():
print(stream_url)
p = vlc.MediaPlayer(stream_url)
sendMessage(s, "Tried to pause")
p.pause()
解决方案
我认为您不需要在创建MediaPlayer
后重新创建它。
一种方法可能是:
# The player
p = None
def cmd_init(stream_url):
global p
p = vlc.MediaPlayer(stream_url)
def cmd_sr(stream_url):
p.play()
def cmd_pause():
sendMessage(s, "Tried to pause")
p.pause()
但是,使用全局变量(这里:p)不是很优雅。最佳实践是使用一个类:
class MyPlayer(object):
def __init__(self, stream_url):
self.player = vlc.MediaPlayer(stream_url)
def play(self):
self.player.play()
def pause(self):
sendMessage(s, "Tried to pause")
self.player.pause()
推荐阅读
- python - 如何根据flask和flask-sqlalchemy的动态属性使用wtforms SelectField?
- python - 如何通过 Python 从 onclick 中获取价值
- php - max_value 和 min_value 与数据库 Codeigniter 不同
- r - 如何在 data.table 的嵌套向量中应用函数?
- .net - 在 .NET/T-SQL 中有效地选择真实记录或虚拟/默认“记录”
- node.js - 在 NestJS 中的不同模块之间共享 TypeORM 连接
- jbpm - 使用 Spring Boot 切换到 jBPM 7 的 SQL Sever 数据库
- php - 是否可以将文字换行符(和其他文字字符)转换为 PHP_EOL 等?
- reactjs - 无法在 React 中打印多个表单输入数据
- rust - 错误 [E0308]:不匹配的类型 — 预期的 `&str`,找到结构 `std::string::String`