自定义URL协议处理程序Qt 5

Tim*_*mmm 9 url qt qml qt-quick qiodevice

我想在我的应用程序中使用Video/ MediaPlayerQML元素,并让它从自定义流中播放视频.QMediaPlayer似乎支持这个,因为你可以告诉它从QIODevice哪个可以做任何你想做的事情.但MediaPlayer只支持URL.

有什么办法可以注册我自己使用自己的流媒体协议的URL方案吗?例如,说我想做rtsp2://...,我可以做一些模糊的事情:

class Rtsp2 : public QIODevice
{
    // open, read, seek, close, etc.
}

QCoreApplication::registerUrlProtocol("rtsp2", Rtsp2);
Run Code Online (Sandbox Code Playgroud)

Jam*_*ner 2

我没有查看详细信息,但 QML 引擎有一个用于连接的 QNetworkAccessManager。您可以通过子类化和挂钩 createRequest 在 QNAM 层添加您自己的协议。但是我怀疑 QMediaPlayer 可能不会使用此 QNAM 进行媒体加载,因为底层媒体层通常提供自己的 IO 抽象。

(此外,向 QNAM 添加自定义协议并不简单 - 理想情况下,这将是一个简单的“registerProtocolFor”调用,但遗憾的是事实并非如此)