web-dev-qa-db-ja.com

サーバー/クライアントのビデオおよびオーディオストリーミングアプリケーションをコーディングするにはどうすればよいですか?

ビデオとオーディオをストリーミングするためのクライアント/サーバーシステムを作成する必要があります。それは非常に簡単でしょう。 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();
      }
}

私の考えを明確にしていただければ幸いです。敬具。

11
soneangel

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

実装に関しては、red5プロジェクトを見てください: http://red5.org/

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

乾杯。

10
Rafael Sierra

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

1
Kiril

皆さんの回答とタイトルの編集に感謝します。私はここで新しく、Javaで新しく、ネットワーキングで新しいです。なぜストリーミングのスキルを身に付けているのですか?これは研究事例です。私はネットワーキングに関する多くのチュートリアルを見ていますが、RTPですが、(フォーラムで読むために)ウェブカメラストリーミングを意味するリアルタイムストレミングのためだけだと思ったので、 'については読みませんでした...でもそれは私がとても混乱しているということですLOL

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

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

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

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

あなたが言ったことを見てください。敬具!

0
soneangel