小規模なネットワークで voip over udp を使用する方法を学習しています。いくつかのメソッド呼び出しで必要なすべてをやり遂げる準備ができているライブラリのバンドルがあることは知っていますが、私が言ったように、私は学んでいるので、それがどのように機能するかを確認するために車輪を再発明する必要があります.
私は現在 DatagramPacket クラスを調査していますが、DatagramPacket クラスにヘッダー情報 (つまり、インターリーブを行うために知っておく必要があるパケット順序シーケンス番号) を設定するメソッドがないことに気付きました。
環境を反映する小さなコード:
byte[] block;
DatagramPacket packet; // UDP packet
/* x Bytes per block , y blocks per second,
z ms time block playback duration */
block = recorder.getBlock(); // assume I have class that handles audio
// recording and returns speech in a
// uncompressed form of bytes
packet = new DatagramPacket(block, block.length, clientIP, PORT);
まず、UDP であるため、送信者はパケットをどこかに投げるという単純な事実以外には何も気にしないと思います。そのため、内部にそのようなメソッドはありません。
第二に、私はそれを自分で行う必要があると思います-パケットのシーケンス番号を含む送信されるバイトブロックに余分なバイトを追加しますか? ただし、それを行う場合、バイトがオーディオバイトではなくヘッダーバイトであるかどうかをどのように認識するのでしょうか? 最初のバイトが数値を表していると仮定できますが、バイトは 258 個の数値しか表すことができないことがわかっています。これまでバイトレベルで実際に作業したことはありません。それとも他のテクニックがあるのでしょうか?
簡単に言うと、インターリーブを行うには、順序付けされていないパケットを順序付けできないため、パケットのシーケンス番号を設定する方法を知る必要があります:-)
ありがとうございました、