Как запустить видео-пакет в 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