Хочу свой кодер написать, типа Windows Media Encoder, который помимо кодирования в файл, осуществлял бы еще трансляцию по сети. Подскажите, есть ли в DirectShow такой фильтр (или еще где-нибудь, только бесплатный)?
Очень нужно.
Спасибо.
Здравствуйте, Аноним, Вы писали:
А>Хочу свой кодер написать, типа Windows Media Encoder, который помимо кодирования в файл, осуществлял бы еще трансляцию по сети. Подскажите, есть ли в DirectShow такой фильтр (или еще где-нибудь, только бесплатный)? А>Очень нужно. А>Спасибо.
Такой фильтр в DirectShow может появиться, если скомпилировать пример DSNetwork из DirectX SDK. Правда, он там заточен под MPEG-2 transport stream, но если разобраться, наверное можно переделать и под свой кодек.
Re[2]: DirectShow: ищется фильтр трансляции по сети
Здравствуйте, romson, Вы писали:
R>Здравствуйте, Аноним, Вы писали:
А>>Хочу свой кодер написать, типа Windows Media Encoder, который помимо кодирования в файл, осуществлял бы еще трансляцию по сети. Подскажите, есть ли в DirectShow такой фильтр (или еще где-нибудь, только бесплатный)? А>>Очень нужно. А>>Спасибо.
R>Такой фильтр в DirectShow может появиться, если скомпилировать пример DSNetwork из DirectX SDK. Правда, он там заточен под MPEG-2 transport stream, но если разобраться, наверное можно переделать и под свой кодек.
А я использовал WMWriter из WM Format (сначала с Network Sink, а потом со своим синком) и пока доволен больше, чем DSNewtwork.
... << RSDN@Home 1.1.4 beta 3 rev. 187>>
Re[3]: DirectShow: ищется фильтр трансляции по сети
R>>Такой фильтр в DirectShow может появиться, если скомпилировать пример DSNetwork из DirectX SDK. Правда, он там заточен под MPEG-2 transport stream, но если разобраться, наверное можно переделать и под свой кодек.
ES>А я использовал WMWriter из WM Format (сначала с Network Sink, а потом со своим синком) и пока доволен больше, чем DSNewtwork.
DSNetwork это вобоще не приемлимая для какого-либо использования вещь.
Потому как он просто бьёт сэмплы на дейтаграммы и выплевывает в сеть.
// Note we do nothing to serialize on the receiver. Depending on the
// distance, receiving host config and operations environment, receiver
// might get these out of order, duplicates, or miss them altogether.
// This is a quick/dirty sample, so we punt that schema. Besides, we
// anticipate usage of this code to be such that the sender and receivers
// are on the same segment, so there's very little likelyhood the receiver
// will need to deal with this situation.
(DSNetwork (C))
Вообще, конечно интересно, какие есть решения, потому как я в данный момент занимаюсь аналогичной проблемой, которая осложняется еще рядом требований: необходимо вещать до 32 видеопотоков разного разрешения, причем на каждом потоке могут висеть несколько сетевых клиентов.
Писать будем сами (вернее уже пишем), примерный алгоритм есть, если интересно могу рассказать.
В качестве вариантов наиболее интересной показалась VideoLan (www.VideoLan.org), но почему-то запустить трансляцию удалось не во всех форматах.
GL!
Re[4]: DirectShow: ищется фильтр трансляции по сети
От:
Аноним
Дата:
28.12.04 14:01
Оценка:
Здравствуйте, LioLick, Вы писали:
LL>Писать будем сами (вернее уже пишем), примерный алгоритм есть, если интересно могу рассказать.
Конечно интересно. Расскажите, пожалуйста.
Eще интересно узнать про WMWriter. Как его использовать? Можно ссылку кинуть?
И еще одна деталь. При сетевой трансляциии с помощью WMEncoder происходит задержка трансляции секунд на 10 (как я понял из-за буферизации в фильтрах). Можно ли эту задержку свести к минимуму (1-2 секунды)?
Re[5]: DirectShow: ищется фильтр трансляции по сети
Здравствуйте, Аноним, Вы писали:
А>Конечно интересно. Расскажите, пожалуйста.
Вкратце, необходимо:
— вещание до 32 каналов видеопотока нескольким клиентам,
— клиенты получают видео в масштабах 1:1, 1:2, 1:3, 1:4, 1:6, 1:8, причем могут менять разрешения по ходу работы,
— возможные варианты:
-- один клиент смотрит несколько видеоканалов (с разными разрешениями),
-- несколько клиентов смотрят 1 видеоканал (или несколько).
В обоих случаях необходимо добиться максимальной производительности.
На данный момент план такой:
Используем Conection-oriented сокеты, т.е. TCP.
На каждый видеопоток по запросу создаются потоки масштабирования и упаковки
(масштабирование в 1 из указанных масштабов + сжатие (не-Delta, например Jpeg)).
Задача этих потоков взять кадр с источника, смасштабировать, упаковать, положить в буффер сетевой отправки.
Далее, сокет клиента (если он не занят отправкой предыдущего кадра) ставит новый кадр на отправку клиенту (через Completion Port, скорее всего). И, собственно, все.
При запросе клиента на изменение разрешения, сокет клиента переподключается к потоку упаковки с требуемым масштабом и далее берет кадр из сетевого буфера нового потока упаковки.
Какие мы видим здесь плюсы:
1. При передаче кадров одного размера нескольким клиентам упаковка и масштабирование происходят 1 раз.
2. При получении клиентом уменьшенных масштабов, происходит упаковка (снижение загрузки CPU) и отправка (снижение нагрузки на сеть) уменьшенного изображения.
Насчет WMWriter: если имеется ввиду "WM ASF Writer Filter", то это в DirectX SDK.
GL!
Re[6]: DirectShow: ищется фильтр трансляции по сети
От:
Аноним
Дата:
19.01.05 14:32
Оценка:
Да чуваки :o)
Я почти над таким же проэктом работал ...
2 системных аналитика , 6 программистов
убили на это 8 месяцев ...
УДАЧИ МУЖИКИ !!! меня это чуть до гроба не довело !
Здравствуйте, Аноним, Вы писали:
А>Хочу свой кодер написать, типа Windows Media Encoder, который помимо кодирования в файл, осуществлял бы еще трансляцию по сети. Подскажите, есть ли в DirectShow такой фильтр (или еще где-нибудь, только бесплатный)? А>Очень нужно. А>Спасибо.
если я правильно тебя понял, то тебе нужен именно фильтр вещания и принимания по/с сети, к енкодеру это никакого отношения не имеет.
Тогда попробуй это Elecard Asynchronous Network Source/Renderer
Сергей.
Re[7]: DirectShow: ищется фильтр трансляции по сети
Здравствуйте, Аноним, Вы писали:
А>Да чуваки :o)
А> Я почти над таким же проэктом работал ... А> 2 системных аналитика , 6 программистов
А>убили на это 8 месяцев ...
А>УДАЧИ МУЖИКИ !!! меня это чуть до гроба не довело !
А> Сделаете в ноги поклонюсь !
Неужели так сложно? Я работаю над данным проектом один. И сроки у меня: отсилу 2-3 месяца на выполнение.
Вы то хоть добились каких-нибудь результатов?
Нужно ведь всего ничего: написать фильтр, который отправляет данные в сеть и source-фильтр, который их забирает. Или я не прав?
ICQ: 326084932
Re[2]: DirectShow: ищется фильтр трансляции по сети
Здравствуйте, Sergey A. Sablin, Вы писали:
SAS>Здравствуйте, Аноним, Вы писали:
SAS>если я правильно тебя понял, то тебе нужен именно фильтр вещания и принимания по/с сети, к енкодеру это никакого отношения не имеет.
Не совсем так. Да действительно нужен фильтр для вещания и приема. Но он должен стоять после кодирующих фильтров (при передачи), так как величина канала 256Кбит и гнать незжатый поток не представляет возможности.
SAS>Тогда попробуй это Elecard Asynchronous Network Source/Renderer
Спасибо за ссылку. Жаль только, что текст проги не прокомментирован, трудно будет во всем разобраться. Буду пытаться.
ICQ: 326084932
Re[8]: DirectShow: ищется фильтр трансляции по сети
Может быть и не успеешь, фильтр без опыта на DirectShow пишется за 1 месяц, с опытом за неделю (если навороченный). Тебе нужно два фильтра — renderer & source
Ну и трансляция по сети около месяца (быстрее, если есть какие-нибудь наработки в этой области)
Потом надо умножить это время, как минимум на 1.1, а лучше на 1.2 на тестирование, доделку и т.п.
Здравствуйте, Аноним, Вы писали:
А>Да чуваки :o)
А> Я почти над таким же проэктом работал ... А> 2 системных аналитика , 6 программистов
А>убили на это 8 месяцев ...
А>УДАЧИ МУЖИКИ !!! меня это чуть до гроба не довело !
А> Сделаете в ноги поклонюсь !
Неужели так сложно? Я работаю над данным проектом один. И сроки у меня: отсилу 2-3 месяца на выполнение.
Вы то хоть добились каких-нибудь результатов?
Нужно ведь всего ничего: написать фильтр, который отправляет данные в сеть и source-фильтр, который их забирает. Или я не прав?
Re[7]: DirectShow: ищется фильтр трансляции по сети Оценить
Posted via RSDN NNTP Server 1.9
Re[2]: DirectShow: ищется фильтр трансляции по сети
Сергей, такой вопрос — можно ли в DirectShow смешать две модели взамодействия pushing & polling?
Т.е. output pin пользует аллокатор предоставленный input pin (как в polling модели IAsyncReader), но при этом input pin не делает Request, а output делает ей Receive?
Вопрос собст. не столько технический, сколько архитектурный. Насколько вообще удобна архитектура DirectShow для программирования?
Планирую сделать нечто похожее (в смысле похожую архитектуру), посему и такой вопрос.
Почетный кавалер ордена Совка.
Re[3]: DirectShow: ищется фильтр трансляции по сети
Здравствуйте, Patalog, Вы писали:
P>Здравствуйте, Sergey A. Sablin, Вы писали:
P>[]
Привет Дим! Сто лет не виделись, может заскочить к тебе сегодня?
P>Сергей, такой вопрос — можно ли в DirectShow смешать две модели взамодействия pushing & polling? P>Т.е. output pin пользует аллокатор предоставленный input pin (как в polling модели IAsyncReader), но при этом input pin не делает Request, а output делает ей Receive?
По делу: Не совсем понял, что ты собираешься сделать... Может примерчик какой?
Пока могу сказать так (пока ты пример не примел ) — сделать фильтр, у которого input работает в push моде, а output в pull можно, если найду исходники — покажу.
P>Вопрос собст. не столько технический, сколько архитектурный. Насколько вообще удобна архитектура DirectShow для программирования? P>Планирую сделать нечто похожее (в смысле похожую архитектуру), посему и такой вопрос.
Все, что пока нам требовалось — всё получалось, есть некоторые заморочки (ну очень специфические), но и для них можно найти выход. Советую в общем.
Если не секрет, то на чем планируешь ее писать и для чего? Не на виндах же насколько я понимаю? У нас просто иногда проскакивают шальные мысли на линухи все это запортить, но... сам понимаешь кушать тоже хочеться, а там деньгами пока особо не пахнет.
Сергей.
Re[4]: DirectShow: ищется фильтр трансляции по сети
Что поделаешь,
SAS>, может заскочить к тебе сегодня?
Было бы неплохо, но я сам только пришел...
P>>Сергей, такой вопрос — можно ли в DirectShow смешать две модели взамодействия pushing & polling? P>>Т.е. output pin пользует аллокатор предоставленный input pin (как в polling модели IAsyncReader), но при этом input pin не делает Request, а output делает ей Receive?
SAS>По делу: Не совсем понял, что ты собираешься сделать... Может примерчик какой? SAS>Пока могу сказать так (пока ты пример не примел ) — сделать фильтр, у которого input работает в push моде, а output в pull можно, если найду исходники — покажу.
Ну, в общем так. Я сам с DirectShow почти не работал, только так, сильно утилитарно, вроде поменять пару строк в готовом фильтре.
Сейчас есть задача спроектировать модель типа sourec-filter-consumer. Очень похожая на то что есть в Show, как я это вижу.
Почему не взять готовый, в смысле сам Direct? Долго объяснять, но не подходит.
Примерно так —
рабочий поток в upstream filter постоянно опрашивает утройство и отдает данные вниз, где в свою очередь рабочий поток downstream фильтра их обрабатывает.
Вопрос в чем — архитектура DirectShow позволяет upstream пользоваться аллокатором, предоставленным downstream в pushing модели?
Т.е. upstream просто напросто запихивает данные в буфер, предостовляемый downstream.
P>>Вопрос собст. не столько технический, сколько архитектурный. Насколько вообще удобна архитектура DirectShow для программирования? P>>Планирую сделать нечто похожее (в смысле похожую архитектуру), посему и такой вопрос.
SAS>Все, что пока нам требовалось — всё получалось, есть некоторые заморочки (ну очень специфические), но и для них можно найти выход. Советую в общем. SAS>Если не секрет, то на чем планируешь ее писать и для чего?
Да все для того же. Просто сейчас возникли некоторые потребности, кои не были учтены изначально, вот и мучаюсь теперь. Хорошо, что я сразу отделил поставщика (производителя данных) от остальной логики, иначе было бы хуже. Графику я уже почти доделал, осталась специфика, а вот для нее и нужна кое-какая непредусмотренная функциональность. Блин, а ведь мог бы и сразу закладывать. Но, опять же сложно, когда "и жнец и швец и на дуде игрец".
В общем, посмотри Данные; поставщики\потребители + еще кое-что
, я там примерно обсказал проблему, по мере изучения которой и решил посмотреть на архитектуру (еще раз подчеркиваю этот момент, поскольку технические детали реализации пока не особо интересуют) DirectShow.
SAS>Не на виндах же насколько я понимаю?
А почему нет? Пока все устраивает. А там посмотрим.
SAS>У нас просто иногда проскакивают шальные мысли на линухи все это запортить, но... сам понимаешь кушать тоже хочеться, а там деньгами пока особо не пахнет.
Ну, нам как бы с этим попроще, в смысле продаем то не софт как таковой, но работы и так выше крыши, а с линохом никто дела толком не имел. Да, и как я говорил, пока неразрешимых проблем с виндозой нет.
Почетный кавалер ордена Совка.
Re[2]: DirectShow: ищется фильтр трансляции по сети
Здравствуйте, Sergey A. Sablin, Вы писали:
SAS>Здравствуйте, Аноним, Вы писали:
А>>Хочу свой кодер написать, типа Windows Media Encoder, который помимо кодирования в файл, осуществлял бы еще трансляцию по сети. Подскажите, есть ли в DirectShow такой фильтр (или еще где-нибудь, только бесплатный)? А>>Очень нужно. А>>Спасибо.
SAS>если я правильно тебя понял, то тебе нужен именно фильтр вещания и принимания по/с сети, к енкодеру это никакого отношения не имеет. SAS>Тогда попробуй это Elecard Asynchronous Network Source/Renderer
У меня тоже траблы с net Source фильтром. Может поможете советом.
В чем проблема:
Фильтр писан с примера из SDK PushSource. Имеет видео и аудио пин.
Метод FillBuffer вызывается потоком через интервалы,при том разные : если законектить только видео пин — порядка 70 ms, если оба — 120-130 ms на видео пине. А сжатые самплы приходят по сети через интервалы 20 ms.
ВОПРОС: как мне синхронизировать всю ету байду ?
Re[5]: DirectShow: ищется фильтр трансляции по сети
[skip]
P>Ну, в общем так. Я сам с DirectShow почти не работал, только так, сильно утилитарно, вроде поменять пару строк в готовом фильтре. P>Сейчас есть задача спроектировать модель типа sourec-filter-consumer. Очень похожая на то что есть в Show, как я это вижу. P>Почему не взять готовый, в смысле сам Direct? Долго объяснять, но не подходит. P>Примерно так - P>рабочий поток в upstream filter постоянно опрашивает утройство и отдает данные вниз, где в свою очередь рабочий поток downstream фильтра их обрабатывает. P>Вопрос в чем — архитектура DirectShow позволяет upstream пользоваться аллокатором, предоставленным downstream в pushing модели? P>Т.е. upstream просто напросто запихивает данные в буфер, предостовляемый downstream.
У нас для воспроизведения данных летящих по сети используется NetSource потом фильтр, во входной пин которого впихиваються данные, а из выходного высасываются push demultiplexer'ом. Называется SimplePump — где-то на нашем download должен валяться. Аллокатор ест-но предоставляется именно SimplePump'ом. Я правильно понял, что тебе это подходит? (я про пул и пуш всегда путаюсь, так что специально не стал писать этих слов )
P>Да все для того же. Просто сейчас возникли некоторые потребности, кои не были учтены изначально, вот и мучаюсь теперь. Хорошо, что я сразу отделил поставщика (производителя данных) от остальной логики, иначе было бы хуже. Графику я уже почти доделал, осталась специфика, а вот для нее и нужна кое-какая непредусмотренная функциональность. Блин, а ведь мог бы и сразу закладывать. Но, опять же сложно, когда "и жнец и швец и на дуде игрец". P>В общем, посмотри Данные; поставщики\потребители + еще кое-что
, я там примерно обсказал проблему, по мере изучения которой и решил посмотреть на архитектуру (еще раз подчеркиваю этот момент, поскольку технические детали реализации пока не особо интересуют) DirectShow.
Почитал... что-то даже понял
Если тебе необходимо хранитиь историю, то во всяких телевещательных изысках применяется технология TimeShift. Технология конечно громко звучит, но смысл в том, что в демуксере есть кольцевой буффер, в котором лежат данные за заданное юзверем время. Ограничения только по размеру винта ест-но. Как только юзверь хочет посмотреть данные за х времени назад (с учетом того, что они есть буффере), он позиционируется по буфферу назад (к началу буффера) и получает их, при этом данные продолжают лететь и записываться в буффер. Если он хочет посмотреть на текущие данные, то позиционируемся к концу буффера и показываем последние прилетевшие данные.
Все это работает и даже применяется во всяких девайсах.
Сергей.
Re[6]: DirectShow: ищется фильтр трансляции по сети
В догонку:
про объем данных — 16.5 Мбайт/мин это 2.2 Мбит/сек. Не так уж и много, чтоб заботиться о занимаемом месте.
Один гигабайт в час абсолютно приемлемая скорость, если одного-двух дней истории достаточно.
Сергей.
Re[3]: DirectShow: ищется фильтр трансляции по сети
Здравствуйте, Patalog, Вы писали:
P>Здравствуйте, Sergey A. Sablin, Вы писали:
P>[]
SAS>>Называется SimplePump — где-то на нашем download должен валяться.
P>А конкретнее?
я же сказал, что я пуш и пул путаю? Так вот, а как раз перепутал... SimplePump это из пул в пуш, sync2Async из пуш в пул. Говорят есть всякие ньюансы их поведения, но при нормальном обращении с ними они даже работают. Кстати скажи зачем тебе мешать две эти модели? Пускай сорец опрашивает девайс и пушит данные дальше, и весь остальной граф пускай тоже в пуше работает — есть мнение, что так лучше... а?
Где лежат на даунлоаде не помню — то ли в СДКе, то ли в кодек паках где-то. В сети найти можно — я просто уверен, а также у тебя на мыле