¿Cómo puedo codificar una aplicación de transmisión de audio y video de servidor / cliente?

Tengo que crear un sistema cliente / servidor para transmitir video y audio. Sería muy simple Me gusta el estilo de youtube. El servidor debe atender a los clientes proporcionando primero una lista de medios y esperando la elección de cada cliente para comenzar a transmitir los medios. Hasta que cree un socket y muestre una lista simple, estoy en él;) Pero no sé qué clase podría usar para transmitir. El ejemplo es básicamente el estilo de youtube. ¿Cómo puedo comenzar a transmitir, cómo el cliente puede pausar la reproducción, cómo puede? Sé cómo transmitir texto, pero ¿qué pasa con el video? ¿Conoces alguna página de tutorial? ¿Es muy diferente de este simple ejemplo de cliente de servidor?

import java.io.*; 
import java.io.*;
import java.net.*;

public class ThreadedEchoServer {

   public static void main(String[] args) {
      try {
         int i = 1;
         ServerSocket s = new ServerSocket(8189);

         while(true) {
            Runnable r = new ThreadedEchoHandler(incoming, i);
            Thread t = new Thread(r);
            t.start();
            i++;
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

class ThreadedEchoHandler implements Runnable {
   private Socket incoming;
   private int counter;

   public ThreadedEchoHandler(Socket i, int c) {
      incoming = i;
      counter = c;
   }

   public void run() {
      try {
         try {
            InputStream inStream = incoming.getInputStream();
        ,    OutputStream outStream = incoming.getOutputStream();

            Scanner in = new Scanner(inStream);
            PrintWriter out = new PrintWriter(outStream);

            out.println("BYE to exit");
            boolean done = false;

            while (!done && in.hasNextLine()) {

               String line = in.nextLine()) {
               out.println("Echo: " + line);

               if (line.trim().equals("BYE"))
                  done = true;
               out.println("BYE to exit");
            }
         } finally {
            incoming.close();
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
}

Espero que puedas aclarar mis ideas. Saludos cordiales.

Respuestas a la pregunta(3)

Su respuesta a la pregunta