Child pages
  • Egyszerű(nek tűnő) RTP probléma
Skip to end of metadata
Go to start of metadata
Sziasztok!

Egy nagyon egyszerű videostreaming progit szeretnék írni, az egyik progi megjeleníti egy webkamera képét, és el is küldi egy másik proginak, ami szintén megjeleníti.

Eddig jutottam:
Az UploaderClient.java megjeleníti a képet és elküldi
import java.awt.*;
import java.awt.event.*;
import javax.media.*;
import javax.media.protocol.*;
import javax.media.format.*;
import javax.media.control.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.util.Vector;

public class UploaderClient extends JFrame {
       public UploaderClient() {
        super("Uploader Client");
        Processor processor = null;
        Player player=null;
        try{
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            Vector devices = CaptureDeviceManager.getDeviceList(new VideoFormat(VideoFormat.YUV));
            CaptureDeviceInfo deviceInfo = (CaptureDeviceInfo) devices.elementAt(0);
            System.out.println(devices);
            DataSource webcamSource = Manager.createDataSource(deviceInfo.getLocator());
            MediaLocator destLoc = new MediaLocator("rtp://localhost:1111/video/1");
            processor = Manager.createProcessor(webcamSource);
            processor.configure();
            while(processor.getState()==Processor.Configuring) {
                Thread.sleep(1000);
                System.out.println("configuring...");
            }
            processor.setContentDescriptor(new ContentDescriptor(ContentDescriptor.RAW_RTP));
            processor.realize();
            while(processor.getState()!=Processor.Realized) {
                Thread.sleep(1000);
                System.out.println("realizing...");
            }
            processor.prefetch();
            while(processor.getState()!=Processor.Prefetched){
                Thread.sleep(1000);
                System.out.println("prefetching...");
            }
            TrackControl[] trackControl = processor.getTrackControls();
            for (int i=0; i<trackControl.length; i++) {
                if (trackControl[i].setFormat(new VideoFormat(VideoFormat.H263_RTP))!=null)
                {
                   break;
                }
                else trackControl[i].setEnabled(false);               
            }
            System.out.println(processor.getDataOutput());
            DataSink dataSink = Manager.createDataSink(processor.getDataOutput(), destLoc);
            dataSink.open();
            dataSink.start();
            //System.out.println(deviceInfo);
            if (processor!=null) System.out.println("processor ok");
            if (processor.getDataOutput()!=null) System.out.println("DataSource ok");
            if (processor.getDataOutput().getLocator()!=null) System.out.println("MediaLocator ok");
            /*player = Manager.createPlayer(processor.getDataOutput());
            JPanel p = new JPanel(new BorderLayout());
            p.add(player.getVisualComponent());
            p.add("South", player.getControlPanelComponent());*/
            JPanel p = new JPanel(new BorderLayout());
            player=Manager.createRealizedPlayer(webcamSource);
            p.add(player.getVisualComponent());
            setContentPane(p);
            setSize(640, 480);
            setVisible(true);
            player.start();
        } catch (Exception ex) {ex.printStackTrace();} finally {
            //System.out.println("Final");
            //processor.close(); processor.stop(); processor.deallocate();
            //player.close(); player.stop(); player.deallocate();
        }
    }  
    public static void main(String[] args) {
        new UploaderClient();
    }
}

Az RTPServer.java megkapja a képet az UploaderClient-től és megjeleníti:
import java.awt.*;
import javax.media.*;
import javax.media.protocol.*;
import javax.media.format.*;
import javax.media.control.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.util.Vector;

public class RTPServer extends JFrame {   
    public RTPServer() {
        super("Server");
        System.out.println("super");
        Player player=null;
        try{
        MediaLocator url = new MediaLocator("rtp://localhost:1111/video/1");
        System.out.println(url+" "+player);
        player = Manager.createRealizedPlayer(url);
        System.out.println("player");
        //player.realize();
        //System.out.println("realizing started on: "+player);
        //setDefaultCloseOperation(EXIT_ON_CLOSE);   
        setLayout(new BorderLayout());   
        add(player.getVisualComponent());
        System.out.println("added");
        setSize(640, 480);
        setVisible(true);
        System.out.println("visible");
        }catch (Exception ex){ex.printStackTrace();}
        }

    public static void main(String[] args)
    {
        System.out.println("started");
        new RTPServer();  
    }
}
A baj az, hogy az RTPServer nem akarja létrehozni a playert, a realizálás közben megáll a progi (nem ér véget, csak nem akar továbbmenni), router mögül vagyok, de forwardolja az 1111es portot tehát azzal elvileg nem lehet baj....

Remélem tudtok segíteni,
Crystal
      
      
Page viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels