import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;
public class Client {
final static String INET_ADDR = "239.1.1.1";
final static int PORT = 49410;
public static void main(String[] args) throws UnknownHostException {
// Get the multicast address that we are going to connect to.
InetAddress address = InetAddress.getByName(INET_ADDR);
// Create a buffer of bytes, which will be used to store
// the incoming bytes containing the information from the streaming server
byte[] buffer = new byte[256];
// Create a new Multicast socket so we can join the multicast group
try (MulticastSocket clientSocket = new MulticastSocket(PORT)){
//Joint the Multicast group.
clientSocket.joinGroup(address);
// do an infinite loop
while (true) {
// Receive the information and print it.
DatagramPacket msgPacket = new DatagramPacket(buffer, buffer.length);
clientSocket.receive(msgPacket);
String data = new String(buffer, 0, buffer.length);
System.out.println("Data -> " + data);
}
} catch (IOException exception) {
exception.printStackTrace();
}
}
}
2 回答
Jon Kittel提供了一个很好的答案,无论如何在问题评论中都提到了UNICAST通信,所以Jon的代码在这种情况下是不可用的 . 下面提供了简化的单播接收器(原始示例为P. Tellenbach) .
此客户端将侦听本地主机地址(端口1234)上的UDP流,并将每个接收到的数据包写入testStream.ts文件 . 如果流是H.264编码的Mpeg-ts,则可以随时打开输出文件,播放器可以再现截至当时捕获的视频流 .
为了接收多播流,您需要创建一个多播客户端,该客户端具有用于存储视频数据的缓冲区,并使用可以加入和侦听多播流的套接字 .
这两个属性是多播地址(239.1.1.1)和端口(49410) .
使用ffmpeg开始将mp4视频文件流式传输到多播地址和端口 .
编译并运行使用MulticastSocket类的多类客户端加入组播组并侦听UDP流数据包 . 我们将缓冲区传递给DatagramPacket对象,当套接字收到UDP数据包时,缓冲区将填充mpeg-ts数据 . 然后,您可以将缓冲区复制到应用程序的另一部分以解码数据 .