我正在使用 libvlc python 绑定播放音乐文件。我的代码如下:
import vlc instance = vlc.Instance() #Create a MediaPlayer with the default instance player = instance.media_player_new() #Load the media file media = instance.media_new('01.DONT CARE.mp3') #Add the media to the player player.set_media(media) try: player.play() except Exception, e: raise e
脚本成功执行,但我听不到任何声音。如果逐行执行代码,则它工作正常,我能够听到声音。您知道可能出了什么问题吗?
你遇到的问题似乎与 vlc.MediaPlayer 的 play() 方法和音频输出流的管理有关。通常,vlc.MediaPlayer.play() 会在调用时直接开始播放媒体,但可能会因为主线程退出或没有等待播放器完成初始化而导致没有声音输出。通过逐行执行时,它能正常工作,可能是因为主线程在调用 play() 后还继续执行,确保音频播放过程没有被中断。
vlc.MediaPlayer
play()
vlc.MediaPlayer.play()
有几个可能的原因和解决方法:
vlc.MediaPlayer.play() 通常会异步启动音频播放,如果你没有等待播放器完成初始化,程序会在 play() 之前就退出,导致声音没有机会播放。你可以让主线程等待音频播放完成。
你可以通过 player.get_state() 来检查播放器的状态,确保它在播放时不会退出。
player.get_state()
你可以使用一个简单的 while 循环来等待播放器开始播放。这样,主线程不会在播放器启动之前就结束。
while
import vlc import time instance = vlc.Instance() # Create a MediaPlayer with the default instance player = instance.media_player_new() # Load the media file media = instance.media_new('01.DONT CARE.mp3') # Add the media to the player player.set_media(media) # Start playing the media player.play() # Wait until the player is initialized and playing while player.get_state() != vlc.State.Playing: time.sleep(0.1) # Keep the script running to allow music to play try: while True: time.sleep(1) # Keep the program running except KeyboardInterrupt: print("Playback stopped.")
有时,libvlc 在后台无法正确选择音频输出设备,尤其是在没有 GUI 环境的系统上运行时。你可以尝试显式设置音频输出模块,例如 alsa 或 pulse(具体取决于你的系统)。
libvlc
alsa
pulse
你可以在 vlc.Instance() 中传递参数来强制使用特定的音频输出设备。
vlc.Instance()
确保播放器没有报告错误或其他异常状态。你可以通过 get_state() 和 get_media() 来检查播放器的状态。
get_state()
get_media()
尝试这些方法之后,你的播放器应该能够在后台正常播放音乐而不会有问题。