【问题标题】:How to play a song from the internet using python如何使用python播放来自互联网的歌曲
【发布时间】:2014-01-28 19:19:56
【问题描述】:

我正在尝试使用 PyQt4 和 Phonon(在 Windows 8 64 位上)播放来自互联网的歌曲(流媒体,例如:http://dr5huvbk6x9di.cloudfront.net/cloudfront_songs/file4.ogg

从文件系统播放歌曲是有效的,但是当我尝试从互联网播放时它没有。我阅读了文档,似乎一切都很好。该错误是 FatalError,因此很难理解发生了什么。 Phonon 无法播放来自互联网的歌曲?

另一个问题是我读到声子已被弃用,我们有 PyQt5。所以,这是做我想做的事情的最佳方式。

这是我的代码。这有点乱,因为我只是想工作,所以我可以理解然后让它变得更好。谢谢

#!/usr/bin/env python
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.phonon import Phonon

class MainWindow(QtGui.QMainWindow):

    def __init__(self, win_parent=None):
        QtGui.QMainWindow.__init__(self, win_parent)
        self.create_widgets()

    def create_widgets(self):
        # Widgets
        self.label = QtGui.QLabel("ply music player")
        self.fs_button = QtGui.QPushButton("FileSystem", self)
        self.ws_button = QtGui.QPushButton("WebStream", self)

        # Phonon actions
        self.mediaObject = Phonon.MediaObject(self)
        self.audioOutput = Phonon.AudioOutput(Phonon.MusicCategory, self)
        Phonon.createPath(self.mediaObject, self.audioOutput)

        # Connect signal
        self.fs_button.clicked.connect(self.on_fs_clicked)
        self.mediaObject.stateChanged.connect(self.handleStateChanged)      
        self.ws_button.clicked.connect(self.on_ws_clicked)

        # Vertical layout (manages the layout automatically)
        v_box = QtGui.QVBoxLayout()
        v_box.addWidget(self.fs_button)
        v_box.addWidget(self.ws_button)

        # Create central widget, add layout and set
        central_widget = QtGui.QWidget()
        central_widget.setLayout(v_box)
        self.setCentralWidget(central_widget)

    def on_fs_clicked(self):
        if self.mediaObject.state() == Phonon.PlayingState:
            self.mediaObject.stop()
        else:
            files = QtGui.QFileDialog.getOpenFileNames(self, self.fs_button.text())
            if files:
                songs = []
                for file in files:
                    songs.append(Phonon.MediaSource(file))
                self.mediaObject.setQueue(songs)
                self.mediaObject.play()
                self.fs_button.setText("FileSystem")

    def handleStateChanged(self, newstate, oldstate):
        if newstate == Phonon.PlayingState:
            self.fs_button.setText("Stop")
        elif newstate == Phonon.StoppedState:
            self.fs_button.setText("FileSystem")
        elif newstate == Phonon.ErrorState:
            source = self.mediaObject.currentSource().fileName()
            print "ERROR: ", self.mediaObject.errorType()
            print "ERROR: could not play:", source.toLocal8Bit().data()


    def on_ws_clicked(self):
        if self.mediaObject.state() == Phonon.PlayingState:
            self.mediaObject.stop()
        else:
            song = "http://dr5huvbk6x9di.cloudfront.net/cloudfront_songs/file4.ogg"
            self.mediaObject.setCurrentSource(Phonon.MediaSource(song))
            print self.mediaObject.currentSource()
            self.mediaObject.play()
            self.ws_button.setText("WebStream")

if __name__ == "__main__":
    ply = QtGui.QApplication(sys.argv)
    ply.setApplicationName("Ply")
    ply.setQuitOnLastWindowClosed(True)
    main_window = MainWindow()
    main_window.show()
    sys.exit(ply.exec_())

【问题讨论】:

  • 在流式传输音频时,您的示例在 Linux 和 WinXP 上运行良好。看起来这可能是您的特定设置的问题。
  • 我的一个朋友在 Linux 上试过,但没有用。你的具体设置是什么意思?你的操作系统是 32 位还是 64 位?你用的是哪个 Linux 发行版?感谢您的反馈。我感到很沮丧。
  • “不起作用”是指您的朋友遇到了完全相同的错误,或者究竟是什么?具体设置是指您正在使用的 PyQt、Qt 等版本,但也可能包括您的网络配置。 (PS:我在 Arch Linux 上测试过)。
  • 嗯,他不支持播放mp3。换句话说,他的后端需要一些调整。现在它正在他的linux上工作。我检查了 phonon doc,Windows 需要 directx 9 或更高版本(我有 11 个)和 Windows SDK(我现在正在下载)。你安装了吗?这很奇怪,因为他们正常播放本地 mp3。如果这是问题所在,那么什么都不起作用。我猜。
  • 我没有安装 Win SDK,但我必须安装一次 K-Lite codec pack 才能解决一些与媒体相关的问题 - 不过不记得具体是为了什么。

标签: python stream pyqt streaming phonon


【解决方案1】:

答案是安装编解码器来播放 .ogg 文件。感谢@ekhumoro。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 2019-12-17
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 2023-04-03
    相关资源
    最近更新 更多