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 android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en