Здравствуйте, Аноним, Вы писали:
А>Конечно интересно. Расскажите, пожалуйста.
Вкратце, необходимо:
— вещание до 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.