Как я могу кодировать сервер / клиент видео и аудио потокового приложения? - PullRequest
10 голосов
/ 22 февраля 2010

Мне нужно создать систему клиент / сервер для потоковой передачи видео и аудио. Это было бы очень просто. Как стиль 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 ]

10 голосов
/ 22 февраля 2010

Для потоковой передачи и разговора с вашими клиентами вам нужно определить протокол: поиск в сети RTP и RTSP. Это должно дать вам довольно хорошее представление о том, что вам нужно для реализации этих протоколов или даже создать свой собственный.

Что касается реализации, взгляните на проект red5: http://red5.org/

Взгляните также на Xuggler: http://www.xuggle.com/xuggler/ Этот проект поможет вам сэкономить много строк кода. Обратите внимание, что его разработка устарела.

Приветствие.

1 голос
/ 22 февраля 2010

Ознакомьтесь с 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. Принимайте блоки, пока клиент не подключится, иначе вы будете создавать бесконечное количество потоков без подключения ... Я не думаю, что у вас есть что-то, что помешает вам сделать это в настоящий момент.

0 голосов
/ 22 февраля 2010

Ребята, большое спасибо за ваши ответы и за редактирование заголовка. Я новичок здесь, новый на Java, новый на сети. Почему я делаю свое мастерство на потоковой передаче? Это учебный случай. Я смотрю многие учебные пособия по работе с сетями, и я видел RTP, но я не читал об этом, потому что я подумал (для чтения на форумах), что это было только в режиме реального времени, что означает потоковую передачу с веб-камеры ... но это то, что я просто так растерялся LOL

Лирик, конечно, то, что вы сказали, я забыл некоторые строки кодирования

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

или как вы сказали

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

Взгляните на то, что вы сказали, ребята. С уважением!

...