【发布时间】:2020-02-05 16:37:01
【问题描述】:
背景:我有一个数据库,其中视频文件的路径存储为 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.path 和pathlib 示例,但似乎没有一个可以创建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 应该能够使用它,但我只是以错误的方式接近它。
(这个问题不是 Loading video using QMediaPlayer and UNC paths 的重复问题,因为我的代码在 Windows 上运行,而我在使用 Mac 友好路径时遇到了不同的问题。)
【问题讨论】:
-
我不明白为什么用户会在 macOS 下使用 UNC 路径?远程服务器不会挂载在文件系统上吗?
-
@trojanfoe 感谢您的提问。在当前设置中,不能假设已经建立了服务器连接(涉及多个服务器,软件用户不一定连接到所有服务器)。即使可以假设安装,我目前也不知道如何将 UNC 转换为等效的“卷”路径。
-
这就是我的意思;除了 Windows,不会有 UNC。所有 O/S 都有自己的方式来指定远程服务器路径等。
-
好的,谢谢。我不习惯 Mac 以及它们的安装方式。如果我理解正确,您是说会有这么简单的路径解决方案,而需要一个涉及创建挂载点的更高级的解决方案?
-
我不是 100% 说实话。正如 ekhumoro 的回答所示,它可能会改用
smb://URL 方案。但是我认为他特定于平台的代码应该是编译时(即#ifdefs)而不是运行时。
标签: windows macos pyqt5 unc qurl