我想使用 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());
}
谢谢。