Question

J'ai des problèmes de lancement de son propre lecteur vidéo de Nokia de mon application que je ne semble tout simplement pas pouvoir résoudre.

Ma première tentative incluse appelant

Qt.openUrlExternally(url)

de qml et qui semblait faire le tour, sauf qu'il a ouvert le navigateur à chaque fois et l'a utilisé au lieu de la suite vidéo (joueur natif).

Suivant, j'ai essayé cretetube -approach où je commence un nouveau processus comme celui-ci:

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

qui a fonctionné, sauf que cela nécessitait une suite vidéo à fermer lors de l'appelant joueur-> Start, sinon cela n'a rien fait.

Ma troisième tentative impliquait de commencer la suite vidéo via qdbus, mais cela ne fonctionnait pas mieux:

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

Le problème avec ceci est qu'il nécessite une suite vidéo d'être opérationnelle et d'exécution - le paramètre Autostartservice ne vous aidait pas non plus. Si la vidéo vidéo ne fonctionne pas déjà, l'appel l'ouvre simplement bien mais, hélas, aucune vidéo ne commence à jouer.

Finalement j'ai essayé d'utiliser aussi VideoSuiteInterface , mais même le programme compilé avec cela semblait être difficile. Lorsque j'ai finalement réussi à compiler et à relier toutes les bibliothèques pertinentes, les résultats ne diffèrent pas de l'option 3 ci-dessus.

Ainsi, existe-t-il un moyen d'utiliser soit des vidéoshiteInterface directement, soit via des DBU afin de démarrer la lecture vidéo, quel que soit l'état actuel de l'application?

Était-ce utile?

La solution

The solution was actually simpler than I really thought initially; the VideoSuiteInterface -approach worked after all. All it took was to use it properly. Here are the full sources should anyone want to try it themselves.

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

In addition you may want to connect some signals to make the UI more responsive, but basically that should do the trick.

Finally, you need to remember to add following to your .pro file and you are good to go:

CONFIG += videosuiteinterface-maemo-meegotouch
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top