TCPServer / TCPSource

TCPServer (clip, int "port")
TCPSource (string hostname, int "port", string "compression")

Фильтр позволяет передавать видео по сети. Можно подключать несколько клиентских приложений к одному серверу.

Синтаксис

Сервер:

TCPServer (clip, int "port")

Запускает сервер на заданном порту (по умолчанию порт 22050).
Сервер остаётся запущен до тех пор, пока открыто приложение, открывшее этот скрипт (например, VirtualDub).

Пример:

Colorbars(512, 256)
TCPServer()

запускает сервер.

Клиент:

TCPSource (string hostname, int "port", string "compression")

Подключается к компьютеру с указанным адресов (например, IP-адресом) по указанному порту (по умолчанию 22050).

Compression позволяет задать алгоритм сжатия для передачи данных:

Вид сжатияОписание
NoneБез сжатия
LZOИспользует алгоритм LZO словарного сжатия. Достаточно быстр, но хорошо работает только на видео типа мультфильмов с большими однородными областями.
HuffmanИспользует достаточно медленную реализацию алгоритма Хаффмана от Marcus Geelnard. Сжимает естественные изображения лучше LZO.
GZipИспользует алгоритм Gzip. Работает аналогично установке Huffman, но быстрее.

В нынешней версии по умолчанию используется алгоритм GZip. Чересстрочное видео сжимается хуже. Если скорость сети критична, можно использовать SeparateFields на серверной стороне.

Пример:

TCPSource("127.0.0.1")
Info()

Подключается к локальному компьютеру, если на нём запущен сервер.

Примеры

Можно использовать для разделения цепочки фильтров по разным компьютерам:

# Компьютер 1:
AVISource
Deinterlacer
TCPServer

# Компьютер 2:
TCPSource
Sharpener
TCPServer

# Компьютер 3:
TCPSource
# приложение-клиент -> видео кодек -> окончательный файл

Замечания по применению

Если Вы добавили TCPServer, то Вы не можете больше добавлять фильтры в цепочку, или использовать выход от фильтра. Сервер выполняется в отдельной нити, но так как AviSynth не полностью безопасен по нитям (thread-safe), Вы не можете надежно выполнять несколько серверов. Следующее не должно быть использовано:

AviSource("avi.avi")
TCPServer(1001)
TCPServer(1002) # Это НЕ хорошая идея

Так что основное правило - никогда больше одного TCPServer на скрипт.

Использование команд после TCPServer также является плохой идеей:

AviSource("avi.avi")
TCPServer(1001)
AviSource("avi2.avi") # НЕ делайте так, это будет отменять сервер.

AviSynth детектирует, что выход TCPServer не используется, и убъет фильтр-Server. TCPServer должен всегда быть последним фильтром.

Изменения

появился в v2.55

$English Date: 2006/01/02 14:51:17 $
Русский перевод 18.05.2005 Eugene Vasiliev (eugvas@mccme.ru)
Обновление 13.01.2006 Fizick