Как запустить видео-пакет в MeeGo / Nokia N9 из кода Qt? - PullRequest
4 голосов
/ 29 февраля 2012

У меня проблемы с запуском собственного видеопроигрывателя Nokia из моего приложения, которое я просто не могу решить.

Моя первая попытка включала вызов

Qt.openUrlExternally(url)

изQML, и это, похоже, отлично сработало, за исключением того, что он каждый раз открывал браузер и использовал его вместо video-suite (native player).

Далее я попробовал 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, чтобы он начал воспроизведение видеонезависимо от текущего состояния приложения?

1 Ответ

1 голос
/ 11 апреля 2012

Решение было на самом деле проще, чем я думал; 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);
}

Кроме того, вы можете подключить некоторые сигналы, чтобы сделать пользовательский интерфейс более отзывчивым, но в основном это должно сработать.

Наконец, вы должны не забыть добавить следующее к вашему .pro-файлу, и все готово:

CONFIG += videosuiteinterface-maemo-meegotouch
...