Имя:
Пароль:
-- ИЛИ --
Войти, используя:

Форум   Общая тематика и компьютеры   Программирование

DirectShow в поздних Windows.

 
Пост #55412 от 11 августа 2008, 12:22 

Sergey84

Добрый день!
Сразу отмечу что в вопросах видео программирования я абсолютный новичок, хотя программированием занимаюсь достаточно давно. Поэтому заранее прошу прощения если использую неправильные термины или не понимаю Ваши.

Итак, задача возможно покажется вам элементарной: написать программу-конвертер видео, используя кодеки.
Проблема в том что необходимо поддерживать:
а. поздние версии Windows, где, как мне известно (не из очень достоверных источников), нет DirectX (и DirectShow в частности)
b. на серверных станциях (Windows Server 2003, 2007), где установить DirectX просто не дадут.

Возникают следующие вопросы:
1. действительно ли вышесказанное верно, и после XP в винде нет DirectShow (то что идет с MEdia Player не в счет, так как на сервер поставить его не дадут точно, вопрос решенный и не мной)
2. как можно иначе использовать кодеки? Вариант: открывать их как ком-объекты, и использовать не встраивая в граф (насколько я понимаю граф растет из DirectShow). Возможно ли использовать их без графа напрямую направляя им информационные потоки (через интерфейсы)?
3. и вообще концептуальный вопрос: что есть DirectShow а что он не есть. Просто в двух словах: насколько будут работать COM-объекты графа, если принести этот объект "с собой" на машину без DirectX, какова взаимосвязь между фильтрами, то есть если я "принесу" один фильтр на машину, какова вероятность что для работы он потребует другой. И будут ли они вообще работать если перенести COM объект фильтра на машину без DirectX/DirectShow (перенести = "перенести dll и зарегистрировать ее в реестре")?

В общем, интересны Ваши мнения, советы. К сожалению времени мало, задача не типовая для меня. Шуршу интернет, но думаю Ваши советы как опытных программистов могут значительно помочь. Советы "иди ты на... http-ссылка принимаются с благодарностью :-)

Заранее благодарен.
Сергей.
Отправить личное сообщениеПрофиль пользователяРоссия
Smolensk
Постов: 10
Нарушений: Нет
Пост #55413 от 11 августа 2008, 13:26 

Vlafy

Sergey84 : а. поздние версии Windows, где, как мне известно (не из очень достоверных источников), нет DirectX (и DirectShow в частности)
А источник хотелось бы узнать. Хотя сразу скажу, что это чушь. Достаточно пройтись по сайтам фирм-изготовителей ТВ-тюнеров - везде уже есть софт для Висты. Да и мои скромные поделки работают на висте без проблем.

Sergey84 :b. на серверных станциях (Windows Server 2003, 2007), где установить DirectX просто не дадут.
DirectX в каком-то виде есть на любом компе, даже на сервере. Иначе даже звуки играться не будут.

По секрету скажу, что пока я экспериментировал с подключениями к графам в "чужих" программах, заметил, что приложения МС Офис зачем-то строят граф, в котором рендерится какой-то файл на Null Renderer.


Sergey84 :как можно иначе использовать кодеки? Вариант: открывать их как ком-объекты, и использовать не встраивая в граф
Можно, но по сути это будет создание своей инкарнации графменеджера.

Sergey84 :какова взаимосвязь между фильтрами, то есть если я "принесу" один фильтр на машину, какова вероятность что для работы он потребует другой
Фильтр - это некая dll, которой для работы, возможно, нужны другие dll. Эти всё и ограничивается.

Короче, напишите простейшее приложение, которое строит граф, и проверьте его на целевых системах.
А фильтры запускать без регистрации можно. Могу дать код. Так работают многие плеера, например, KMPlayer.
Ещё можно глянуть исходники VLC, может быть он без графа обходится, т.к. в линуксе нет directshow, а VLC кроссплатформенный.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #55414 от 11 августа 2008, 20:47 

Sergey84

Спасибо, будем работать :pc

добавлено спустя 7 ч. 17 минут

