// Cleanup for disconnect private static void cleanUp() { try { if (hostServer != null) { hostServer.close(); hostServer = null; } } catch (IOException e) { hostServer = null; } try { if (socket != null) { socket.close(); socket = null; } } catch (IOException e) { socket = null; } try { if (in != null) { in.close(); in = null; } } catch (IOException e) { in = null; } if (out != null) { out.close(); out = null; } }
// ------------------------------------ // main // ------------------------------------ public static void main(String argv[]) throws Exception { // create a Server object Server theServer = new Server(); // show GUI: theServer.pack(); theServer.setVisible(true); // get RTSP socket port from the command line int RTSPport = Integer.parseInt(argv[0]); // Initiate TCP connection with the client for the RTSP session ServerSocket listenSocket = new ServerSocket(RTSPport); theServer.RTSPsocket = listenSocket.accept(); listenSocket.close(); // Get Client IP address theServer.ClientIPAddr = theServer.RTSPsocket.getInetAddress(); // Initiate RTSPstate state = INIT; // Set input and output stream filters: RTSPBufferedReader = new BufferedReader(new InputStreamReader(theServer.RTSPsocket.getInputStream())); RTSPBufferedWriter = new BufferedWriter(new OutputStreamWriter(theServer.RTSPsocket.getOutputStream())); // Wait for the SETUP message from the client int request_type; boolean done = false; while (!done) { request_type = theServer.parse_RTSP_request(); // blocking if (request_type == SETUP) { done = true; // update RTSP state state = READY; System.out.println("New RTSP state: READY"); // Send response theServer.send_RTSP_response(); // init the VideoStream object: theServer.video = new VideoStream(VideoFileName); // init RTP socket theServer.RTPsocket = new DatagramSocket(); } } // loop to handle RTSP requests while (true) { // parse the request request_type = theServer.parse_RTSP_request(); // blocking if ((request_type == PLAY) && (state == READY)) { // send back response theServer.send_RTSP_response(); // start timer theServer.timer.start(); // update state state = PLAYING; System.out.println("New RTSP state: PLAYING"); } else if ((request_type == PAUSE) && (state == PLAYING)) { // send back response theServer.send_RTSP_response(); // stop timer theServer.timer.stop(); // update state state = READY; System.out.println("New RTSP state: READY"); } else if (request_type == TEARDOWN) { // send back response theServer.send_RTSP_response(); // stop timer theServer.timer.stop(); // close sockets theServer.RTSPsocket.close(); theServer.RTPsocket.close(); System.exit(0); } } }