如何从Qt代码启动MeeGo / Nokia N9中的视频套件?

时间:2012-02-29 18:11:02

标签: qt video meego

我在从我的应用程序启动诺基亚自己的视频播放器时遇到了问题,我似乎无法解决这个问题。

我的第一次尝试包括致电

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,这样无论应用程序的当前状态如何,它都会启动视频播放?

1 个答案:

答案 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