Hi, I am trying to buffer a video stream and play the video from the
buffer file, but it seems not to work. I check the logcat, it says
something about Key "Dispatching Time Out problem". Does anyone know
what's wrong? The problem is probably due to CPU consuption because
this error appears after I wrong the same programme several times.
Here is my code.
package com.example.Client2;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.os.Bundle;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.webkit.URLUtil;
import android.widget.ImageButton;
import android.widget.Button;
import android.util.Log;
import android.view.View;
//import android.view.Display;
//import android.view.WindowManager;
//import android.view.ViewGroup.LayoutParams;
//import android.widget.RelativeLayout;
//import android.view.Gravity;
public class Client2 extends Activity implements
OnBufferingUpdateListener,
OnCompletionListener,
MediaPlayer.OnPreparedListener,
SurfaceHolder.Callback{
private static final String TAG="MediaPlayer";
private MediaPlayer mMediaPlayer;
private SurfaceView mPreview;
private SurfaceHolder holder;
private String path;
private int mVideoWidth;
private int mVideoHeight;
private static final int LOCAL_VIDEO = 1;
private static final int STREAM_VIDEO = 2;
//private static final int CENTER = 17;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPreview=(SurfaceView) findViewById(R.id.surface);
holder=mPreview.getHolder();
holder.addCallback(this);
//holder.setFixedSize(30, 30);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
ImageButton Play = (ImageButton) findViewById(R.id.play);
ImageButton Pause = (ImageButton) findViewById(R.id.pause);
Button Stream = (Button) findViewById(R.id.stream);
//checkOrientation();
Play.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
playVideo(LOCAL_VIDEO);
}
});
Pause.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
mMediaPlayer.pause();
}
});
Stream.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
playVideo(STREAM_VIDEO);
}
});
}
/* private void checkOrientation()
{
WindowManager wm = getWindowManager();
Display d = wm.getDefaultDisplay();
Log.d(TAG,"ok1");
LayoutParams params;
Log.d(TAG,"ok2");
if (d.getWidth() > d.getHeight())
{
Log.d(TAG,"ok3");
//---landscape mode---
params = new RelativeLayout.LayoutParams(200,200);
Log.d(TAG,"ok4");
}
else
{
//---portrait mode---
params = new RelativeLayout.LayoutParams(200,200);
}
Log.d(TAG,"ok5");
mPreview.setLayoutParams(params);
}*/
private void playVideo(Integer Media)
{
try
{
switch (Media){
case LOCAL_VIDEO:
path="/sdcard/toystory3.3gp";
break;
case STREAM_VIDEO:
Log.d(TAG,"check");
//path="rtsp://172.17.179.200:5544/stream";
path="http://172.17.179.200:8080/stream";
break;
}
mMediaPlayer=new MediaPlayer();
Log.d(TAG,"Here...");
//setDataSource(path);
mMediaPlayer.setDataSource(path);
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepare();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
Log.d(TAG,"Debug");
mVideoWidth=mMediaPlayer.getVideoWidth();
mVideoHeight=mMediaPlayer.getVideoHeight();
holder.setFixedSize(mVideoWidth,mVideoHeight);
mMediaPlayer.start();
//mMediaPlayer.stop();
//mMediaPlayer.release();
}
catch (Exception e)
{
Log.e(TAG,"error:"+e.getMessage(),e);
}
}
private void setDataSource(String path) throws IOException{
//Log.d(TAG,"Here...");
if (!URLUtil.isNetworkUrl(path)){
//mMediaPlayer.setDataSource(path);
}else{
Log.d(TAG,"Here...");
URL url=new URL(path);
URLConnection cn = url.openConnection();
Log.d(TAG,"Hereok...");
cn.connect();
Log.d(TAG,"Hereok1...");
InputStream stream = cn.getInputStream();
if (stream==null)
throw new RuntimeException("stream is null");
//Log.d(TAG,"Hereok...");
File temp=File.createTempFile("mediaplayertmp","dat");
String tempPath=temp.getAbsolutePath();
FileOutputStream out=new FileOutputStream(temp);
byte buf[]=new byte[20];
do{
int numread=stream.read(buf);
if(numread<=0)
break;
out.write(buf, 0, numread);
Log.d(TAG,"Hereok...");
}while(true);
mMediaPlayer.setDataSource(tempPath);
try{
stream.close();
}catch(IOException ex){
Log.e(TAG,"error:"+ex.getMessage(),ex);
}
}
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
Log.d(TAG,"SurfaceCreated called");
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPrepared(MediaPlayer arg0) {
Log.d(TAG,"OnPrepared called");
//playVideo();
}
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
}
@Override
public void onBufferingUpdate(MediaPlayer arg0, int arg1) {
// TODO Auto-generated method stub
}
}
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en