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 сам разбивает потоки, нам нужно лишь ставить в граф соответствующие элементы. В следующей статье мы разберемся с управлением потоком и контролем времени. Приятного просмотра.
Комментарии
Отличные статьи первая и вторая часть. "Читаю вас" уже давно и решил просто оставить отзыв.
О phonon'е мало инфы на русском, буду ждать новых статей спасибо
Благодарю,непеременно будет