【问题标题】:How to start video-suite in MeeGo / Nokia N9 from Qt code?如何从 Qt 代码启动 MeeGo / Nokia N9 中的视频套件?
【发布时间】:2012-02-29 18:11:01
【问题描述】:

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

我的第一次尝试包括打电话

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->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 参数也没有帮助。如果 video-suite 尚未运行,则呼叫可以正常打开它,但是,唉,没有视频开始播放。

最终我也尝试使用VideoSuiteInterface,但即使使用它编译程序似乎也很困难。当我最终设法编译和链接所有相关库时,结果与上面的选项 3 没有什么不同。

那么,有没有办法直接使用 VideoSuiteInterface 或通过 DBus 来播放视频,而不管应用程序的当前状态如何?

【问题讨论】:

    标签: qt video meego


    【解决方案1】:

    解决方案实际上比我最初想象的要简单; VideoSuiteInterface - 方法毕竟奏效了。所要做的就是正确使用它。如果有人想亲自尝试,这里有完整的资源。

    播放器.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
    

    播放器.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
    

    【讨论】:

      猜你喜欢
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2014-03-22
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 2018-01-27
      相关资源
      最近更新 更多