2010-02-22 122 views
9

我必須創建一個客戶端/服務器系統來流式傳輸視頻和音頻。這將是非常簡單的。喜歡YouTube風格。服務器應該首先參加提供媒體列表的客戶端,並等待每個客戶端選擇開始流式傳輸媒體。直到創建一個套接字並顯示一個簡單的列表爲止);但是我不知道我可以使用哪個類進行流式處理。這個例子基本上是YouTube風格。我如何開始流式傳輸,客戶端如何暫停再現,怎麼樣? 我知道如何流文本,但視頻呢?你知道任何教程頁嗎? 這與這個簡單的服務器客戶端示例有很大的不同?如何編碼服務器/客戶端視頻和音頻流應用程序?

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

希望你能澄清我的想法。 親切的問候。

+1

您對Java網絡有什麼經驗?你是否用Java編碼了一個簡單的Web服務器? – 2010-02-22 00:58:15

+0

重複? http://stackoverflow.com/questions/2294641/how-to-make-a-java-applet-that-displays-youtube-embed-video – trashgod 2010-02-22 01:00:06

回答

6

對於流式傳輸和與客戶交談,您需要定義一個協議:在網絡上搜索RTP和RTSP。它應該給你一個你需要實現這些協議甚至創建你自己的協議的好主意。

至於實施,看看在RED5項目:http://osflash.org/red5

看看Xuggler還有:http://www.xuggle.com/xuggler/該項目將幫助您節省大量的代碼行。

乾杯。

1

退房Java媒體框架(有教程):http://java.sun.com/javase/technologies/desktop/media/jmf/

這是否甚至工作?

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

我覺得你的代碼將產生一串與傳入套接字連接的線程...你可能想要做的是這樣的:

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

ThreadedEchoHandler應採取插槽,而不是一個ServerSocket的。接受阻塞,直到客戶端連接,否則,你會產生無限數量的線程,但沒有連接......我認爲你現在沒有什麼能夠阻止你這樣做。

0

非常感謝你的回答和編輯標題。 我在這裏是新的,新的Java,新的網絡。 爲什麼我正在使我的流媒體技能?這是一個研究案例。 我在看關於網絡的許多教程,我看到RTP,但我沒有閱讀有關因爲我認爲(在論壇上閱讀)它只是實時streming意味着網絡攝像頭流......但這是我'米只是很困惑LOL

Lirik當然你說什麼,我忘了編碼

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

的一些線條或如你所說

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

考慮看看你說的是什麼人。 親切的問候!