输入从C++到QML视频播放器的视频数据

psy*_*hed 5 qt qml qiodevice qmediaplayer

我正在寻找一种在QML中实现视频播放器应用程序的最佳方法.几乎所有QML示例都是从文件系统或Web读取文件:

MediaPlayer {
    id: mediaplayer
    source: "groovy_video.mp4"
}

VideoOutput {
    anchors: parent.fill
    source: mediaplayer
}
Run Code Online (Sandbox Code Playgroud)

我想指定我自己的源MediaPlayer- 一个C++ QObject派生类,它有一个类似的接口QIODevice.这对我的需求来说是完美的.我需要预先加载部分视频,并将其缓存以供以后使用.

有一个简单的解决方案满足我的需求吗?(我使用的是Qt 5.2)

小智 1

一般来说,您应该能够覆盖 QML 加载的任何 URL。Qt 4 文档对此比 Qt 5 更加明确:

https://doc.qt.io/qt-4.8/qdeclarativenetwork.html

但对于 Qt 5 来​​说应该是类似的:

http://doc.qt.io/qt-5/qmlnetworkaccessmanagerfactory.html

例如,您应该能够为自定义源使用特定的 url 架构 magic+videos://.... 为您的自定义源。

最坏的情况是您必须从 QNetworkAccessManager 和 QNetworkReply(从 QIODevice 继承)继承(并重写某些方法)。

自 qt4 以来我就没有玩过这个,但我认为一个好的起点是:

http://doc.qt.io/qt-5/qtqml-networkaccessmanagerfactory-example.html

我对这类东西有点过时了,但希望这会有所帮助。