Здравствуйте, NailMan, Вы писали:
NM>Есть фильм с 3-мя звуковыми потоками(3 перевода).
NM>Нужно сделать переключение звуковых потоков как в BSPlayer.
NM>Пробовал отключать 2 нитки от AVI Splitter — и в итоге пробадала синхронизация при проигрывании, т.е. перемотка не работала.
NM>Тоже самое если лишние нитки(кроме первой) отключать и удалять вплоть до DSound рендерера — думал если графу нужен SynchronizeClock, то пусть берет его у главного(первого) рендерера(нитки).
NM>Я сохранял выходные пины аудио на сплиттере и входной пин у кодека первой нитки. Соответственно нужную нитку просто соединял пинами. Собсно и эта задумка обломилась — синхронизации нет и установка mediaseeking на нужную позицию никакого результата не оказывает, хотя время отображается то куда перешел.
NM>Вобщем Ай нид хелп в этом деле.
NM>Объясните на пальцах как можно грамотно переключать звуковые потоки или УРЛ какой-нить толковый дайте.
NM>ЗЫ: Предполагается использовать только один из нескольких звуковых потоков.
Надо в отключаемые ветви графа вставить собственный фильтр, построенный на CTransformFilter. Тогда можно не пускать данные на выход, не останавливая ветвь. Статус ветви running, а на выходе тишина.
Можно также построить фильтр на CTransInPlaceFilter (в DirectX Media SDK это пример Gargle) и домножать все данные на 0. Эффект аналогичный.