2012-09-20 4 views
2

서버의 웹캠에서 원격 클라이언트의 애플릿으로 스트리밍하는 라이브 비디오를 구현해야하는 프로젝트 작업 중입니다.인터넷 또는 로컬 네트워크에서 비디오 스트리밍이 작동하지 않습니다.

나는 서버에 JMF를 통해 RTP & 다음에 그것을 재생 RTP 주소에서 스트리밍 수신 애플릿에 스트리밍 & 배포를 웹캠 라이브 스트림을 캡처위한 코드가 있습니다.

그러나 내 컴퓨터 (서버) &에서만 작동하는 문제는 로컬 네트워크에서 작동하지 않습니다. 애플릿을로드하지만 비디오 플레이어는 실행하지 않습니다.

서버 코드 :

public class Streaming_Server { 

    /** 
    * @param args the command line arguments 
    */ 
    private static String PORT = "10000"; 
    private static InetAddress addr; 
    static final Format[] FORMATS = { new VideoFormat("rgb") }; 
    static final ContentDescriptor CONTENT_DESCRIPTOR = new ContentDescriptor("raw.rtp"); 

    public static void main(String[] args) throws IOException, NoDataSourceException, NoProcessorException, CannotRealizeException, NoDataSinkException { 
     // TODO code application logic here 
     try 
     { 
      addr = InetAddress.getLocalHost(); 
      String ipAddr = addr.getHostAddress(); 
      String hostname = addr.getHostName(); 
      System.out.println("Your IP is " + ipAddr); 
      System.out.println("Your Host Name is " + hostname); 
     } 
     catch (UnknownHostException e){} 


     CaptureDeviceInfo webcamInfooo = new CaptureDeviceInfo("Camera", new MediaLocator("vfw://0"), null); 
     MediaLocator camDeviceMediaLocator = webcamInfooo.getLocator(); 
     DataSource source = Manager.createDataSource(camDeviceMediaLocator); 
     Processor mediaProcessor = Manager.createRealizedProcessor(new ProcessorModel(source, FORMATS, CONTENT_DESCRIPTOR)); 
     //MediaLocator outputMediaLocator = new MediaLocator("rtp://" + addr.getHostAddress() + ":" + PORT + "/video"); 
     MediaLocator outputMediaLocator = new MediaLocator("rtp://192.168.1.4:20000/video"); 
     DataSink dataSink = Manager.createDataSink(mediaProcessor.getDataOutput(), outputMediaLocator); 

     mediaProcessor.start(); 
     dataSink.open(); 
     dataSink.start(); 
    } 
} 

클라이언트 코드 :

public class Streaming_Client extends Applet implements ControllerListener { 

    /** 
    * Initialization method that will be called after the applet is loaded into 
    * the browser. 
    */ 
    Player player = null; 
    private MediaLocator mediaLocator; 
    private static String PORT = "10000"; 
    private static InetAddress addr; 

    public void init() { 
     // TODO start asynchronous download of heavy resources 
     //mediaLocator = new MediaLocator("rtp:/192.168.1.4:10000/video"); 
     mediaLocator = new MediaLocator("rtp:/192.168.1.4:20000/video"); 
     setLayout(new BorderLayout()); 
     try { 
      player = Manager.createPlayer(mediaLocator); 
      player.addControllerListener(this); 
     } catch (IOException | NoPlayerException ex) { 
      Logger.getLogger(Streaming_Client.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public void start(){ 
     player.start(); 
    } 

    public void stop(){ 
     player.stop(); 
     player.deallocate(); 
    } 

    public void destroy(){ 
     player.close(); 
    } 
    // TODO overwrite start(), stop() and destroy() methods 

    @Override 
    public void controllerUpdate(ControllerEvent ce) { 
     if ((ce instanceof RealizeCompleteEvent)) 
     { 
     Component comp; 
     if ((comp = this.player.getVisualComponent()) != null) 
      add("Center", comp); 
     if ((comp = this.player.getControlPanelComponent()) != null) 
      add("South", comp); 
     validate(); 
     } 
    } 
} 
+0

[Java Console] (http://www.java.com/en/download/help/javaconsole.xml)이 열려 있는지 확인하고 출력을 복사하여 붙여 넣으십시오. 나는 일부 '액세스'관련 예외가있을 것이라고 생각합니다. –

답변

3

은 몇 가지 조사 후, 나는 MediaLocator 서버에 대상 IP없는 소스 하나를 취 것을 발견했다.

스트리밍하는 위치를 알아야하기 때문에 귀찮은 일입니다.

그래서,이 편집 후 ..

CaptureDeviceInfo webcamInfooo = new CaptureDeviceInfo("Camera", new MediaLocator("vfw://0"), null); 
MediaLocator camDeviceMediaLocator = webcamInfooo.getLocator(); 
DataSource source = Manager.createDataSource(camDeviceMediaLocator); 
Processor mediaProcessor = Manager.createRealizedProcessor(new ProcessorModel(source, FORMATS, CONTENT_DESCRIPTOR)); 
//MediaLocator outputMediaLocator = new MediaLocator("rtp://" + addr.getHostAddress() + ":" + PORT + "/video"); 
MediaLocator outputMediaLocator = new MediaLocator("rtp://192.168.1.6:20000/video"); 
DataSink dataSink = Manager.createDataSink(mediaProcessor.getDataOutput(), outputMediaLocator); 

은 내가 이상 인트라넷 만 192.168.1.6을 192.168.1.4에서 캡처 라이브 비디오를 스트리밍 할 수 있습니다.

하지만 지금까지 원격 PC IP를 할당해야하므로 인터넷을 통해 스트리밍하는 방법을 찾을 수 없습니다.

+0

애플릿을 게시하고 싶을 때 대상 IP 할당을 피할 수있는 방법이 있습니까? –