Еще вопросик с Вашего позволения:
- а есть ли в интернете база бесплатных кодеков (dll). Интересуют базовые кодеки (кодеры и декодеры) для AVI, MPEG, QT, другие.
Интересуют свободные для распространения. Которые можно свободно запихнуть в дистрибутив. Повторюсь, пока требуются только базовые кодеки, с минимальной поддержкой (например, без компрессии). Лишь бы свободные.

Еще раз Спасибо.
Отправить личное сообщениеПрофиль пользователяРоссия
Smolensk
Постов: 10
Нарушений: Нет
Пост #55425 от 11 августа 2008, 20:56 

Vlafy

Sergey84 : базовые кодеки, с минимальной поддержкой (например, без компрессии)
Не понял, как это - кодек без компрессии?

Я не знаю, есть ли такая база. Можно опять же смотреть в дистрибутивах бесплатных плееров, в том KMPlayer. Хотя там обычно декодеры, но в некоторых есть и кодировщики.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #55428 от 11 августа 2008, 20:59 

Sergey84

Спасибо за ответ.

Будем считать что ничего про кодеки без компрессии я не говорил :-)

Я понимаю что бесплатных кодеков полно, но они бесплатны для использования.
Кодеков с полностью свободной лицензией (Mozilla Lic) для коммерческого распространения пока не нашел.
Отправить личное сообщениеПрофиль пользователяРоссия
Smolensk
Постов: 10
Нарушений: Нет
Пост #55574 от 17 августа 2008, 22:14 

Sergey84

Дорогие друзья, я в замешательстве.
Напомню, что задача - конвертирование видео без DirectShow, но с фильтрами.
То есть необходимо запустить заранее известный минимальный набор фильтров на машине где DirectShow не стояло и не будет никогда.
Фильтры перенести - не проблема (в общем случае).
Они будут зарегистрированы как в обычной системе.
А вот что сделать с другими компонентами DirectShow, которые используются фильтрами, такими как
IMediaSample, Allocator и т.д. Ведь все они требуются для нормальной работы фильтров.
В принципе написать свои объекты также не проблема, и зарегистрировать их. Но как узнать все что понадобится? Какие там еще компоненты могут потребоваться, фиг знает...
В общем, я в замешательстве. Что можете подсказать.
В ходе проекта я уже несколько раз менял точку зрения с "все хорошо" на "проект провале". И все потому что "брошен" В DirectShow с обрыва, без подготовки. есть ли идеи у Вас?
Заранее благодарен.
Сергей.
Отправить личное сообщениеПрофиль пользователяРоссия
Smolensk
Постов: 10
Нарушений: Нет
Пост #55576 от 18 августа 2008, 00:21 

Vlafy

Sergey84 : на машине где DirectShow не стояло и не будет никогда
Я уже говорил, что directshow не может совсем не быть. Вы попробовали запустить на целевой системе хотя бы графэдит и попробовать в нём поработать? Это займёт не боле 5 минут, но зато сразу снимет все вопросы.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #55577 от 18 августа 2008, 00:27 

Sergey84

Нет, не пробовал. Возможно Вы правы.
Проблема только в том что целевой системы у меня нет.
Речь идет о серверной станции, насколько мне известно MS Windows Server 2007.
Но точно не известно, от постановщика задачи есть только входящие условия.
Попробую развести на информацию :-)
Спасибо.
Отправить личное сообщениеПрофиль пользователяРоссия
Smolensk
Постов: 10
Нарушений: Нет
Пост #55581 от 18 августа 2008, 11:16 

Vlafy

Sergey84 : MS Windows Server 2007
Такой ОСи я не знаю. Есть MS Windows Server 2008. Если я правильно понимаю, то это "серверная Виста". Если у вас есть дистрибутив, то можно его установить и проверить всё живьём. На обычной висте DS-программы работают, в целом, без проблем.
Если дистра нет, то можно попытаться договориться с заказчиком, чтобы он сделал вам вход на удалённый раб. стол его сервера, вы сможете зайти и посмотреть, работают ли там ds-программы.

добавлено спустя 8 ч. 51 минут

Sergey84,
Поставил Сервер 2008 на виртуальную машину. DirectShow там есть, как и следовало ожидать. Граф строится, по умолчанию там очень мало фильтров, но основные есть. Так что никаких проблем не вижу. Проверка заняла не более получаса.

