Russian Qt Forum

Qt => Мультимедиа => Тема начата: BiTOk от Декабрь 28, 2009, 01:02



Название: Выбор звуковой дорожки VideoWidget
Отправлено: BiTOk от Декабрь 28, 2009, 01:02
Добрый день. Пишу лёгенький видео проигрыватель на кут с использованием VideoWidget. Возникла проблема: если в видео файле несколько звуковых дорожек, то как реализовать выбор? Беглый просмотр класса VideoWidget и близлежащих не показал ничего подходящего. Или такая возможность пока не реализована?


Название: Re: Выбор звуковой дорожки VideoWidget
Отправлено: Rcus от Декабрь 28, 2009, 06:40
Оставим в стороне перспективы использования минималистичного видеоплеера (Dragon Player уже есть). Но ведь прежде чем что-то писать нужно изучить устройство аналогов, чтобы не повторять пройденный путь ошибок (hint: svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdemultimedia/dragonplayer/src).

Самое интересное это различие в документации
http://api.kde.org/kdesupport-api/kdesupport-apidocs/phonon/html/classPhonon_1_1MediaController.html
http://doc.qt.nokia.com/4.6/phonon-mediacontroller.html
Я считаю это круто :)


Название: Re: Выбор звуковой дорожки VideoWidget
Отправлено: Авварон от Декабрь 28, 2009, 23:37
а оно выдирается из кедов? и почему тролли не расширяют свою ветку фонона?


Название: Re: Выбор звуковой дорожки VideoWidget
Отправлено: BiTOk от Декабрь 29, 2009, 15:48
а оно выдирается из кедов? и почему тролли не расширяют свою ветку фонона?
Пролистал багтрек по фонону официальный, не нашёл упоминаний этой проблемы
ADD
пролистал сырки фонона и нашёл там все задекларированные в хелпе kde методы, вобщем у кут просто старый хелп, по этому и нету работы со звуковыми дорожками.   
Код
C++ (Qt)
QList<Phonon::AudioChannelDescription> audchan = m_controller->availableAudioChannels();
m_controller->setCurrentAudioChannel(&audchan[1]);
Такой код должен менять дорожку, но всё падает на выполнении первой строчки..


Название: Re: Выбор звуковой дорожки VideoWidget
Отправлено: Rcus от Декабрь 30, 2009, 08:55
пролистал сырки фонона и нашёл там все задекларированные в хелпе kde методы, вобщем у кут просто старый хелп, по этому и нету работы со звуковыми дорожками.   
Код
C++ (Qt)
QList<Phonon::AudioChannelDescription> audchan = m_controller->availableAudioChannels();
m_controller->setCurrentAudioChannel(&audchan[1]);
Такой код должен менять дорожку, но всё падает на выполнении первой строчки..
Без полных исходников телепатия под конец года очень плохо работает - нужно медитировать для подзарядки.


Название: Re: Выбор звуковой дорожки VideoWidget
Отправлено: BiTOk от Декабрь 30, 2009, 14:59
Я взял экзампл из стандартной поставки кута 4.6 mediaplayer и заменил MediaPlayer::setFile:
Код
C++ (Qt)
void MediaPlayer::setFile(const QString &fileName)
{
   setWindowTitle(fileName.right(fileName.length() - fileName.lastIndexOf('/') - 1));
   m_MediaObject.setCurrentSource(Phonon::MediaSource(fileName));
   m_MediaObject.play();
   m_controller = new Phonon::MediaController(&m_MediaObject);
   QList<Phonon::AudioChannelDescription> audchan = m_controller->availableAudioChannels();
   m_controller->setCurrentAudioChannel(audchan[1]);
}
в хедер вставил
Код
C++ (Qt)
Phonon::MediaController *m_controller;
availableAudioChannels возвращает пустой список, почему - хз.


Название: Re: Выбор звуковой дорожки VideoWidget
Отправлено: Rcus от Декабрь 30, 2009, 18:05
так уже лучше, по крайней мере понятно почему нет списка каналов. Фонон работает асинхронно (на самом деле конечно асинхронно работает основной бэкенд GStreamer, а фонон его оборачивает, не знаю как там дела будут с DirectShow и прочими), после установки файла и вызова play отправляется команда загрузки файла в бэкенд, это не быстрая операция. Лучше ориентироваться на сигнал контроллера void    availableAudioChannelsChanged ().


Название: Re: Выбор звуковой дорожки VideoWidget
Отправлено: BiTOk от Декабрь 30, 2009, 21:25
Т.е. проблема в том, что фронтенд не успевает обработать видео и выдрать из него список дорожек?


Название: Re: Выбор звуковой дорожки VideoWidget
Отправлено: Rcus от Декабрь 30, 2009, 21:30
Т.е. проблема в том, что фронтенд не успевает обработать видео и выдрать из него список дорожек?
Что значит не успевает, куда не успевает? В любом случае никто не обещает что вызов play() приведет к сигналу availableAudioChannelsChanged если произойдет ошибка загрузки (например битый файл, нет кодеков или может быть нет аудиопотока?)


Название: Re: Выбор звуковой дорожки VideoWidget
Отправлено: BiTOk от Декабрь 30, 2009, 21:41
Сделал так:
Код
C++ (Qt)
void MediaPlayer::setFile(const QString &fileName)
{
   setWindowTitle(fileName.right(fileName.length() - fileName.lastIndexOf('/') - 1));
   m_MediaObject.setCurrentSource(Phonon::MediaSource(fileName));
   m_MediaObject.play();
   m_controller = new Phonon::MediaController(&m_MediaObject);
   connect(m_controller, SIGNAL(availableAudioChannelsChanged()), this, SLOT(selectAudio()));
}
 
void MediaPlayer::selectAudio()
{
   QList<Phonon::AudioChannelDescription> audchan = m_controller->availableAudioChannels();
   m_controller->setCurrentAudioChannel(audchan[1]);
}
selectAudio не вызывается даже после начала воспроизведения видео (в нём точно есть хотя бы одна звуковая дорожка). Я в куте новичок, может что не правильно написал? Или оно работает не правильно?


Название: Re: Выбор звуковой дорожки VideoWidget
Отправлено: Авварон от Декабрь 30, 2009, 21:47
нумерация как минимум идёт с 0