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

我必须创建一个客户端/服务器系统来流式传输video和音频。 这很简单。 喜欢youtube风格。 服务器应首先参加提供媒体列表的客户端,并等待每个客户端的选择以开始流式传输媒体。 直到创建一个套接字并显示一个简单的列表我就在它上面;)但我不知道我可以使用哪个类来传输。 这个例子基本上是youtube风格。 如何开始流式传输,客户端如何暂停再现,怎么能? 我知道如何流式传输文字,但video呢? 你知道任何教程页吗? 它与这个简单的服务器客户端示例有很大不同?

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

希望你能澄清我的想法。 亲切的问候。

对于流式传输和与客户交谈,您需要定义协议:在Web上搜索RTP和RTSP。 它应该让您非常了解实现这些协议所需的内容,甚至可以创建自己的协议。

至于实现,请看一下red5项目: http : //red5.org/

看看Xuggler: http ://www.xuggle.com/xuggler/这个项目将帮助您节省大量的代码。 请注意,它的发展已经过时了。

干杯。

查看Java Media Framework(它有教程): 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应该使用Socket而不是ServerSocket。 接受块直到客户端连接,否则你将在没有连接的情况下产生无限数量的线程…我认为你没有任何东西可以阻止你这样做。

伙计们非常感谢你的答案和编辑标题。 我是新手,java新手,网络新手。 为什么我在流媒体上的技巧? 这是一个研究案例。 我正在看很多关于网络的教程,我看到了RTP,但我没有看到因为我认为(因为在论坛上阅读)它只是用于实时流动意味着网络摄像头流……但它就是我的只是这么困惑大声笑

Lirik当然你所说的,我忘记了一些编码

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

或者如你所说

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

看看你说的家伙们。 亲切的问候!