Java で UDP DatagramPacket を使用して、ディスクから読み取ったビデオ ファイルをレシーバーに転送したいと考えています。
重要な点は次のとおりです。送信するファイルはディスクから読み取られますが、ファイル サイズを認識していないと仮定する必要があります。ファイル全体を段階的に読み取る必要があり、ファイルのデータグラム パケットはさまざまなサイズにする必要があります。
要するに、送信する必要があるデータの量と、データが生成されるレートを知らずに、ライブビデオをレシーバーにストリーミングしていると想定する必要があります。
現在、ディスク上のファイルを一度に読み取り、データグラム パケットに変換して UDP ソケットを使用して送信するコードがあります。しかし、元のファイルサイズを知らずにファイルをパケット化し、ビデオのライブストリーミングを模倣するように段階的に読み取る方法については、私には手がかりがありません。
Java を使用してこのアイデアを実装するための入力は非常に役立ちます。この基本的なことが機能するようになったら、リアルタイムのファイル転送プロトコルを実装する必要があります。
送信者:
File file = new File("/crazy.mp4");
FileInputStream fis = new FileInputStream(file);
DatagramPacket pack;
int size = 0;
byte[] buffer = new byte[((int) file.length())];
ByteBuffer bb = ByteBuffer.allocate(4);
bb.order(ByteOrder.BIG_ENDIAN);
while (true) {
size = fis.read(buffer);
pack = new DatagramPacket(buffer, buffer.length, address,
packet.getPort());
socket.send(pack);
}
レシーバー:
File file = new File("/crazyRecv.mp4");
FileOutputStream fos = new FileOutputStream(file);
DatagramPacket rpacket = new DatagramPacket(buffer, buffer.length);
while (true) {
socket.receive(rpacket);
fos.write(rpacket.getData(), 0, rpacket.getLength());
}
ありがとう。