Java-在本地端口上侦听RTP数据包

因此,我目前正在开发一个客户端应用程序,该应用程序在端口5004上侦听RTP数据包.由于可能有多个服务器发送RTP数据包,因此我无法使用套接字连接到特定的远程主机.相反,我尝试了以下方法来侦听本地端口:

Socket socket = new Socket("127.0.0.1", 5004);
Socket socket = new Socket("localhost", 5004);
Socket socket = new Socket(InetAddress.getByName("localhost"), 5004);
Socket socket = new Socket(InetAddress.getLocalHost(), 5004);

以上任何一种都会给我这个例外:

java.net.ConnectException: Connection refused: connect

我也尝试过使用DatagramSocket,但是DatagramPackets要求我指定要读取的数据包的大小.

总而言之,我需要找到一种方法在本地端口5004上侦听未知大小的RTP数据包,而无需连接到特定的远程主机/地址.任何帮助是极大的赞赏!

编辑:

现在,我已经设置了一个ServerSocket来监听连接,但是我仍然无法读取任何数据包.

try {   ServerSocket server = new ServerSocket(5004);
        Socket s = server.accept();
        BufferedReader rtpReader = new BufferedReader(new InputStreamReader(s.getInputStream()));
        while (true){
            int k = rtpReader.read();
            if (k == -1) break;
            System.out.println(k);
        }
}

注意:RTP数据包通过组播地址发送.

问题出在多播.请参阅尼古拉的答案.非常感谢!

解决方法:

您必须使用java.net.MulticastSocket,并加入多播组.就像是:

// put your multicast address here
InetAddress group = InetAddress.getByName( "244.10.10.10" );
MulticastSocket sock = new MulticastSocket( 5004 );
sock.joinGroup( group );

byte[] buf = new byte[1472];
DatagramPacket pack = new DatagramPacket( buf, buf.length );

while ( whatever ) {
    sock.receive( pack );
    // handle data
}

sock.leaveGroup( group );
上一篇:RabbitMQ学习总结 第三篇:工作队列Work Queue


下一篇:janus libsrtp rtp/rtcp数据加密