使用 QMediaPlayer 和 UNC 路径加载视频
Loading video using QMediaPlayer and UNC paths
由于 Qt 5.5 QMediaPlayer,我正在尝试使用 UNC 路径从网络加载视频。
代码片段如下:
projectDirectory = QFileDialog::getExistingDirectory (this,
tr ("Choose project folder (sensor + video data"),
QDir::homePath(), QFileDialog::ShowDirsOnly);
QDir dir(projectDirectory);
QStringList test = dir.entryList();
qDebug () << projectDirectory << "contains:" << endl << test;
mediaPlayer.setMedia(QUrl::fromLocalFile(projectDirectory+"/video.mov"));
代码片段适用于本地文件,但当路径以 //
开头时不起作用。
示例输出:
"//m4800/Partage/111" contains:
(".", "..", "HandBrake.txt", "sensors.csv", "video.mov")
DirectShowPlayerService::doSetUrlSource: Unresolved error code 80004005
请注意,我能够读取 sensors.csv
文本文件并且 video.mov
具有相同的权限。
DirectShow 库似乎没有正确支持 UNC 路径。
您必须将文件复制到本地临时文件夹或将文件加载到 QByteArray 并从那里流式传输。
这两个都不是很好的解决方案,Microsoft 贬低了 DirectShow,转而支持 Media Foundation(目前播放支持有限)。
而不是
mediaPlayer.setMedia(QUrl::fromLocalFile(projectDirectory+"/video.mov"));
删除 ::fromLocalFile 并尝试
mediaPlayer.setMedia(QUrl(projectDirectory+"/video.mov"));
这似乎解决了问题。在我正在处理的代码库中,我们在创建 URL 之前在原始路径的开头添加了对“//”的检查,以检查它是否是 UNC 路径,如果不是,则仍然使用 fromLocalFile。
由于 Qt 5.5 QMediaPlayer,我正在尝试使用 UNC 路径从网络加载视频。 代码片段如下:
projectDirectory = QFileDialog::getExistingDirectory (this,
tr ("Choose project folder (sensor + video data"),
QDir::homePath(), QFileDialog::ShowDirsOnly);
QDir dir(projectDirectory);
QStringList test = dir.entryList();
qDebug () << projectDirectory << "contains:" << endl << test;
mediaPlayer.setMedia(QUrl::fromLocalFile(projectDirectory+"/video.mov"));
代码片段适用于本地文件,但当路径以 //
开头时不起作用。
示例输出:
"//m4800/Partage/111" contains:
(".", "..", "HandBrake.txt", "sensors.csv", "video.mov")
DirectShowPlayerService::doSetUrlSource: Unresolved error code 80004005
请注意,我能够读取 sensors.csv
文本文件并且 video.mov
具有相同的权限。
DirectShow 库似乎没有正确支持 UNC 路径。
您必须将文件复制到本地临时文件夹或将文件加载到 QByteArray 并从那里流式传输。
这两个都不是很好的解决方案,Microsoft 贬低了 DirectShow,转而支持 Media Foundation(目前播放支持有限)。
而不是
mediaPlayer.setMedia(QUrl::fromLocalFile(projectDirectory+"/video.mov"));
删除 ::fromLocalFile 并尝试
mediaPlayer.setMedia(QUrl(projectDirectory+"/video.mov"));
这似乎解决了问题。在我正在处理的代码库中,我们在创建 URL 之前在原始路径的开头添加了对“//”的检查,以检查它是否是 UNC 路径,如果不是,则仍然使用 fromLocalFile。