1

背景:我有一个数据库,其中视频文件的路径存储为 Windows UNC 路径字符串,例如“\\11.22.33.44\path\movie.mp4”。(Windows 格式是遗留的东西,我无法从根本上改变它们的存储方式)。

我现在正在使用 PyQt5 的 QMediaPlayer 开发 Python 媒体播放器。在 Windows 上,它工作正常,并且:

self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(str(fileName))))

在播放器中打开电影文件。

但是,也需要在 Mac 上进行这项工作,并且我在将 Windows UNC 路径转换为适用于 Mac 的 QUrl 格式时遇到了问题。我在网上尝试了各种示例os.pathpathlib但似乎没有一个可以创建可以使用的有效路径QUrl.fromLocalFile。我总是打Error: Failed to load media。我得到像“/11.22.33.44/file/movie.mp4”这样的结果,开头有一个反斜杠和一个前斜杠,诸如此类。

我应该指出,是的,这些是网络路径,被发送到一个名为“fromLocalFile”的方法,但 QUrl 的文档确实声明它将与网络路径一起使用:https ://doc.qt.io/qt-5/ qurl.html#fromLocalFile - 所以我认为这不应该是问题吗?

有人可以向我解释完成这项工作的正确方法吗?我认为 Pathlib 应该能够使用它,而我只是以错误的方式接近它。

(这个问题不是使用 QMediaPlayer 和 UNC 路径加载视频的重复,因为我的代码在 Windows 上运行,并且我在 Mac 友好路径上遇到了不同的问题。)

4

1 回答 1

0

我怀疑是否有一种完全可靠且可移植的方式来为任意网络路径执行此操作。但是,假设您的 Windows UNC 路径始终采用相同的格式,这样的事情应该可以工作:

import platform
from PyQt5.QtCore import QUrl

def make_url(unc):
    if platform.system() == 'Windows':
        url = QUrl.fromLocalFile(unc)
    else:
        url = QUrl(unc.replace('\\', '/'))
        if platform.system() == 'Darwin':
            url.setScheme('smb')
    return url

print(make_url(r'\\11.22.33.44\path\movie.mp4'))

或者,如果这不起作用,请尝试:

def make_url(unc):
    if platform.system() != 'Windows':
        unc = unc.replace('\\', '/')
    return QUrl.fromLocalFile(unc)   

(注意:我在 Linux 上,所以我无法对此进行测试)。

于 2019-10-08T13:15:15.817 回答