Как запустить видео-пакет в MeeGo / Nokia N9 из кода Qt?

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

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

Qt.openUrlExternally(url)

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

Затем я попробовал cuteTube - подход, где я запускаю новый процесс, например так:

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

В конце концов я попытался использовать также VideoSuiteInterface, но даже скомпилировать программу с ним оказалось сложно. Когда мне в итоге удалось скомпилировать и связать все соответствующие библиотеки, результаты не отличались от варианта 3 выше.

Итак, есть ли способ использовать VideoSuiteInterface напрямую или через DBus, чтобы он начал воспроизведение видео независимо от текущего состояния приложения?

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);
}

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

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

CONFIG += videosuiteinterface-maemo-meegotouch
Другие вопросы по тегам