我在从我的应用程序启动诺基亚自己的视频播放器时遇到了问题,我似乎无法解决这个问题。
我的第一次尝试包括致电
Qt.openUrlExternally(url)
从QML开始,这似乎很好,除了它每次打开浏览器并使用它而不是视频套件(原生播放器)。
接下来我尝试了cuteTube -approach,我开始这样的新流程:
QStringList args;
args << url;
QProcess *player = new QProcess();
connect(player, SIGNAL(finished(int, QProcess::ExitStatus)), player, SLOT(deleteLater()));
player->start("/usr/bin/video-suite", args);
这很有用,除了它需要在调用player-&gt; start时关闭视频套件,否则它什么也没做。
我的第三次尝试涉及通过QDBus启动视频套件,但这种方法效果不佳:
QList<QVariant> args;
QStringList urls;
urls << url;
args.append(urls);
QDBusMessage message = QDBusMessage::createMethodCall(
"com.nokia.VideoSuite",
"/",
"com.nokia.maemo.meegotouch.VideoSuiteInterface",
"play");
message.setArguments(args);
message.setAutoStartService(true);
QDBusConnection bus = QDBusConnection::sessionBus();
if (bus.isConnected()) {
bus.send(message);
} else {
qDebug() << "Error, QDBus is not connected";
}
这个问题是它需要启动和运行视频套件 - autoStartService参数也没有帮助。如果视频套件尚未运行,则通话打开就可以了,但是,唉,没有视频开始播放。
最终我尝试使用VideoSuiteInterface,但即使让程序编译也似乎很难。当我最终设法编译并链接所有相关库时,结果与上面的选项3没有区别。
那么,有没有办法直接或通过DBus使用VideoSuiteInterface,这样无论应用程序的当前状态如何,它都会启动视频播放?
答案 0 :(得分:1)
解决方案实际上比我最初想的更简单;毕竟VideoSuiteInterface
-approach起作用了。所需要的就是正确使用它。如果有人想自己尝试,这里有完整的资源。
player.h:
#ifndef PLAYER_H
#define PLAYER_H
#include <QObject>
#include <maemo-meegotouch-interfaces/videosuiteinterface.h>
class Player : public QObject {
Q_OBJECT
private:
VideoSuiteInterface* videosuite;
public:
Player(QObject *parent = 0);
Q_INVOKABLE void play(QString url);
};
#endif // PLAYER_H
player.cpp:
#include "player.h"
#include <QObject>
#include <QStringList>
#include <QtDeclarative>
Player::Player(QObject *parent) : QObject(parent) {}
void Player::play(QString url) {
QList<QVariant> args;
QStringList urls;
urls << url;
args.append(urls);
videosuite = new VideoSuiteInterface();
videosuite->play(urls);
}
此外,您可能希望连接一些信号以使UI更具响应性,但基本上应该可以解决这个问题。
最后,你需要记住在你的.pro文件中添加以下内容,你就可以了:
CONFIG += videosuiteinterface-maemo-meegotouch