10


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

あなたが私のアイデアを明確にできることを願っています。 敬具。

3 Answer


10


クライアントへのストリーミングおよび通話を行うには、プロトコルを定義する必要があります。RTPおよびRTSPについてWebを検索します。 これらのプロトコルを実装するために必要なもの、または独自のプロトコルを作成するために必要なものについて、かなり良いアイデアを提供するはずです。

実装については、red5プロジェクトをご覧ください:http://red5.org/

Xugglerもご覧ください:http://www.xuggle.com/xuggler/このプロジェクトは、多くのコード行を節約するのに役立ちます。 その開発は古くなっていることに注意してください。

乾杯。


1


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`はServerSocketの代わりにSocketを取る必要があります。 クライアントが接続するまでブロックを受け入れます。そうしないと、接続なしで無限の数のスレッドが生成されます…​ 現時点であなたがそれをするのを妨げるものはないと思います。


0


回答とタイトルの編集に感謝します。 私はここで新しく、Javaで、ネットワークで新しいです。 ストリーミングでスキルを発揮しているのはなぜですか? スタディケースです。 私はネットワーキングに関する多くのチュートリアルを見て、RTPを見ましたが、「フォーラムで読むために」それがウェブカメラストリーミングを意味するリアルタイムストレミングのためだけだと思ったので、私は読んでいませんでした…​しかし、それは私ですとても混乱しています

リリックはもちろんあなたが言ったこと、私はコーディングのいくつかの行を忘れました

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

またはあなたが言ったように

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

あなたが言ったことを見てみましょう。 敬具!