Tuesday 16 October 2012

Youtube Video Streaming in J2me


As far as My knowledge is Concerned in j2me,we cannot perform Direct Http based Streaming.The Manager(javax.microedition.media.Manager) class  method doesn't support HttpStreaming URL(if we Place we will be getting Invalid URL).

If you want to stream and play youtube videos,try to parse and get the RTSP link from your youtube URL,Because in java-me we can successfully stream and play RTSP Protocol based URL.

This article will provide you  the Complete Code to Stream and Play RTSP URL:

Note: I've tested the code on Nokia SymbianBelleSDK 1.1

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class ExampleStreamingMIDlet extends MIDlet {
public List list;
String url="rtsp://v1.cache5.c.youtube.com/CjYLENy73wIaLQm8E_KpEOI9cxMYDSANFEIJbXYtZ29vZ2xlSARSBXdhdGNoYLm0hv_ig5HRTww=/0/0/0/video.3gp";
public ExampleStreamingMIDlet() {
   
    list = new List("Accueil", List.IMPLICIT);
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
    VideoCanvas VC = new VideoCanvas(this,url);
    Display.getDisplay(this).setCurrent(VC); }
}


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Ticker;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.PlayerListener;
import javax.microedition.media.control.VideoControl;

public class VideoCanvas extends Canvas implements PlayerListener, CommandListener {

private ExampleStreamingMIDlet midlet = null;
private Command start = new Command("Start",Command.OK,0);
private Command stop = new Command("Stop",Command.OK,0);
private Command back = new Command("Back",Command.OK,0);
private Command exit = new Command("Exit",Command.BACK,0);
private String url;
private String status = "Press left softkey";
private String status2 = "";
private Player player = null;
private VideoControl control = null;

/**
* Constructor
*
* @param midlet
*/

public VideoCanvas(ExampleStreamingMIDlet midlet, String url) {
this.midlet = midlet;
this.url = url;
addCommand(start);
addCommand(stop);
addCommand(back);
addCommand(exit);
setCommandListener(this);
this.setFullScreenMode(true);
}

public void commandAction(Command c, Displayable arg1) {
if(c == start) {
start();
}
else if(c == stop) {
stop();
}
else if(c == exit) {
midlet.notifyDestroyed();
}
else if(c == back) {
Display.getDisplay(midlet).setCurrent(midlet.list);
}

}

/**
* Paint
*/

protected void paint(Graphics g) {
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0,0,0);
g.drawString(status2,0,0,Graphics.LEFT|Graphics.TOP);
g.drawString(status,getWidth(),getHeight(),Graphics.RIGHT|Graphics.BOTTOM);
}

/**
* Start
*
*/

public void start() {
try{
       
           Player player = Manager.createPlayer(url);
   player.addPlayerListener(this);
  player.realize();

 
   control = (VideoControl)player.getControl("VideoControl");
   if (control != null) {
    control.initDisplayMode(VideoControl.USE_DIRECT_VIDEO,this);
    control.setDisplaySize(176,144);
    int width = control.getSourceWidth();
    int height = control.getSourceHeight();
    status2 = "Before: SW=" + width + "-SH=" + height + "-DW=" + control.getDisplayWidth() + "-DH=" + control.getDisplayHeight();
   }

   player.start();
}
catch(Exception e) {
Alert erro = new Alert("Erro",e.getMessage(),null,AlertType.ERROR);
Display.getDisplay(midlet).setCurrent(erro);
}
}

public void stop() {
if(player != null) {
player.deallocate();
player.close();
}
}

public void playerUpdate(Player p, String s, Object o) {
status = s;

if(p.getState() == Player.STARTED) { int width = control.getDisplayWidth();
                        int height = control.getDisplayHeight();     control.setDisplayLocation((getWidth() - width)/2,(getHeight() -    height)/2);
control.setVisible(true);
status = s + ": DW=" + width + "-DH=" + height + "-SW=" +     control.getSourceWidth() + "-SH=" + control.getSourceHeight();
}
repaint();
setTitle(status);
}
 
      }

No comments:

Post a Comment