Скриншоты:

http-ссылка
http-ссылка
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #55596 от 18 августа 2008, 12:06 

Sergey84

Большое Вам СПАСИБО! :beer

Кстати, по поводу кодеков, о которых я спрашивал ранее. Если кому пригодится, советую обратить внимание на FFmpeg кодек: открытый код, свободное распространение, и, построенные на их основе FFDShow (вроде так называется). Последний более законченный, также OpenSource и свободный к распространению/модификации.
Отправить личное сообщениеПрофиль пользователяРоссия
Smolensk
Постов: 10
Нарушений: Нет
Пост #55652 от 19 августа 2008, 21:46 

Sergey84

А вот еще вопросик. есть ли в природе такие фильтры, которые внутри программы можно включить в граф и закачивать туда поток байтов из памяти, а он передаст этот поток далее по графу. Ну и соответственно, хотелосьбы надеятся что есть еще и обратный фильтр, вынимающий поток из графа. То есть программа имеет Х килобайт входных данных и хочет получить Y килобайт выходных, прошедших через заранее построенный фильтр. Пока поиски ни к чему не привели.

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

Спасибо.
Отправить личное сообщениеПрофиль пользователяРоссия
Smolensk
Постов: 10
Нарушений: Нет
Пост #55653 от 19 августа 2008, 23:35 

Vlafy

Sergey84,
Это называется "мост". Вроде бы есть такие фильтры, даже в исходниках. Но я не искал, я написал свой фильтр, который получает данные и выдаёт их в граф. Обратного не писал.

Но писать "с нуля" никто не заставляет. Есть базовые классы в ds sdk, в данном случае, фильтр должен быть основан на классе CBaseFilter.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #55765 от 26 августа 2008, 03:50 

Sergey84

К сожалению, вынужден вновь Вас побеспокоить.
Толи я "туплю", толи задача оказалась сложнее чем я думал.
Мосты готовы и работают. Все отлично.
Но вот вопрос с фильтрами остается открытым...
Разрекламированный мною FFDShow незаметно для меня перестал работать... В чем дело не пойму. Многократно переустанавливал из разных источников.
А вопрос мой вот в чем: скажем надо сконвертировать поток в MPEG. При этом исходный формат не так важен, так как декодеров на машине куча. Вопрос в том какой MPEG энкодер использовать. Требования к нему следующие:
1. фильтр бесплатный. Ранее я выдвигал требование о свободном распространении. Отменяем. Считаем что фильтр скачивается конечным пользователем для личного пользования.
2. фильтр поддерживает некоторый интерфейс для минимальных настроек качества/степени сжатия.

Интересно то, что в Висте такие фильтры как я понимаю стоят по умолчанию, там много энкодеров. А вот в XP/2000 их нет - только декодеры (оно в принципе и понятно, для обычной жизни энкодеры не нужны).

Буду благодарен любой информации, в т.ч. и как использовать FFDSHow.
Ну не работает он у меня хоть убейся.
Делаю так:
1. Добавляю Async Source Filter
2. Добавляю ffdshow video encoder
3. Делаю intellegent connect этих двух - удачно срабатывает, делает связку
4. делаю рендер выходного пина энкодера на Dump (по-всякому пробовал, и через Mux и напрямую) - ничего. Энкодер не сосет данные, т.е. файл нулевой. Пробовал кучу настроек - не помогло. Иногда (при определенных настройках) в файл что-то и закачивается, но непонятно что и явно меньше чем надо.
Все вышесказанное делал в GraphEdit на стандартных Source и Dump - мои ошибки исключены.

Большое спасибо!
Отправить личное сообщениеПрофиль пользователяРоссия
Smolensk
Постов: 10
Нарушений: Нет
Пост #55777 от 26 августа 2008, 14:16 

Vlafy

Sergey84 : Вопрос в том какой MPEG энкодер использовать. Требования к нему следующие:
1. фильтр бесплатный.
Из бесплатных mpeg2 энкодеров я знаю только Intervideo. Но он "игрушечный" по сути, т.к. не поддерживает интерлейс.
Вообще странно, если в висте по умолчанию есть какие-то бесплатные энкодеры кроме MS MJPEG. По идее они должны быть платными.

