package de.debugco.jairport; import javax.jmdns.JmDNS; import javax.jmdns.JmmDNS; import javax.jmdns.ServiceInfo; import javax.jmdns.impl.JmmDNSImpl; import javax.jmdns.impl.NetworkTopologyEventImpl; import javax.swing.*; import java.io.IOException; import java.net.InetAddress; public class JAirPort { private static JmmDNS dns; private static volatile Thread serverThread; public static void main(String[] args) throws Exception { Runtime.getRuntime().addShutdownHook(new ShutdownThread()); String hwAddr = Utils.byteAddrToString(Configuration.getHardwareAddress()); String host = Configuration.getHostName(); String name = hwAddr + "@JAirPort on " + host; int port = Configuration.getPort(); // Announce Raop Service ServiceInfo info = ServiceInfo.create(name + "._raop._tcp.local", name, port, "tp=UDP sm=false sv=false ek=1 et=0,1 cn=0,1 ch=2 ss=16 sr=44100 pw=false vn=3 txtvers=1"); dns = JmmDNS.Factory.getInstance(); ((JmmDNSImpl)dns).inetAddressAdded(new NetworkTopologyEventImpl(JmDNS.create(InetAddress.getByName("localhost")), InetAddress.getByName("localhost"))); Thread.sleep(1000); // If this isn't done the Announcement sometimes doesn't go out on the local interface dns.registerService(info); System.out.println("Service registered"); // Start RtspServer RtspServer server = new RtspServer(port); serverThread = new Thread(server, "RtspServer"); serverThread.setDaemon(false); serverThread.start(); serverThread.join(); } public static class ShutdownThread extends Thread { @Override public void run() { System.out.println("Shutting down..."); if(serverThread != null) { serverThread.interrupt(); } if (dns != null) { dns.unregisterAllServices(); try { dns.close(); } catch (IOException e) { // ignore } dns = null; } } } }