Russian Qt Forum

Qt => Мультимедиа => Тема начата: Vitto74 от Апрель 04, 2011, 20:21



Название: Свой плагин для QWebView
Отправлено: Vitto74 от Апрель 04, 2011, 20:21
Пишу электронный учебник, в котором потребовалось вывести в QWebView аудио и видео без использования Flash.
Посмотрел как реализовано подключение Flash в Arora и набросал примерно такой класс
Код:
class WebPluginFactory : public QWebPluginFactory
{
Q_OBJECT
public:
    WebPluginFactory(QWidget *widgetParent, QObject *parent = 0);
    ~WebPluginFactory();

    QObject *create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const;
    QList<QWebPluginFactory::Plugin> plugins() const;
    void refreshPlugins();
private:
    QWidget *widgetParent;
};

#include "videoframe.h"
#include "audioframe.h"

#include <QUrl>

WebPluginFactory::WebPluginFactory(QWidget *widgetParent, QObject *parent) :
    QWebPluginFactory(parent),
    widgetParent(widgetParent)
{
}

WebPluginFactory::~WebPluginFactory()
{
}

QObject *WebPluginFactory::create(const QString &mimeType, const QUrl &url, const QStringList &, const QStringList &) const
{
    if (mimeType == "application/book-video"){
        videoFrame *frame = new videoFrame(url.toString(), true, 0);
        connect(widgetParent, SIGNAL(destroyed(QObject *)), frame, SLOT(close()));
        return (QObject *)(frame);
    }
    if (mimeType == "application/book-audio"){
        audioFrame *frame = new audioFrame(url.toString(), false);
        connect(widgetParent, SIGNAL(destroyed(QObject *)), frame, SLOT(close()));
        return (QObject *)(frame);
    }
    return NULL;
}

QList<QWebPluginFactory::Plugin> WebPluginFactory::plugins() const
{
    MimeType mime;
    QWebPluginFactory::Plugin plug;
    QList<QWebPluginFactory::Plugin> rez;

    mime.name = "application/book-video";
    plug.mimeTypes.append(mime);
    rez.append(plug);

    mime.name = "application/book-audio";
    plug.mimeTypes.append(mime);
    rez.append(plug);

    return rez;
}

void WebPluginFactory::refreshPlugins()
{

}

Используется код так.
Код:
ui->webView->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
ui->webView->page()->setPluginFactory(new WebPluginFactory(ui->webView));

В принципе код работает и на месте
Код:
<object type="application/book-video" data="file://{путь к видео}"></object>

Появляется корректно работающий плеер, но при этом в консоль вываливается много мата
Код:
** (<unknown>:21467): DEBUG: NP_Initialize
** (<unknown>:21467): DEBUG: NP_Initialize succeeded
** (<unknown>:21467): DEBUG: NP_Initialize
** (<unknown>:21467): DEBUG: NP_Initialize succeeded
** (<unknown>:21467): DEBUG: NP_Initialize
** (<unknown>:21467): DEBUG: NP_Initialize succeeded
** (<unknown>:21467): DEBUG: NP_Initialize
** (<unknown>:21467): DEBUG: NP_Initialize succeeded
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (6b20-1.9.7-0ubuntu1~10.04.1)
OpenJDK Client VM (build 19.0-b09, mixed mode, sharing)

Может я где-то допустил ошибку или написал что-то не так? Подскажите как исправить.