С FFDSHow я не работал. Из ваших слов не понятно, что такое ffdshow video encoder. Это именно mpeg2 энкодер? Или не пойми какой? Как он настраивается?
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #55780 от 26 августа 2008, 15:49 

Sergey84

Да, спасибо, InterVideo посмотрел - в принципе для первой версии продукта достаточно. Одно смущает - на тестовых файлах он выдает смещение и искажение - то есть размер не соответствует первоначальному, центр смещен из=за чего часто картинки пропадает.
Про FFDSHow (основан на ffmpeg - тоже открытая библиотека, очень известная, использовалась во многих платных и бесплатных проектах) - это opensource кодек. Для кодирования используется ffdshow video encoder. Настраивается через GUI, но переделать на программный интерфейс не проблема.
Внутри содержит тучу настроек кодирования mpeg2, mpeg4, WMV и т.д. + много настроек качества, эффектов. Но вот беда - в ряде случаев просто не работает.
Отправить личное сообщениеПрофиль пользователяРоссия
Smolensk
Постов: 10
Нарушений: Нет
Пост #55781 от 26 августа 2008, 16:55 

Vlafy

Sergey84 : Но вот беда - в ряде случаев просто не работает
Не могу что-то конкретное посоветовать. Может быть есть какие-то примеры программ с исходниками?

По InterVideo тоже затрудняюсь сказать. Настройки есть какие-нибудь?
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #55786 от 26 августа 2008, 20:01 

Sergey84

Про FFDShow - примеры конечно есть, тем более проект opensource - можно было бы протрассировать все это дело. Но времени очень мало, жесткие временные рамки. Требуют наискорейшего результата, пусть и менее функционального.

Про InterVideo: настройки глюк не исправляют, но и проявляется он не всегда. Надеюсь для пилотной версии хватит. Кстати, пока не нашел описания программной настройки InterVideo (правда пока искал мало, не было интернета). Если у Вас что-то есть на эту тему, буду очень благодарен. Интересует задание параметров из программы, есть ли интерфейс?

В любом случае Спасибо Вам, Вы мне очень помогли по этому проекту.
Отправить личное сообщениеПрофиль пользователяРоссия
Smolensk
Постов: 10
Нарушений: Нет
Пост #55788 от 27 августа 2008, 01:50 

Vlafy

Sergey84 : Кстати, пока не нашел описания программной настройки InterVideo
Я тоже не нашёл. Можно попробовать спросить у автора FlyDS.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #56889 от 14 октября 2008, 15:51 

Snake_ad

Vlafy :А фильтры запускать без регистрации можно. Могу дать код.

Если не сложно, выложи пожалуйста пример. Меня очень интересует вариант использования фильтра без регистрации при наличии только .ax(.dll) файла.
Отправить личное сообщениеПрофиль пользователяБеларусь
Minsk
Постов: 1
Нарушений: Нет
Пост #65054 от 5 декабря 2009, 23:50 

riku_rv

ерунда полная.У меня в Win 2003 Server x86 прекрасно работает тюнер через WDM-драйвера.
Отправить личное сообщениеПрофиль пользователяАвстрия
Постов: 9
Нарушений: Нет
Пост #65888 от 27 января 2010, 14:27 

zaym

продолжая тему
столкнулся с проблемой в седьмой винде
все хорошо все компилится, только вот немогу отлаживать сво ифильтры - студитя пишет что для графедита нема символов для отладки.
уже и пересобрал поэкт с последним либами - ниче не помогает

на тазике стоит
студия 2008 СП1
виндавс 7 сдк
дебаг симбалз


КАК быть и что делать?
Отправить личное сообщениеПрофиль пользователя---
Постов: 64
Нарушений: Нет
Пост #65891 от 27 января 2010, 20:04 

Vlafy

zaym,
BaseClasses собраны в отладочной версии?
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Если Вы зарегистрированы, то для отправки сообщений, пожалуйста, авторизуйтесь.
-- ИЛИ --
Войдите, используя: Facebook Twitter Yandex Вконтакте Mail.ru ...
Страница создана за 0.095 секунды
Copyright © 1999-2012 PcTuner.Ru · Design by Alex Dovby