Выбор звукового потока в мультипотоковых AVI через DShow
От: NailMan Россия http://nailman.narod.ru
Дата: 03.07.03 10:44
Оценка:
Есть фильм с 3-мя звуковыми потоками(3 перевода).
Нужно сделать переключение звуковых потоков как в BSPlayer.

Пробовал отключать 2 нитки от AVI Splitter — и в итоге пробадала синхронизация при проигрывании, т.е. перемотка не работала.

Тоже самое если лишние нитки(кроме первой) отключать и удалять вплоть до DSound рендерера — думал если графу нужен SynchronizeClock, то пусть берет его у главного(первого) рендерера(нитки).
Я сохранял выходные пины аудио на сплиттере и входной пин у кодека первой нитки. Соответственно нужную нитку просто соединял пинами. Собсно и эта задумка обломилась — синхронизации нет и установка mediaseeking на нужную позицию никакого результата не оказывает, хотя время отображается то куда перешел.

Вобщем Ай нид хелп в этом деле.

Объясните на пальцах как можно грамотно переключать звуковые потоки или УРЛ какой-нить толковый дайте.

ЗЫ: Предполагается использовать только один из нескольких звуковых потоков.
Re: Выбор звукового потока в мультипотоковых AVI через DShow
От: KonstBez  
Дата: 03.07.03 13:11
Оценка:
Здравствуйте, 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. Эффект аналогичный.
Re[2]: Выбор звукового потока в мультипотоковых AVI через DS
От: NailMan Россия http://nailman.narod.ru
Дата: 03.07.03 13:48
Оценка:
Здравствуйте, KonstBez, Вы писали:

NM>>Вобщем Ай нид хелп в этом деле.

NM>>Объясните на пальцах как можно грамотно переключать звуковые потоки или УРЛ какой-нить толковый дайте.
NM>>ЗЫ: Предполагается использовать только один из нескольких звуковых потоков.

KB>Надо в отключаемые ветви графа вставить собственный фильтр, построенный на CTransformFilter. Тогда можно не пускать данные на выход, не останавливая ветвь. Статус ветви running, а на выходе тишина.

KB>Можно также построить фильтр на CTransInPlaceFilter (в DirectX Media SDK это пример Gargle) и домножать все данные на 0. Эффект аналогичный.

э-э-э я просто пишу на DELPHI и видимо с этим решением будет сложновато.

Я так понимаю в звуковом рендерере присутствует таймер синхронизации, по которому со звуком синхнонно работатет видео. При загрузке АВИ с одним звуковым потоком по умолчанию юзается этот единственный таймер, но вот при загрузке с 3-мя потоками какой из них юзается непонятно — наблюдал в graphedit из SDK.
Даже если там я просто удалю 2 цепочки, то видео уже не будет синхронизированно и мотаться по таймлайну не будет — только непрерывное воспроизведение вперед.

Можно как нибуть переинитить граф и рендерер на новый таймер? Или привязать граф к звуковому рендереру принудительно? Вобщем-то я пробовал вытаскивать таймер из рендерера и пихать в граф, но это не прокатывало.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.