2012-05-08 8 views
3

フラットファイルから読み込んでストリーミングをシミュレートするプログラムを作成しようとしています。ストリーミングハードウェアに接続して起動することなくストリーミングデータを読み込むプログラムをテストできます。ストリーミングデータのシミュレーション

これを達成するためのより現実的な方法は何ですか?シミュレートするハードウェアに応じて、さまざまな速度でストリーミングする必要があります。

これまでの2つのアイデアは、名前付きパイプに書き込むプログラム、または必要な速度で仮想シリアルポートに書き込むプログラムです。

ストリーミングデータをシミュレートする方法はより現実的ですか?

答えて

3

任意のレートでファイルをソケットに書き込むバックグラウンドプロセスを設定します。 Perlでは、

use Socket; 
socketpair my $A, my $B, AF_UNIX, SOCK_STREAM, PF_UNSPEC; 

if (fork() == 0) { 
    stream(); 
    exit; 
} 

while (<$A>) { 
    print; 
} 

sub stream { 
    # output 1024 bytes/sec 
    select $B; $| = 1;   # disable output buffering 
    open my $fh, '<', '/file/to/stream'; 
    my $buffer; 
    while (my $n = read $fh, $buffer, 1024) { 
     sleep 1; 
     print $B $buffer; 
    } 
    close $fh; 
} 
+0

これは完璧です - 別のプロセスから$ Aソケットを読み込むのは簡単ですか? – Nate

1

ストリームデータの元のソースに最も近い方法でストリームをシミュレートすることにします。例えば。通常、ネットワークソケットからストリームを受け取った場合は、ネットワークソケットを使用してシミュレーションします。シリアルポートを使用している場合は、仮想シリアルポートなどを使用してください。そうでない場合は、ストリームコンシューマーコードのアダプターが必要になります(ただし、これはすべて私が推測している通りです)。

それ以外の場合、送信するデータの量を制御できるレート制限アルゴリズムが必要です。クイック検索はthisにつながりましたが、確かに複雑で洗練されたアルゴリズムがあります。 YMMV。

これはもちろん、ストリームのコンシューマ向けに有効なデータ/パケットを作成する方法を理解していることを前提としています。

0

あなたはtrickle(ユーザ空間の帯域幅整形器)を見て、いくつかの符号化時間を節約してみてください可能性があります。

関連する問題