DirectShow

OOleg

Есть видеокамера, карточка видеозахвата и компьютер. Надо сделать трансляцию видео в сеть в реальном времени или с незначительным (секунда-другая) лагом.
Карта поддерживает DirectShow. Сжатие — кодировщиком x264.
Я пытался сделать так: для собственно захвата видео создаём граф фильтров (GraphEdit затем скармливаем полученный файл .grf AviSynth'у (командой DirectShowSource("D:\...\file.grf", audio=false) а со скриптом .avs дальше можно будет работать как с avi-файлом.
В faq'е по avisynth говорится, что граф, который мы загружаем, должен иметь один выход (output pin).
Каким должен быть этот выход? Какой должен быть последний фильтр?
Я попробовал некоторые пришедшие в голову варианты, но во всех случаях выдавалось сообщение об ошибке: граф должен иметь один видеовыход в поддерживаемом формате (RGB24, RGB32 и т. д.). При этом сама карточка точно работает правильно (если в графе в конце поставить фильтр-renderer и запустить "play", то он выводит видео на экран). Если в качестве фильтра-источника брать файлы с записанным с этой же карточки (с помощью media express, которая только это и умеет) видео, как uncomressed, так и mjpeg (другого карта не умеет то скрипт avisynth проигрывается без ошибок. Так что, видимо, дело в неправильном графе. (Я использовал типа фильтр_захвата --> AviDecompressor или навешивал что-н. ещё.)
Или, может, есть какие-то более простые способы? Тоже интересно было бы услышать.

alshevskaya

Вероятно, на выходе получатся цветовое пространство YUV или еще какое, а нужно RGB. Попробуй фильтр "Color Space Converter" или другой с похожим названием.
Вообще, по хорошему нужно узнать, какое цветовое пространство у тебя получается на выходе и найти преобразователь из него в RGB.

kruzer25

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

OOleg

Вероятно, на выходе получатся цветовое пространство YUV или еще какое, а нужно RGB. Попробуй фильтр "Color Space Converter" или другой с похожим названием.
Вообще, по хорошему нужно узнать, какое цветовое пространство у тебя получается на выходе и найти преобразователь из него в RGB.
Спасибо, когда доберусь до оборудования, проверю. Файлы, которые записывались с этой карты, были, кажется, в uyvy, так что, наверное, дело именно в этом. А где можно посмотреть цветовое пространство выходного потока, я пока не разобрался (но GraphEdit, надеюсь, автоматически определит его).
На http://msdn.microsoft.com/en-us/library/ms940088.aspx есть таблица возможных преобразований, только я не понял, что в ней означают крестики: если «разрешено», то из YV12 в YV12 нельзя, а если «запрещено», то из RGB32 в RGB32 нельзя ― и то и другое выглядит странно.

OOleg

http://lleo.aha.ru/dnevnik/2009/03/05.html
Интересно. Об охранных камерах я действительно не думал. Но боюсь, что для моей задачи не подойдёт: нужно высокое разрешение.

OOleg

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

Да, буржуи покупают видеоконференционные системы за большие деньги. Продавай их кто-нибудь ещё вдесятеро дороже ― тоже нашлись бы свои покупатели. В данном случае цена явно неадекватная, неважно, из-за чего: монополизма, странностей законодательства (навязывающего hdmi) или ещё чего. Ну и плюс в такие системы входит ещё какая-нибудь навороченная плазменная панель и, вероятно, куча небесплатного софта «для обработки видео» сомнительной нужности.
Тебе с какой целью? Если для чего-то серьёзного - могу рассказать в пм.

Да, мне для серьёзного дела.

kruzer25

Да, буржуи покупают видеоконференционные системы за большие деньги.
Есть альтернативы за меньшие деньги.

OOleg

А что за альтернативы, если не секрет? И за какие деньги? Что туда входит, какое оборудование используется, насколько оно заменимо сторонними камерами, не требует ли система постоянного участия оператора, и так далее, и тому подобное.
И за какие деньги? Меньшие, чем что?

kruzer25

Я тебе в пм написал.

OOleg

Я тебе в пм написал.
Спасибо. Это я видел, таким Стекловка пользуется для трансляций общеинститутского семинара. Мне не подходит.
Когда я доберусь опять до оборудования, я попробую совет 'а вставить color space converter filter, надеюсь, проблема решится. Менять железо не буду пока.

OOleg

Всё равно не получается…
А есть ли какие-нибудь простые способы использовать фильтры DirectShow, кроме GraphEdit? (Я видел упоминания, что иногда проблемы могут быть связаны именно с ним, а не с DS.) Желательно не требующие программирования на С и разбирания в синтаксисе использования фильтров…
offtop-вопрос: есть ли возможность в linux осуществлять видеозахват от устройства, поддерживающего DirectShow-фильтр-источник?
Оставить комментарий
Имя или ник:
Комментарий: