2010-02-22 4 views
9

Muszę stworzyć system klient/serwer do strumieniowego przesyłania wideo i audio. To byłoby bardzo proste. Jak w stylu youtube. Serwer powinien najpierw uczestniczyć w wyświetlaniu listy mediów i czekać na wybór każdego klienta, aby rozpocząć przesyłanie strumieniowe multimediów. Do czasu utworzenia gniazda i pokazania prostej listy jestem na tym;) Ale nie wiem, której klasy mogę użyć do streamowania. Przykład jest w zasadzie w stylu youtube. Jak rozpocząć transmisję strumieniową, Jak można wstrzymać reprodukcję klienta, w jaki sposób? Wiem, jak przesyłać strumieniowo tekst, ale co z wideo? Czy znasz jakąś stronę samouczka? To bardzo różni się od tego prostego przykładu klienta serwera?W jaki sposób mogę zakodować aplikację strumieniowania wideo i audio serwera/klienta?

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(); 
     } 
} 

Mam nadzieję, że możesz wyjaśnić moje pomysły. Pozdrawiam.

+1

Jakie są Twoje wrażenia z pracy w sieci Java? Czy masz kodowany, powiedzmy, prosty serwer WWW w Javie? –

+0

Duplikat? http://stackoverflow.com/questions/2294641/how-to-make-a-java-applet-that-displays-youtube-embed-video – trashgod

Odpowiedz

6

Aby przesyłać strumieniowo i rozmawiać z klientami, musisz zdefiniować protokół: Wyszukaj w sieci dla RTP i RTSP. To powinno dać ci całkiem niezły pomysł na to, co potrzebujesz, aby zaimplementować te protokoły, a nawet stworzyć własne.

chodzi o wdrażanie, spojrzeć na projekt red5: http://osflash.org/red5

Spójrz na Xuggler także: http://www.xuggle.com/xuggler/ Ten projekt pomoże Ci oszczędność wiele linii kodu.

Pozdrawiam.

1

Zapoznaj się z Java Media Framework (ma tutoriale): http://java.sun.com/javase/technologies/desktop/media/jmf/

Czy to jeszcze działa?

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

Myślę, że Twój kod będzie produkować kilka wątków z przychodzących połączeń gniazd ... co prawdopodobnie chcesz zrobić to w ten sposób:

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

ThreadedEchoHandler powinien wziąć Socket zamiast ServerSocket . Zaakceptuj bloki, dopóki klient się nie połączy, w przeciwnym razie pojawi się nieskończona liczba wątków bez połączenia ... Nie sądzę, że masz coś, co powstrzyma cię przed zrobieniem tego w tej chwili.

0

Dziękuję bardzo za odpowiedzi i edycję tytułu. Jestem nowy tutaj, nowy na java, nowy w sieci. Dlaczego używam swoich umiejętności w transmisji strumieniowej? To sprawa studium. Patrzę na wiele tutoriali na temat networkingu i widziałem RTP, ale nie czytałem o tym, bo pomyślałem (do czytania na forach) to było po prostu w czasie rzeczywistym streming oznaczony jako streaming webcam ... ale to, że ja ' m tak zdezorientowany LOL

Lirik oczywiście to, co pan powiedział, zapomniałem niektóre linie kodowania

while(true) { 
    Socket incoming = s.accept(); 
    Runnable r = new ThreadedEchoHandler(incoming, i); 
    ... 

lub jak powiedział

while(true) { 
    Runnable r = new ThreadedEchoHandler(s.accept(), i); 
    ... 

Przyjrzeniu co mówiłeś chłopaki. Pozdrawiam!

Powiązane problemy