Qt 4.5.1 Phonon. Программирование звука и видео Часть 2.


    И снова здравствуйте! Это вторая статья по обзору Phonon в которой мы продолжим разбираться с ним. В первой статье мы с вами в общих чертах разобрались с графом и с общими принципами его построения. Ну что могу сказать, дорогие друзья, я умолчал кое о чем и сразу начал грузить вас графами и прочим, и сделал это умышленно. Дело в том, что есть более простые методы воспроизведения звука и видео в Phonon, но они не дают должной гибкости. Пользуясь ими трудно оказывать влияние на поток, такое например как изменение контраста или гаммы при воспроизведении видео или эффекты эквалайзера при воспроизведении аудио. Мы рассмотрим в этой статье эти способы, а потом продолжим разбираться дальше.

    Например:


//…..

Phonon::MediaObject* object = Phonon::createPlayer(Phonon::MusicCategory,
Phonon::MediaSource("D:\\music\\a\\ROY  JONES  Jr  PRES.mp3"));
    object->play();

//…..

    Эти две строки кода сами стоят граф, который мы в прошлой статье строили в ручную. Если кто то в этом сомневается, он может заменить код функции main воспроизводящий звук из предыдущей статьи на этот, заменить имя файла на свое и убедится, что все играет. Но, как я сказал выше повлиять на этот поток, по крайней мере мне представляется весьма проблематичным, по этому, я всячески избегаю его применения. Думаю в свете этих событий ни кого не удивит, если мы так же парой строк кода воспроизведем и видео, и конечно же будет лишним напоминать, что поток будет жить своей жизнью… И так, вот код:


#include <QApplication>
#include <phonon/VideoPlayer>
#include <QLabel>
#include <QUrl>

int main(int argc,char** argv)
{
    QApplication a(argc,argv);
    a.setApplicationName("test");
    QLabel l;
    Phonon::VideoPlayer* player = new Phonon::VideoPlayer(Phonon::VideoCategory,&l);
    player->play(QUrl::fromLocalFile("/home/gnudimarik/2.avi"));
    l.show();

    return a.exec();
}

    Этот код написан мной на linux, на windows почему то не заработало, на лицо проблемы с DirectShow, разбираться я поленился и просто перезагрузил машину. А вот и скриншот:

скрин

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

скрин

    Думаю вы согласитесь со мной, если я скажу, что он немногим сложнее графа аудио из первой статьи. Тут добавилось всего два новых элемента, это VideoSink и VideoDevice, учитывая, что с VideoDevice нам работать не придется, все предельно просто. Вот код:


#include <QApplication>
#include <phonon/VideoWidget>
#include <phonon/MediaObject>
#include <phonon/MediaSource>
#include <phonon/AudioOutput>
#include <QLabel>
#include <QUrl>

int main(int argc,char** argv)
{
    QApplication a(argc,argv);
    a.setApplicationName("test");
    QLabel l;

    //Создаем видео виджет
    Phonon::VideoWidget* vw = new Phonon::VideoWidget(&l);

    //Медиа объект
    Phonon::MediaObject object;

    //назначаем имя файла
    object.setCurrentSource(Phonon::MediaSource("/home/gnudimarik/2.avi"));

    //рендерер потока звука
    Phonon::AudioOutput audio(Phonon::VideoCategory);

    //связь с аудио потоком
    Phonon::createPath(&object,&audio);

    //связь с авидио потоком
    Phonon::createPath(&object,vw);

    //воспроизведение
    object.play();

    l.show();

    return a.exec();
}

    Изменилось немногое, но есть один принципиальный момент, тип аудио выхода теперь Phonon:::VideoCategory. Вообще говоря, с этой категорией можно прекрасно воспроизводить и звук. Как мы видим Phonon::MediaObject сам разбивает потоки, нам нужно лишь ставить в граф соответствующие элементы. В следующей статье мы разберемся с управлением потоком и контролем времени. Приятного просмотра.



Добавлена: 15-05-2009 | Пользователем: gnudimarik | Просмотров: 2034

Комментарии

Alex 15-05-2009 23:52
Отличные статьи первая и вторая часть. "Читаю вас" уже давно и решил просто оставить отзыв.

О phonon'е мало инфы на русском, буду ждать новых статей спасибо
gnudimarik 19-05-2009 00:15
Благодарю,непеременно будет


Оставить комментарий



Капча *

Captcha

Комментарий будет опубликован после проверки модератором

Для подсветки синтаксиса исходный код следует обрамлять следующими тэгами
<pre><code class="синтаксис" >код</code></pre>
Подерживаются следующие: cpp php javascript sql html-xml css ini