Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить звук с TV тюнера через DirectShow? 
:(
    Опции темы
Dims
Дата 13.10.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



У меня есть тюнер (AVerMedia H788 PCIe Hybrid) и я с его помощью пытаюсь изучить DirectShow.

Драйвера установлены и программное обеспечение из поставки тюнера работает.

Я написал программу, которая:

1) Перебирает все фильтры (CreateClassEnumerator) и в каждом фильтре перебирает все выходы (EnumPins). Функция находит фильтр, в котором есть выходы VBI и Audio и возвращается указатели на фильтр, и два указателя на выходы.

2) Строит граф для выдачи звукового пина (pIGB->Render(pAudio))

3) И запускает его (pControl->Run()).

Возникает ошибка "Устройство не подключено". 

Та же самая ошибка возникает, если я визуально в GraphEdt составлю граф и попытаюсь его проиграть.

Насколько я понимаю, ТВ тюнер требует какой-то ещё инициализации перед запуском (например, выбрать источник видеосигнала, канал и т.п.). 

Как узнать, что именно необходимо, в какой документации?
PM MAIL   Вверх
xvr
Дата 13.10.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: нет
Всего: 223



Цитата

Как узнать, что именно необходимо, в какой документации? 
В документации на TV тюнер  smile 
Попробуй в GraphEdit в построенном графе посмотреть свойства входного фильтра (TV tuner'а). Там могут быть соотвествующие кнопки и настройки.

PM MAIL   Вверх
Dims
Дата 13.10.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Цитата(xvr @  13.10.2009,  13:28 Найти цитируемый пост)
В документации на TV тюнер  smile 

Там нету smile Только к софту, окошкам и т.п.


Цитата(xvr @  13.10.2009,  13:28 Найти цитируемый пост)
Попробуй в GraphEdit в построенном графе посмотреть свойства входного фильтра (TV tuner'а). Там могут быть соотвествующие кнопки и настройки.

Пробую! Вижу, что тюнер там присутствует во множестве ипостасях... Может, взять какой другой?

Я беру AVerMedia 716x DBA Analog Capture из раздела Video Capture Sources. Мож другой надо?

Кстати, а почему такое странное действие надо выполнять, чтобы получить интерфейс IAMTVTuner? Почему я должен получать его из CLSID_CaptureGraphBuilder2? Что это вообще за объект? Почему нельзя было получить то же самое через QueryInterface к найденному IBaseFilter?





PM MAIL   Вверх
Dims
Дата 13.10.2009, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Заработало! Всё было правильно, за исключением порядка выполнения операций. Тюнер надо было поместить на граф ДО получения интерфейса IAVTVTuner.
PM MAIL   Вверх
xvr
Дата 13.10.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: нет
Всего: 223



Цитата(Dims @ 13.10.2009,  14:33)
Кстати, а почему такое странное действие надо выполнять, чтобы получить интерфейс IAMTVTuner? Почему я должен получать его из CLSID_CaptureGraphBuilder2? Что это вообще за объект? 

Судя по названию это builder для Capture графов.

Цитата

Почему нельзя было получить то же самое через QueryInterface к найденному IBaseFilter?
Наверное можно, но его придется искать, а ICaptureGraphBuilder2 уже есть готовый. Так проще

PM MAIL   Вверх
Dims
Дата 14.10.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



В общем, я рано возрадовался: работает не везде.

На другом компьютере программа не работает. Точнее, работает, но не выдаёт никакого звука (я написал программу для вывода звука с ТВ тюнера), хотя никаких ошибок тоже нет. 

Понять, почему не работает, пока не получается. Смысл использования ICaptureGraphBuilder2 пока не понимаю -- почему нельзя составить граф поэлементно?
PM MAIL   Вверх
Dims
Дата 14.10.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Сохранил получившийся в программе граф и открыл его в GraphEdt. Оказалось, она лепит туда ещё кучу фильтров непонятного назначения:

user posted image

Рыжий квадратик -- это то, что я добавлял сознательно. Всё, что справа от него добавлено автоматически командой Render. Всё, что слева от него добавлено автоматически ICaptureGraphBuilder2.

Зачем? Какие функции выполняют эти фильтры? Почему звуковой канал между рыжим квадратиком и фильтром слева от него разорван, а звук всё равно идёт?


PM MAIL   Вверх
xvr
Дата 14.10.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: нет
Всего: 223



Цитата(Dims @ 14.10.2009,  10:21)
Рыжий квадратик -- это то, что я добавлял сознательно. Всё, что справа от него добавлено автоматически командой Render. Всё, что слева от него добавлено автоматически ICaptureGraphBuilder2.

Зачем? Какие функции выполняют эти фильтры? 

Согласуют типы пинов (и потоки данных). Процесс построения графа довольно подробно описан в MSDN. 
Типы данных можно посмотреть в GraphEdit'е выделив пин и кликнув правой мышкой - проперти

Цитата

Почему звуковой канал между рыжим квадратиком и фильтром слева от него разорван, а звук всё равно идёт?
Видимо восстанавливается фильтром TV Tuner из входного потока, который создается из отдельных входных потоков фильтром AVerMedia XBar

Цитата

В общем, я рано возрадовался: работает не везде.
Построенный граф будет сильно зависеть от конкретной модели тюнера.
Наверное наиболее правильным подходом будет построить граф полностью автоматически (он должен построится, иначе сам TV Tuner не будет работать почти во всех стандартных приложениях), а потом искать в нем то, что интересует. Искать можно как по знакомым типам фильтров, так и по знакомым типам media потоков в пинах фильтров. После того, как нужные концы будут найденны, можно модифицировать построенный граф.

PM MAIL   Вверх
Dims
Дата 14.10.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Конечно, граф у меня строится автоматически. Выше приведена лишь визуализация результата на компьютере где работает. На другом компьютере граф получается состоящим из других элементов, но принципиально от него не отличается.

Это сообщение отредактировал(а) Dims - 14.10.2009, 11:05
PM MAIL   Вверх
Dims
Дата 14.10.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Кажется, понял, в чём было дело: там есть такой кроссбар среди фильтров и в нём есть всякие настройки. Вот с их помощью можно было заставить граф зазвучать....
PM MAIL   Вверх
AndreySol
Дата 17.10.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



А. Левчук "DirectShow и телевидение" - найдите поиском и почитайте, очень поможет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0833 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.