如何编码服务器/客户端视频和音频流应用程序?

问题描述:

我必须创建一个客户端/服务器系统来流式传输视频和音频。这将是非常简单的。喜欢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://*.com/questions/2294641/how-to-make-a-java-applet-that-displays-youtube-embed-video – trashgod 2010-02-22 01:00:06

对于流式传输和与客户交谈,您需要定义一个协议:在网络上搜索RTP和RTSP。它应该给你一个你需要实现这些协议甚至创建你自己的协议的好主意。

至于实施,看看在RED5项目:http://osflash.org/red5

看看Xuggler还有:http://www.xuggle.com/xuggler/该项目将帮助您节省大量的代码行。

干杯。

退房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的。接受阻塞,直到客户端连接,否则,你会产生无限数量的线程,但没有连接......我认为你现在没有什么能够阻止你这样做。

非常感谢你的回答和编辑标题。 我在这里是新的,新的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); 
    ... 

考虑看看你说的是什么人。 亲切的问候!