4

アプリケーションから Nokia 独自のビデオ プレーヤーを起動する際に問題が発生し、解決できないようです。

私の最初の試みには電話が含まれていました

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 を呼び出したときに video-suite を閉じる必要があることを除いて、これは機能しました。それ以外の場合は何もしませんでした。

3 回目の試みでは、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 経由で使用して、アプリケーションの現在の状態に関係なくビデオの再生を開始する方法はありますか?

4

1 に答える 1

1

解決策は、私が当初考えていたよりも簡単でした。-アプローチはVideoSuiteInterface結局うまくいきました。必要なのは、それを適切に使用することだけでした。誰もが自分で試してみたい場合は、ここに完全なソースがあります.

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
于 2012-04-10T20:09:22.773 に答える