Russian Qt Forum
Сентябрь 21, 2024, 15:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Выбор звуковой дорожки VideoWidget  (Прочитано 6802 раз)
BiTOk
Гость
« : Декабрь 28, 2009, 01:02 »

Добрый день. Пишу лёгенький видео проигрыватель на кут с использованием VideoWidget. Возникла проблема: если в видео файле несколько звуковых дорожек, то как реализовать выбор? Беглый просмотр класса VideoWidget и близлежащих не показал ничего подходящего. Или такая возможность пока не реализована?
Записан
Rcus
Гость
« Ответ #1 : Декабрь 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
Я считаю это круто Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Декабрь 28, 2009, 23:37 »

а оно выдирается из кедов? и почему тролли не расширяют свою ветку фонона?
Записан
BiTOk
Гость
« Ответ #3 : Декабрь 29, 2009, 15:48 »

а оно выдирается из кедов? и почему тролли не расширяют свою ветку фонона?
Пролистал багтрек по фонону официальный, не нашёл упоминаний этой проблемы
ADD
пролистал сырки фонона и нашёл там все задекларированные в хелпе kde методы, вобщем у кут просто старый хелп, по этому и нету работы со звуковыми дорожками.   
Код
C++ (Qt)
QList<Phonon::AudioChannelDescription> audchan = m_controller->availableAudioChannels();
m_controller->setCurrentAudioChannel(&audchan[1]);
Такой код должен менять дорожку, но всё падает на выполнении первой строчки..
« Последнее редактирование: Декабрь 29, 2009, 17:51 от BiTOk » Записан
Rcus
Гость
« Ответ #4 : Декабрь 30, 2009, 08:55 »

пролистал сырки фонона и нашёл там все задекларированные в хелпе kde методы, вобщем у кут просто старый хелп, по этому и нету работы со звуковыми дорожками.   
Код
C++ (Qt)
QList<Phonon::AudioChannelDescription> audchan = m_controller->availableAudioChannels();
m_controller->setCurrentAudioChannel(&audchan[1]);
Такой код должен менять дорожку, но всё падает на выполнении первой строчки..
Без полных исходников телепатия под конец года очень плохо работает - нужно медитировать для подзарядки.
Записан
BiTOk
Гость
« Ответ #5 : Декабрь 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 возвращает пустой список, почему - хз.
« Последнее редактирование: Декабрь 30, 2009, 15:07 от BiTOk » Записан
Rcus
Гость
« Ответ #6 : Декабрь 30, 2009, 18:05 »

так уже лучше, по крайней мере понятно почему нет списка каналов. Фонон работает асинхронно (на самом деле конечно асинхронно работает основной бэкенд GStreamer, а фонон его оборачивает, не знаю как там дела будут с DirectShow и прочими), после установки файла и вызова play отправляется команда загрузки файла в бэкенд, это не быстрая операция. Лучше ориентироваться на сигнал контроллера void    availableAudioChannelsChanged ().
Записан
BiTOk
Гость
« Ответ #7 : Декабрь 30, 2009, 21:25 »

Т.е. проблема в том, что фронтенд не успевает обработать видео и выдрать из него список дорожек?
Записан
Rcus
Гость
« Ответ #8 : Декабрь 30, 2009, 21:30 »

Т.е. проблема в том, что фронтенд не успевает обработать видео и выдрать из него список дорожек?
Что значит не успевает, куда не успевает? В любом случае никто не обещает что вызов play() приведет к сигналу availableAudioChannelsChanged если произойдет ошибка загрузки (например битый файл, нет кодеков или может быть нет аудиопотока?)
Записан
BiTOk
Гость
« Ответ #9 : Декабрь 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 не вызывается даже после начала воспроизведения видео (в нём точно есть хотя бы одна звуковая дорожка). Я в куте новичок, может что не правильно написал? Или оно работает не правильно?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #10 : Декабрь 30, 2009, 21:47 »

нумерация как минимум идёт с 0
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.164 секунд. Запросов: 22.