JMF - AVReceive/AVTrasmit

Hi,
i'm developing an application that uses jmf.
I don't understand how to open an RTP session(receinve or trasmit) from a remote host/phone.
In the example code there is:
localAddr = new SessionAddress (InetAddress.getLocalHost().....????)
I don't want trasmit or receive from the local host but i'd like to launch the application on my computer and so to start a rtp trasmission between 2 remote phones.
Help!!!

Well.. you have to take it from avtransmit2.java that I posted here several times. It only does G.711 though (see why: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6278751), it takes a while to initiate a streaming session, and above all, your description is all wrong. You can't run a JMF app on PC1, and to have it trigger an RTP stream between PC2 and a phone.. for that you'd need the RTP streaming app on PC2, and it would have to offer some remote means to start a stream.
If you know JTAPI and understand AVTransmit2 then all that is left to be done is put the two together.

Similar Messages

  • JMF How to stream rtp from udp packet

    I implemented an rtsp client and use the client to setup two rtp session(audio, vedio). But when I use the example pramgram "AVReceive3" to stream the udp packet, it doesn't work.
    When the AVReceive3 receive the udp packet from the rtp port, it will call the update(ReceiveStreamEvent evt) function, and the event type is StreamMappedEvent, and the call to evt.getReceiveStream().getDataSource() return null.
    I thought the first event should be NewReceiveStreamEvent. Please help to solve the problem.
    What's rtp packet will cause the event StreamMappedEvent.
    Following is the code of AVReceive3.java:
    * AVReceive3.java
    * Created on 2007年10月30日, 下午4:11
    * To change this template, choose Tools | Template Manager
    * and open the template in the editor.
    package PlayerTest;
    import java.io.*;
    import java.awt.*;
    import java.net.*;
    import java.awt.event.*;
    import java.util.Vector;
    import javax.media.*;
    import javax.media.rtp.*;
    import javax.media.rtp.event.*;
    import javax.media.rtp.rtcp.*;
    import javax.media.protocol.*;
    import javax.media.protocol.DataSource;
    import javax.media.format.AudioFormat;
    import javax.media.format.VideoFormat;
    import javax.media.Format;
    import javax.media.format.FormatChangeEvent;
    import javax.media.control.BufferControl;
    * AVReceive3 to receive RTP transmission using the RTPConnector.
    public class AVReceive3 extends Thread implements ReceiveStreamListener, SessionListener,
    ControllerListener
    String sessions[] = null;
    RTPManager mgrs[] = null;
    Vector playerWindows = null;
    boolean dataReceived = false;
    Object dataSync = new Object();
    public AVReceive3(String sessions[])
    this.sessions = sessions;
    public void run()
    initialize();
    public boolean initialize() {
    try {
    mgrs = new RTPManager[sessions.length];
    playerWindows = new Vector();
    SessionLabel session;
    // Open the RTP sessions.
    for (int i = 0; i < sessions.length; i++) {
    // Parse the session addresses.
    try {
    session = new SessionLabel(sessions);
    } catch (IllegalArgumentException e) {
    System.err.println("Failed to parse the session address given: " + sessions[i]);
    return false;
    System.err.println(" - Open RTP session for: addr: " + session.addr + " port: " + session.port + " ttl: " + session.ttl);
    mgrs[i] = (RTPManager) RTPManager.newInstance();
    mgrs[i].addSessionListener(this);
    mgrs[i].addReceiveStreamListener(this);
    // Initialize the RTPManager with the RTPSocketAdapter
    mgrs[i].initialize(new RTPSocketAdapter(
    InetAddress.getByName(session.addr),
    session.port, session.ttl));
    // You can try out some other buffer size to see
    // if you can get better smoothness.
    BufferControl bc = (BufferControl)mgrs[i].getControl("javax.media.control.BufferControl");
    if (bc != null)
    bc.setBufferLength(350);
    } catch (Exception e){
    System.err.println("Cannot create the RTP Session: " + e.getMessage());
    return false;
    // Wait for data to arrive before moving on.
    long then = System.currentTimeMillis();
    long waitingPeriod = 30000; // wait for a maximum of 30 secs.
    try{
    synchronized (dataSync) {
    while (!dataReceived &&
    System.currentTimeMillis() - then < waitingPeriod) {
    if (!dataReceived)
    System.err.println(" - Waiting for RTP data to arrive");
    dataSync.wait(1000);
    } catch (Exception e) {}
    if (!dataReceived) {
    System.err.println("No RTP data was received.");
    close();
    return false;
    return true;
    public boolean isDone() {
    return playerWindows.size() == 0;
    * Close the players and the session managers.
    protected void close() {
    for (int i = 0; i < playerWindows.size(); i++) {
    try {
    ((PlayerWindow)playerWindows.elementAt(i)).close();
    } catch (Exception e) {}
    playerWindows.removeAllElements();
    // close the RTP session.
    for (int i = 0; i < mgrs.length; i++) {
    if (mgrs[i] != null) {
    mgrs[i].removeTargets( "Closing session from AVReceive3");
    mgrs[i].dispose();
    mgrs[i] = null;
    PlayerWindow find(Player p) {
    for (int i = 0; i < playerWindows.size(); i++) {
    PlayerWindow pw = (PlayerWindow)playerWindows.elementAt(i);
    if (pw.player == p)
    return pw;
    return null;
    PlayerWindow find(ReceiveStream strm) {
    for (int i = 0; i < playerWindows.size(); i++) {
    PlayerWindow pw = (PlayerWindow)playerWindows.elementAt(i);
    if (pw.stream == strm)
    return pw;
    return null;
    * SessionListener.
    public synchronized void update(SessionEvent evt) {
    if (evt instanceof NewParticipantEvent) {
    Participant p = ((NewParticipantEvent)evt).getParticipant();
    System.err.println(" - A new participant had just joined: " + p.getCNAME());
    * ReceiveStreamListener
    public synchronized void update( ReceiveStreamEvent evt) {
    System.out.println("\nReceive an receiveStreamEvent:"+evt.toString());
    RTPManager mgr = (RTPManager)evt.getSource();
    Participant participant = evt.getParticipant(); // could be null.
    ReceiveStream stream = evt.getReceiveStream(); // could be null.
    System.out.println("The RTPManager is:");
    if (evt instanceof RemotePayloadChangeEvent) {
    System.err.println(" - Received an RTP PayloadChangeEvent.");
    System.err.println("Sorry, cannot handle payload change.");
    System.exit(0);
    else if (evt instanceof NewReceiveStreamEvent) {
    try {
    stream = ((NewReceiveStreamEvent)evt).getReceiveStream();
    DataSource ds = stream.getDataSource();
    // Find out the formats.
    RTPControl ctl = (RTPControl)ds.getControl("javax.media.rtp.RTPControl");
    if (ctl != null){
    System.err.println(" - Recevied new RTP stream: " + ctl.getFormat());
    } else
    System.err.println(" - Recevied new RTP stream");
    if (participant == null)
    System.err.println(" The sender of this stream had yet to be identified.");
    else {
    System.err.println(" The stream comes from: " + participant.getCNAME());
    // create a player by passing datasource to the Media Manager
    Player p = javax.media.Manager.createPlayer(ds);
    if (p == null)
    return;
    p.addControllerListener(this);
    p.realize();
    PlayerWindow pw = new PlayerWindow(p, stream);
    playerWindows.addElement(pw);
    pw.setVisible(true);
    // Notify intialize() that a new stream had arrived.
    synchronized (dataSync) {
    dataReceived = true;
    dataSync.notifyAll();
    } catch (Exception e) {
    System.err.println("NewReceiveStreamEvent exception " + e.getMessage());
    return;
    else if (evt instanceof StreamMappedEvent) {
    if (stream != null)
    if(stream.getDataSource()!=null)
    DataSource ds = stream.getDataSource();
    // Find out the formats.
    RTPControl ctl = (RTPControl)ds.getControl("javax.media.rtp.RTPControl");
    System.err.println(" - The previously unidentified stream ");
    if (ctl != null)
    System.err.println(" " + ctl.getFormat());
    System.err.println(" had now been identified as sent by: " + participant.getCNAME());
    else if (evt instanceof ByeEvent) {
    System.err.println(" - Got \"bye\" from: " + participant.getCNAME());
    PlayerWindow pw = find(stream);
    if (pw != null) {
    pw.close();
    playerWindows.removeElement(pw);
    * ControllerListener for the Players.
    public synchronized void controllerUpdate(ControllerEvent ce) {
    Player p = (Player)ce.getSourceController();
    if (p == null)
    return;
    // Get this when the internal players are realized.
    if (ce instanceof RealizeCompleteEvent) {
    PlayerWindow pw = find(p);
    if (pw == null) {
    // Some strange happened.
    System.err.println("Internal error!");
    System.exit(-1);
    pw.initialize();
    pw.setVisible(true);
    p.start();
    if (ce instanceof ControllerErrorEvent) {
    p.removeControllerListener(this);
    PlayerWindow pw = find(p);
    if (pw != null) {
    pw.close();
    playerWindows.removeElement(pw);
    System.err.println("AVReceive3 internal error: " + ce);
    * A utility class to parse the session addresses.
    class SessionLabel {
    public String addr = null;
    public int port;
    public int ttl = 1;
    SessionLabel(String session) throws IllegalArgumentException {
    int off;
    String portStr = null, ttlStr = null;
    if (session != null && session.length() > 0) {
    while (session.length() > 1 && session.charAt(0) == '/')
    session = session.substring(1);
    // Now see if there's a addr specified.
    off = session.indexOf('/');
    if (off == -1) {
    if (!session.equals(""))
    addr = session;
    } else {
    addr = session.substring(0, off);
    session = session.substring(off + 1);
    // Now see if there's a port specified
    off = session.indexOf('/');
    if (off == -1) {
    if (!session.equals(""))
    portStr = session;
    } else {
    portStr = session.substring(0, off);
    session = session.substring(off + 1);
    // Now see if there's a ttl specified
    off = session.indexOf('/');
    if (off == -1) {
    if (!session.equals(""))
    ttlStr = session;
    } else {
    ttlStr = session.substring(0, off);
    if (addr == null)
    throw new IllegalArgumentException();
    if (portStr != null) {
    try {
    Integer integer = Integer.valueOf(portStr);
    if (integer != null)
    port = integer.intValue();
    } catch (Throwable t) {
    throw new IllegalArgumentException();
    } else
    throw new IllegalArgumentException();
    if (ttlStr != null) {
    try {
    Integer integer = Integer.valueOf(ttlStr);
    if (integer != null)
    ttl = integer.intValue();
    } catch (Throwable t) {
    throw new IllegalArgumentException();
    * GUI classes for the Player.
    class PlayerWindow extends Frame {
    Player player;
    ReceiveStream stream;
    PlayerWindow(Player p, ReceiveStream strm) {
    player = p;
    stream = strm;
    public void initialize() {
    add(new PlayerPanel(player));
    public void close() {
    player.close();
    setVisible(false);
    dispose();
    public void addNotify() {
    super.addNotify();
    pack();
    * GUI classes for the Player.
    class PlayerPanel extends Panel {
    Component vc, cc;
    PlayerPanel(Player p) {
    setLayout(new BorderLayout());
    if ((vc = p.getVisualComponent()) != null)
    add("Center", vc);
    if ((cc = p.getControlPanelComponent()) != null)
    add("South", cc);
    public Dimension getPreferredSize() {
    int w = 0, h = 0;
    if (vc != null) {
    Dimension size = vc.getPreferredSize();
    w = size.width;
    h = size.height;
    if (cc != null) {
    Dimension size = cc.getPreferredSize();
    if (w == 0)
    w = size.width;
    h += size.height;
    if (w < 160)
    w = 160;
    return new Dimension(w, h);
    public static void main(String argv[]) {
    //if (argv.length == 0)
    // prUsage();
    String sessions[]= new String[] {"127.0.0.1/6670","127.0.0.1/6672"};
    AVReceive3 avReceive = new AVReceive3(sessions);
    if (!avReceive.initialize()) {
    System.err.println("Failed to initialize the sessions.");
    System.exit(-1);
    // Check to see if AVReceive3 is done.
    try {
    while (!avReceive.isDone())
    Thread.sleep(1000);
    } catch (Exception e) {}
    System.err.println("Exiting AVReceive3");
    static void prUsage() {
    System.err.println("Usage: AVReceive3 <session> <session> ");
    System.err.println(" <session>: <address>/<port>/<ttl>");
    System.exit(0);
    }// end of AVReceive3
    Following is the code of RTPSocketAdapter.java:
    * RTPSocketAdapter.java
    * Created on 2007&#24180;10&#26376;30&#26085;, &#19979;&#21320;4:13
    * To change this template, choose Tools | Template Manager
    * and open the template in the editor.
    package PlayerTest;
    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.DatagramSocket;
    import java.net.MulticastSocket;
    import java.net.DatagramPacket;
    import java.net.SocketException;
    import javax.media.protocol.DataSource;
    import javax.media.protocol.PushSourceStream;
    import javax.media.protocol.ContentDescriptor;
    import javax.media.protocol.SourceTransferHandler;
    import javax.media.rtp.RTPConnector;
    import javax.media.rtp.OutputDataStream;
    * An implementation of RTPConnector based on UDP sockets.
    public class RTPSocketAdapter implements RTPConnector {
    DatagramSocket dataSock;
    DatagramSocket ctrlSock;
    InetAddress addr;
    int port;
    SockInputStream dataInStrm = null;
    SockInputStream ctrlInStrm = null;
    SockOutputStream dataOutStrm = null;
    SockOutputStream ctrlOutStrm = null;
    public RTPSocketAdapter(InetAddress addr, int port) throws IOException {
    this(addr, port, 1);
    public RTPSocketAdapter(InetAddress addr, int port, int ttl) throws IOException {
    try {
    if (addr.isMulticastAddress()) {
    dataSock = new MulticastSocket(port);
    ctrlSock = new MulticastSocket(port+1);
    ((MulticastSocket)dataSock).joinGroup(addr);
    ((MulticastSocket)dataSock).setTimeToLive(ttl);
    ((MulticastSocket)ctrlSock).joinGroup(addr);
    ((MulticastSocket)ctrlSock).setTimeToLive(ttl);
    } else {
    dataSock = new DatagramSocket(port, InetAddress.getLocalHost());
    ctrlSock = new DatagramSocket(port+1, InetAddress.getLocalHost());
    } catch (SocketException e) {
    throw new IOException(e.getMessage());
    this.addr = addr;
    this.port = port;
    * Returns an input stream to receive the RTP data.
    public PushSourceStream getDataInputStream() throws IOException {
    if (dataInStrm == null) {
    dataInStrm = new SockInputStream(dataSock, addr, port);
    dataInStrm.start();
    return dataInStrm;
    * Returns an output stream to send the RTP data.
    public OutputDataStream getDataOutputStream() throws IOException {
    if (dataOutStrm == null)
    dataOutStrm = new SockOutputStream(dataSock, addr, port);
    return dataOutStrm;
    * Returns an input stream to receive the RTCP data.
    public PushSourceStream getControlInputStream() throws IOException {
    if (ctrlInStrm == null) {
    ctrlInStrm = new SockInputStream(ctrlSock, addr, port+1);
    ctrlInStrm.start();
    return ctrlInStrm;
    * Returns an output stream to send the RTCP data.
    public OutputDataStream getControlOutputStream() throws IOException {
    if (ctrlOutStrm == null)
    ctrlOutStrm = new SockOutputStream(ctrlSock, addr, port+1);
    return ctrlOutStrm;
    * Close all the RTP, RTCP streams.
    public void close() {
    if (dataInStrm != null)
    dataInStrm.kill();
    if (ctrlInStrm != null)
    ctrlInStrm.kill();
    dataSock.close();
    ctrlSock.close();
    * Set the receive buffer size of the RTP data channel.
    * This is only a hint to the implementation. The actual implementation
    * may not be able to do anything to this.
    public void setReceiveBufferSize( int size) throws IOException {
    dataSock.setReceiveBufferSize(size);
    * Get the receive buffer size set on the RTP data channel.
    * Return -1 if the receive buffer size is not applicable for
    * the implementation.
    public int getReceiveBufferSize() {
    try {
    return dataSock.getReceiveBufferSize();
    } catch (Exception e) {
    return -1;
    * Set the send buffer size of the RTP data channel.
    * This is only a hint to the implementation. The actual implementation
    * may not be able to do anything to this.
    public void setSendBufferSize( int size) throws IOException {
    dataSock.setSendBufferSize(size);
    * Get the send buffer size set on the RTP data channel.
    * Return -1 if the send buffer size is not applicable for
    * the implementation.
    public int getSendBufferSize() {
    try {
    return dataSock.getSendBufferSize();
    } catch (Exception e) {
    return -1;
    * Return the RTCP bandwidth fraction. This value is used to
    * initialize the RTPManager. Check RTPManager for more detauls.
    * Return -1 to use the default values.
    public double getRTCPBandwidthFraction() {
    return -1;
    * Return the RTCP sender bandwidth fraction. This value is used to
    * initialize the RTPManager. Check RTPManager for more detauls.
    * Return -1 to use the default values.
    public double getRTCPSenderBandwidthFraction() {
    return -1;
    * An inner class to implement an OutputDataStream based on UDP sockets.
    class SockOutputStream implements OutputDataStream {
    DatagramSocket sock;
    InetAddress addr;
    int port;
    public SockOutputStream(DatagramSocket sock, InetAddress addr, int port) {
    this.sock = sock;
    this.addr = addr;
    this.port = port;
    public int write(byte data[], int offset, int len) {
    try {
    sock.send(new DatagramPacket(data, offset, len, addr, port));
    } catch (Exception e) {
    return -1;
    return len;
    * An inner class to implement an PushSourceStream based on UDP sockets.
    class SockInputStream extends Thread implements PushSourceStream {
    DatagramSocket sock;
    InetAddress addr;
    int port;
    boolean done = false;
    boolean dataRead = false;
    SourceTransferHandler sth = null;
    public SockInputStream(DatagramSocket sock, InetAddress addr, int port) {
    this.sock = sock;
    this.addr = addr;
    this.port = port;
    public int read(byte buffer[], int offset, int length) {
    DatagramPacket p = new DatagramPacket(buffer, offset, length, addr, port);
    try {
    sock.receive(p);
    } catch (IOException e) {
    return -1;
    synchronized (this) {
    dataRead = true;
    notify();
    System.out.println("RTPSocketAdapter receive RTP packet from port:"+port);
    System.out.println("The received RTP packet:"+new String(buffer));
    return p.getLength();
    public synchronized void start() {
    super.start();
    if (sth != null) {
    dataRead = true;
    notify();
    public synchronized void kill() {
    done = true;
    notify();
    public int getMinimumTransferSize() {
    return 2 * 1024; // twice the MTU size, just to be safe.
    public synchronized void setTransferHandler(SourceTransferHandler sth) {
    this.sth = sth;
    dataRead = true;
    notify();
    // Not applicable.
    public ContentDescriptor getContentDescriptor() {
    return null;
    // Not applicable.
    public long getContentLength() {
    return LENGTH_UNKNOWN;
    // Not applicable.
    public boolean endOfStream() {
    return false;
    // Not applicable.
    public Object[] getControls() {
    return new Object[0];
    // Not applicable.
    public Object getControl(String type) {
    return null;
    * Loop and notify the transfer handler of new data.
    public void run() {
    while (!done) {
    synchronized (this) {
    while (!dataRead && !done) {
    try {
    wait();
    } catch (InterruptedException e) { }
    dataRead = false;
    if (sth != null && !done) {
    sth.transferData(this);
    Thanks.

    The error of No format has been registered for RTP Payload type 96
    is caused by the dynamic payload mapping, when I add the dynamic mapping between dynamic payload and format. The Player cann't work yet. I think it because JMF doesn't support the format of my clips. For example:
    video: a=rtpmap:96 H263-2000/90000
    audio:a=rtpmap:97 MP4A-LATM/12000/1
    Is there some available plugin to support these format?
    Thanks

  • Trying to use AVTransmit with AVReceive

    I am working on a video conferencing app that leverages multicast. I am new to JMF so please forgive my newbie status. I would like to receive Audio/Video streams on my app and retransmit them via multicast. My main question is can I receive a RTP/Video stream using AVReceive2 and then immediately ( or close to immediate) transmit via AVTransmit2.java. I am trying to understand the code and cannot decipher what object within AVReceive that I can use in the AVTransmit's constructor.
    Any thoughts out there. A small example would be awesome.
    Thanks in advance.
    phodat
    Edited by: phodat on Jan 13, 2008 6:13 PM

    Hi
    Iam currently using AVTransmit & Recieve. The Receive simply plays a media file which has been transmitted over a network . It does not store the file automatically. To transmit a file with AVTransmit, I think the file has to be stored locally first before you can transmit it. But Iam sure with you want to achieve, it can be possible with more modifications to the code. Hope this helps.

  • Cannot use loopback address in jmf audio receiver

    Hello, i am using the code from http://java.sun.com/products/java-media/jmf/2.1.1/solutions/AVReceive.html
    about transmitting and receiving audio data. It works fine but if i use a 127.0.0.1 address the receiver cannot connect to the audio streamer. Any idea?

    Yup. This will not work. I've tried with 127.0.0.1 and 0.0.0.0.. Both of them dont work..

  • Using JMF to create AVIs

    Hello all, I am new to JMF and I was wondering if anyone could point me in the right direction of using JMF to create AVIs on the fly... I have short [ ] buffers that contain image data, and i need to convert this into an .avi file, but i will not have the buffers all at once, but rather will be passing them one at a time. So i need the avi renderer/writer to be able to handle incremental input of buffers, frame by frame.
    if anyone could give me a hand or tell me where to look, i would be much obliged!
    thanks so much,
    ben

    sheik2311 wrote:
    I must do it in Applet since it should work on the web.Actually, no...if it "should work on the web", it either needs to be an applet (pain in the butt for JMF development) or a WebStart application (not a pain in the button). I'd personally recommend using a web start application to avoid all of the hassles of trying to put JMF in an applet.
    Second, I'm not sure where your sample code came from, but you definately need some more robust sample code to work with...so...in the order you should play with them...
    To show a video in a Swing component
    [http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/SwingJMF.html]
    To transmit audio/video
    [http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/AVTransmit.html]
    To receive audio/video
    [http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/AVReceive.html]
    To save a received video to disk
    [http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/RTPExport.html]
    To show and record video
    [http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/JVidCap.html]

  • How to receive RTP data by JMF

    Hello!!
    I have a ipaq3870 installed Jeode.
    I can run JMStudio to play media on PDA and receive RTP data from PC's JMStudio.
    But I can't receive RTP data by AVReceive2.
    I compressed AVreceive2 into custom.jar.
    Can anyone teach me how to do?
    Did my steps correct?
    Thank you!!
    Shih-Wei Chen

    Hi,
    hope we could talk a little more about this because I am also trying to do some applications with the JMF and Personal Java / Jeode.
    So far I haven�t worked with the JMstudio but with the AVReceive and the AVTransmit classes. My Transmit-PC is a Desktop PC running Windows XP and my Receive Handheld is Sharp Zaurus with - as I said - Personal Java / Jeode running.
    Both classes run but the Transmitter only says "Transmitting ..." and the Receiver says "Waiting for data to arrive" and nothing happens.
    Perhaps you know what I am doing wrong ? Can it be the Windows XP - Linux ? But the JMF ist platform independent, isn�t it ?
    Do you think the JMStudio is better than the AVReceive ?
    How did you manage to run jmstudio under Jeode ?
    Of course he didn�t find the "java" exec because it is called evm but how can I change this ?
    Thanks for your help
    Poldi

  • JMF - client server video streaming how to stop

    Hi
    I am able to stream video from a server to multiple clients using AVReceive2 and AVTransmit2 from the JMF site.
    Iam developing a client server project. I have modified the above code such that Iam able to start and stream the videos by calling on servlets and socket connections.
    The AVTransmit2 code does not however have a stop button and it uses a thread.sleep method. I do not know how to add a stop button in the GUI on AVReceive2 to call on AVTransmit2.
    I am using sockets to communicate to and from the server. Do i have to use RMI or is there another easier way to call stop from the client which would stop the transmission on the server?
    Also, after the video file has been successfully streamed, when I refresh and try to connect again, the server is invoked and __it starts transmission_,_ but the servlet which calls the AVReceive fails and the frame does not show. Any possible reasons why?
    Thanks in advance.
    Junior

    I don't know the speed of the connection.
    4-10 users usually.
    .11b or .11g I don't know.
    microwave nearby - I don't know
    5-6 other wifis - yes
    I will try Safari, thanks!
    Thanks for the update. The speed of the Wi-Fi in the
    coffee shop will depend on many factors. What is the
    speed of their connection to the Internet? How many
    people are sharing the Wi-Fi? Is it 802.11b or
    802.11g? Do they have a microwave operating nearby?
    That will often interfere. Are there additional Wi-Fi
    networks nearby? That can interfere as well. It's
    possible that it was their network that's causing
    your trouble. But, to rule that out, did you try
    using Safari instead? You might make sure you have an
    up-to-date version of the Flash player which you can
    get at http://www.adobe.com
    I have Clearwire
    at home, it's basically like wireless DSL. It's not
    as fast as cable Internet access, but it is portable.
    I only mentioned it because it would indicate that
    you don't need cable speed to watch the videos
    without buffering.
    -Doug

  • JMF applet  in webpage

    Hello all
    I finally succeededin making AVReceive class work. But now I need to open it on a webpage. So I tried to convert into a java applet but I could not.
    Can any one kindly help me in this.
    Thanx all.

    >
    I am accessing a webcam from an applet embedded in a webpage using JMF 2.1. I am using JButtons using Image Icons. When i view the applet using applet viewer both the player and buttons appear fine. However when the applet is embedded in a jsp page the image JButtons don't appear at all. >That is probably because of security. Add 10 Dukes to the thread to indicate you are serious about resolving this, and I might expand on that answer.

  • JMF has no support for H263 'b' or 'c-mode'?

    Hello!
    From what I've heard JMF should have full support for H263 codec (video). I tested a simple JMF based graphics application and streamed H263 'a-mode' RTP to the package and presented the result on a panel. It looked OK. Then I tested the other two H263 versions 'b' and 'c-mode'.
    It looked absolutely horrible...absolutely unusable.
    Doesnt JMF have full support for H263? In that case, how do I activate the full support?
    If JMF itself doesnt have full support for H263, are there any available plugins that can be used to solve this?
    Greatful for any help/hints and/or suggestions!
    SIncerely
    Mikael

    Hi Mikael,
    I've read at the following place that JMF with Windows Performace Pack has support for mode B and C:
    http://java.sun.com/products/java-media/jmf/2.1.1/solutions/AVReceive.html.
    But I've actually made the same conclusion as you: it seems like JMF doesn't support mode B and C. One solution might be to create a pre-processing effect plug-in, which simply removes all mode B and mode C packets before they arrive to the codec!? RFC2190 (the H.263 RTP payload spec.) strongly recommends using mode A whenever possible. So, hopefully there aren't too much of the B and C packets, and hopefully such effect plug-in won't damage the video quality too much?
    Regards,
    Andreas Piirimets
    System developer, Omnitor AB

  • JMF rtsp streaming

    Hi,
    I want to use any internet radio thats streaming over rtsp as a datasource and give that source to my datasink class in order to stream rtp to my LAN.
    When I try,
    medialocator=new MediaLocator("rtsp://ip/xyz.mov or rm);
    ds=Manager.createDataSource(medialocator);
    And try to use this ds in my datasink, it does not work.
    Any clues?
    Thank you very much.
    Murat

    This problem sounds to be still actual. .mov and .rm are not supported by JMF:
    http://java.sun.com/products/java-media/jmf/2.1.1/formats.html#RTPFormats
    In http://java.sun.com/products/java-media/jmf/2.1.1/support-rtp.html it is said that the following RTP servers are compatible with the JMF RTP Player (using javax.media.rtp) but each of them have a serious drawback:
    ShowMeTV Transmitter (commercial), IP/TV Server (commercial), vic (Video only), vat/rat (Audio only).
    What streaming server would you suggest to use? I tried without success to stream a video within a java applet using DarwinSS (ok with .mov, .mp4 but not in java) or RealServers (ok with .rm but also not in java).
    I don't find any examples of MPEG1 streaming in JMF. Most samples i.e. SimplePlayerApplet.java (param="sun.avi") use local video paths but not rtsp:// URLs.
    Samples like AVreceive.java / RTPUtil.java do not use explicit MPEG1 samples and assume that you have an RTP server. And other apps like http://www.alphaworks.ibm.com/tech/mpeg-4 are not fully open source.
    Thanks

  • Voice chat using JMF

    Can we transmit Voice in realtime from one IP to other using JMF ??

    Pls refer to the example code
    Transmitter
    =========
    http://java.sun.com/products/java-media/jmf/2.1.1/solutions/RTPTransmit.html
    Receiver
    =======
    http://java.sun.com/products/java-media/jmf/2.1.1/solutions/AVReceive.html
    Rgds,
    Seetesh

  • JMF Video and Audio

    I am working on AVTransmit and AVReceive trying to make them both transmit and receive audio and video at the same time. I cant seem to be able to at least get video and audio sent over a LAN similtaneously. How should i manage the original AVTransmit and Receive in order to do what i just said above? please give me some hints, and if someone is kind enough to give me directions, i would appreciate it.
    I am new at JMF, and having difficulties understanding how it all works.
    Currently working on my final year project, have a few month left before deadline, so ,please help me.
    Cheers guys.
    Chris

    First of all, you can't open two times the same port on the same computer.
    - If you have different sources (i.e. audio.mp3 and video.mpg) you must use two different ports, like 20000 and 20002. AVReceive can then start for you two players doing something like that:
    java AVReceive2 x.y.z.k/20000/1 x.y.z.k/20002/1
    - If you have only one file to send which contains both audio and video, then there are two alternatives: (1) you send across two different sessions (AVTransmit2 does this automatically; the first session is on the port you told the program to use, the second session is baseport+2 (20000 and 20002, in out example)).
    (2) you must use MERGED DATASOURCES, but here, I'm sorry I don't know how to help...

  • SDP Files and JMF?

    Hi,
    has anybody figured out how to get JMF to work with SDP files. I'm using Darwin Streaming Server and accessing the SDP files via JMF rtsp (e.g. rtsp://...ip.../file.sdp)
    I'm getting an ArrayIndexOutOfBoundsException at RtspUtil.rtspStart(...)
    why??
    any help would be appreciated.. Thanks!
    Sheado

    I am facing the same problem. does anyone succeed to write a java RTSP player that interfaces well with SDP (or other format) and Darwin Streaming Server (or any other streaming servers)?
    I don't find any examples of MPEG1 streaming in JMF. Most samples i.e. SimplePlayerApplet.java (param="sun.avi") use local video paths but not rtsp:// URLs.
    Samples like AVreceive.java / RTPUtil.java do not use explicit MPEG1 samples and assume that you have an RTP server. And other apps like http://www.alphaworks.ibm.com/tech/mpeg-4 are not fully open source.
    What streaming server would you suggest to use? I tried without success to stream a video within a java applet using DarwinSS (ok with .mov, .mp4 but not in java) or RealServers (ok with .rm but also not in java).
    In http://java.sun.com/products/java-media/jmf/2.1.1/support-rtp.html it is said that the following RTP servers are compatible with the JMF RTP Player (using javax.media.rtp) but each of them have a serious drawback:
    ShowMeTV Transmitter (commercial), IP/TV Server (commercial), vic (Video only), vat/rat (Audio only).
    Thanks in advance for any reply

  • Getting RTSP servers to work with JMF

    I have read through many postings about this, but none of them have been answered. Has anyone gotten JMStudio or any other JMF application to be able to properly recieve video streams in any format from a video on demand server using RTSP? I have tried Darwin Streaming Server (which the JMF faq claims has been tested with JMF, so I take it someone out there knows how to get this working) and Real's Helix Universal Server Basic. I have tried using JMStudio's Open URL menu, and writing a simple application to act as a client.
    At this point I would just like to find some server that works with some file/encoding format. Has anyone gotten anything to work? Thank you.
    -Brad

    I am facing the same problem. does anyone succeed to write a java RTSP player that interfaces well with Darwin Streaming Server?
    I don't find any examples of MPEG1 streaming in JMF. Most samples i.e. SimplePlayerApplet.java (param="sun.avi") use local video paths but not rtsp:// URLs.
    Samples like AVreceive.java / RTPUtil.java do not use explicit MPEG1 samples and assume that you have an RTP server. And other apps like http://www.alphaworks.ibm.com/tech/mpeg-4 are not fully open source.
    What streaming server would you suggest to use? I tried without success to stream a video within a java applet using DarwinSS (ok with .mov, .mp4 but not in java) or RealServers (ok with .rm but also not in java).
    In http://java.sun.com/products/java-media/jmf/2.1.1/support-rtp.html it is said that the following RTP servers are compatible with the JMF RTP Player (using javax.media.rtp) but each of them have a serious drawback:
    ShowMeTV Transmitter (commercial), IP/TV Server (commercial), vic (Video only), vat/rat (Audio only).
    Thanks in advance for any reply

  • Screen presenter application in an RTP stream using JMF - very slow..

    I am trying to build a screen presenter application using JMF. I got the AVTransmit2 code to run with the Screen grabber data source. I use the following calls
    java AVTransmit2 screen://0,0,160,120/10 224.122.122.122 2222
    - java AVReceive2 224.122.122.122/2222
    The AVReceive does receive the screen data stream in RTP, but either there are too many artifacts(h263) or it is too slow(JPEG format). Is there a way to optimize the screen grabber data source or the encoding somehow to make this more efficient?

    ucla_jatt wrote:
    The AVReceive does receive the screen data stream in RTP, but either there are too many artifacts(h263) or it is too slow(JPEG format). Is there a way to optimize the screen grabber data source or the encoding somehow to make this more efficient?It's not really a question of efficiency, most likely.
    You're probably trying to broadcast a very, very high resolution video (your screen is probably a minimum of 1024x768) at a very, very high framerate (30 fps, I'd bet).
    A DVD runs at 640x480 at around 30 frames per second.
    You're trying to broadcast a video feed with over two and a half times as much visual information as a DVD has, and that's before you throw in that a DVD is encoded using MPEG4 compression.
    In the end, you're probably trying to broadcast 754,974,720 bits per second (1024x768x32(bit color)x30(fps)), or roughly trying to dump 1 CD-RWs worth of data to your network card per second...
    You want it to work well, you're going to need to decrease both the framerate and transcode the full-size video down into a smaller size...
    Or you can go into the DataSource code and modify the resolution of the screen capture image before it's compiled into the video. That would also work.

Maybe you are looking for

  • Ipod Formatted to Windows but I want to use Mac!

    I know you should be able to use an ipod formatted to windows on a Mac, but I can't. I have itunes 7 and it won't let me put music on my ipod says software is too old. I've been trying to update the software but everything says you can't unless you h

  • Why my itunes dosen't stay open

    can't access my itunes library

  • User exit for component data in ME21n/ME22n

    Hello, I have a requirement to issue an error message if a component quantity is not evenly divisible by the end item quantity.  The component data (BOM) is entered after clicking the components button on ME21n/ME22n at the item level detail.  I need

  • HELP-lost address book in dock

    I know this must seem trivial to most of you but I'm trying everything I know to get back the address book icon in my dock. Please let it be simple to fix. Thank you to anyone who can help. Message was edited by: Lynda Salerno

  • How to create a new request for whole Package.

    Dear All, I have an unique requirement. we have a system, where developement have been done in phases with different Requests of A Package. Now we need to apply same package/project on different system. But unable to list/gather all change request of