## TCPServer / TCPSource

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

このフィルタは、ネットワーク経由でクリップを送信することを可能にします。複数のクライアントを同じマシンに接続することができます。

### シンタックス

#### サーバー:

`TCPServer` (clip, int "port")

このフィルタは、指定されたポート（port）で動作しているカレントのマシン上にサーバースレッドを起動します。port のデフォルトは、22050 です。
スクリプトを開いたアプリケーションで出力を得ることができますが、サーバーはアプリケーション（たとえば VirtualDub）が開いている間のみ動作しています。
使用例:

    Colorbars(512, 256)
    TCPServer()

サーバーを起動します。

#### Client:

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

このフィルタは、与えられたアドレス（hostname。たとえば IP 番号）を持つマシンの、与えられたポート（port）で動作しているサーバーに接続します。port のデフォルトは、ここでも 22050 です。

compression は、ビデオに対して使用される圧縮方法を選択することを可能にします。

圧縮タイプ | 説明
None | 圧縮を使用しません。最も高速なオプションです - ビデオは、ネット経由で送信される前に圧縮されません。
LZO | LZO 辞書圧縮*1を使用します。かなり高速ですが、見た目が非常に均一的な漫画やアニメのような人工的なソースに関してのみうまく圧縮します。
Huffman | Marcus Geelnard による、かなり低速なハフマン*2ルーチンを使用します。LZO よりも実写映像を圧縮します。
GZip | Gzip ハフマンのみの圧縮を使用します。Huffman の設定に非常に近い動作をしますが、より高速なようです。

compression が省略された場合、現在のところデフォルトで GZip が使用されます。インターレース素材は、差分符号化*3のため、ノンインターレース素材よりうまく圧縮されません。ネットワーク速度が問題なら、SeparateFields を使うとよいでしょう。

使用例:

    TCPSource("127.0.0.1")
    Info()

サーバーが動作しているなら、ローカルマシーンへ接続します。

### 使用例

これを使って各フィルタまたはいくつかのフィルタを異なる PC で動作させることができます。たとえば:

    # クラスタメンバー 1:
    AVISource
    Deinterlacer
    TCPServer

    # クラスタメンバー 2:
    TCPSource
    Sharpener
    TCPServer

    # クラスタメンバー 3:
    TCPSource
    # クライアントアプリ -> ビデオコーデック -> 最終ファイル

### ユーザビリティに関する覚え書き

いったん TCPServer を追加すると、そのチェインにフィルタ追加したり、そのフィルタからの出力を使用したりすることはできません。サーバーは独立したスレッドで動作しますが、AviSynth が完全にスレッドセーフ*4ではないため、複数のサーバーを確実に動作させることはできません。以下のスクリプトは使用すべきではありません:

    AviSource("avi.avi")
    TCPServer(1001)
    TCPServer(1002) # これは良いアイデアではない

基本的なルールは、1 スクリプトあたり 2 つ以上の TCPServer を使用しないことです。

TCPServer のあとにコマンドを使用するのも悪いアイデアです:

    AviSource("avi.avi")
    TCPServer(1001)
    AviSource("avi2.avi") # やってはいけない。これはサーバーを無効化する。

AviSynth は、TCPServer の出力が使用されないということを検出します。そのため、サーバーフィルタを中断します。TCPServer は、つねに最後のフィルタであるべきです。

### 更新履歴

v2.55 | 初版

`原文 Date: 2006/01/02 14:51:17`
`日本語訳 $Date: 2008/06/30 22:01:50 $`

- 訳者註:
  - *1 参考: LZ77とは 【Lempel-Ziv 77】 - 意味・解説 ： IT用語辞典、圧縮よもやま話
  - *2 参考: IT用語辞典 e-Words ： ハフマン符号化とは 【Huffman encoding】　─　意味・解説
  - *3 原文 deltaencodeing。参考: 差分符号化 - Wikipedia
  - *4 参考: スレッドセーフとは 【thread safe】　─　意味・解説 ： IT用語辞典 e-Words