If you removed holder.addCallback(this), then the callback of surfaceCreated
in MediaPlayerDemo_Video won't be invoked...

2009/3/5 susanner <[email protected]>

>
> I have met nearly the same problem, I am implementing the Mediaplayer to my
> hardware board. I haven't tried videoview, I just implemented the video
> player from API demo.But It can't show video. I guess there is some trick
> with this "holder" surface, it is strange that when I delete this sentence,
> my emulator will not show video just as the real board,
> holder.addCallback(this);
>  but I added the sentence, although my emulator can successfully play
> video, my real hardware still like before.
> and I am a little bit curious you didn't use this
> "holder.addCallback(this);"
> here is my program, I haven't solved my problem yet:
>
> public class MediaPlayerDemo_Video extends Activity implements
>         OnBufferingUpdateListener, OnCompletionListener,
>         MediaPlayer.OnPreparedListener, SurfaceHolder.Callback {
>
>     private static final String TAG = "MediaPlayerDemo";
>     private int mVideoWidth;
>     private int mVideoHeight;
>     private MediaPlayer mMediaPlayer;
>     private SurfaceView mPreview;
>     private SurfaceHolder holder;
>     private String path;
>     private Bundle extras;
>     private static final String MEDIA = "media";
>     private static final int LOCAL_AUDIO = 1;
>     private static final int STREAM_AUDIO = 2;
>     private static final int RESOURCES_AUDIO = 3;
>     private static final int LOCAL_VIDEO = 4;
>     private static final int STREAM_VIDEO = 5;
>
>     /**
>      *
>      * Called when the activity is first created.
>      */
>     public void onCreate(Bundle icicle) {
>         super.onCreate(icicle);
>         setContentView(R.layout.mediaplayer_2);
>         mPreview = (SurfaceView) findViewById(R.id.surface);
>         holder = mPreview.getHolder();
>         holder.addCallback(this);
>         holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
>         extras = getIntent().getExtras();
>
>     }
>
>     private void playVideo(Integer Media) {
>         try {
>
>             switch (Media) {
>                 case LOCAL_VIDEO:
>                     /*
>                      * TODO: Set the path variable to a local media file
> path.
>                      */
>                     path = "";
>                   /*  if (path == "") {
>                         // Tell the user to provide a media file URL.
>                         Toast
>                                 .makeText(
>                                         MediaPlayerDemo_Video.this,
>                                         "Please edit MediaPlayerDemo_Video
> Activity, "
>                                                 + "and set the path
> variable to your media file path."
>                                                 + " Your media file must be
> stored on sdcard.",
>                                         Toast.LENGTH_LONG).show();
>
>                     }*/
>                     break;
>                 case STREAM_VIDEO:
>                     /*
>                      * TODO: Set path variable to progressive streamable
> mp4 or
>                      * 3gpp format URL. Http protocol should be used.
>                      * Mediaplayer can only play "progressive streamable
>                      * contents" which basically means: 1. the movie atom
> has to
>                      * precede all the media data atoms. 2. The clip has to
> be
>                      * reasonably interleaved.
>                      *
>                      */
>                     path = "";
>                     if (path == "") {
>                         // Tell the user to provide a media file URL.
>                         Toast
>                                 .makeText(
>                                         MediaPlayerDemo_Video.this,
>                                         "Please edit MediaPlayerDemo_Video
> Activity,"
>                                                 + " and set the path
> variable to your media file URL.",
>                                         Toast.LENGTH_LONG).show();
>
>                     }
>
>                     break;
>
>
>             }
>
>             // Create a new media player and set the listeners
>             mMediaPlayer = new MediaPlayer();
>             AssetFileDescriptor afd = getResources().openRawResourceFd
>             (R.raw.movie);
>             Log.v(TAG,afd.toString());
>             mMediaPlayer.setDataSource(afd.getFileDescriptor(),
>             afd.getStartOffset(), afd.getLength());
>
>           // 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, "mMediaPlayer.start is to be called");
>             mMediaPlayer.start();
>
>
>         } catch (Exception e) {
>             Log.e(TAG, "error: " + e.getMessage(), e);
>         }
>     }
>
>     public void onBufferingUpdate(MediaPlayer arg0, int percent) {
>         Log.d(TAG, "onBufferingUpdate percent:" + percent);
>
>     }
>     /**
>      * you don't call onPrepared() yourself. If you set an
>      *PreparedListener, its onPrepared() method will be called for you.
>      */
>     public void onCompletion(MediaPlayer arg0) {
>         Log.d(TAG, "onCompletion called");
>     }
>
>     public void onPrepared(MediaPlayer mediaplayer) {
>         Log.d(TAG, "onPrepared called");
>         mVideoWidth = mMediaPlayer.getVideoWidth();
>         mVideoHeight = mMediaPlayer.getVideoHeight();
>         if (mVideoWidth != 0 && mVideoHeight != 0) {
>             holder.setFixedSize(mVideoWidth, mVideoHeight);
>
>         }
>
>     }
>
>     public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j,
> int k) {
>         Log.d(TAG, "surfaceChanged called");
>
>     }
>
>     public void surfaceDestroyed(SurfaceHolder surfaceholder) {
>         Log.d(TAG, "surfaceDestroyed called");
>     }
>
>
>     public void surfaceCreated(SurfaceHolder holder) {
>         // TODO Auto-generated method stub
>         Log.d(TAG, "surfaceCreated called");
>         playVideo(extras.getInt(MEDIA));
>
>
>     }
>
>     @Override
>     protected void onDestroy() {
>         super.onDestroy();
>         // TODO Auto-generated method stub
>         if (mMediaPlayer != null) {
>             mMediaPlayer.release();
>             mMediaPlayer = null;
>         }
>
>     }
>
> }
>
>
> 在2009-03-04,zypsg <[email protected]> 写道:
> >
> >Hi, A surprising problem occurs when I try to play Video, I can only
> >hear the sound part of the video. My code snippet is below:
> >
> >public class VideoDemo extends Activity {
> >
> >     public static final int MENU_PLAYER=Menu.FIRST;
> >     public static final int MENU_VIDEO=MENU_PLAYER+1;
> >     private final static String VIDEOURL="/sdcard/10-58-26.3gp";
> >    /** Called when the activity is first created. */
> >    @Override
> >    public void onCreate(Bundle savedInstanceState) {
> >        super.onCreate(savedInstanceState);
> >        setContentView(R.layout.main);
> >      //  playVideoByVideoView(VIDEOURL);
> >    }
> >    private void playVideoByVideoView(String fileURL){
> >//           this.getWindow().setFormat(PixelFormat.TRANSLUCENT);
> >     setContentView(R.layout.videoview);
> >     VideoView videoView=(VideoView)findViewById(R.id.surface_view);
> >
> >//           videoView.setVisibility(SurfaceView.VISIBLE);
> >     videoView.bringToFront();
> >     videoView.setVideoPath(fileURL);
> >     videoView.setMediaController(new MediaController(this));
> >     videoView.requestFocus();
> >//           videoView.start();
> >    }
> >    private void playVideoByMediaPlayer(String fileURL){
> >     MediaPlayer mp = new MediaPlayer();
> >     SurfaceView sv =new SurfaceView(this);
> >     try {
> >                     mp.setDataSource(fileURL);
> >                     mp.setDisplay(sv.getHolder());
> >                     mp.prepare();
> >                     mp.start();
> >             } catch (IllegalArgumentException e) {
> >                     // TODO Auto-generated catch block
> >                     e.printStackTrace();
> >                     mp.release();
> >
> >             } catch (IllegalStateException e) {
> >                     // TODO Auto-generated catch block
> >                     e.printStackTrace();
> >                     mp.release();
> >             } catch (IOException e) {
> >                     // TODO Auto-generated catch block
> >                     e.printStackTrace();
> >                     mp.release();
> >             }
> >    }
> >     @Override
> >     public boolean onCreateOptionsMenu(Menu menu) {
> >             // TODO Auto-generated method stub
> >             boolean ret= super.onCreateOptionsMenu(menu);
> >             menu.add(0, MENU_PLAYER, 0, "MediaPlayer");
> >             menu.add(0, MENU_VIDEO, 0, "VideoView");
> >             return ret;
> >     }
> >     @Override
> >     public boolean onMenuItemSelected(int featureId, MenuItem item) {
> >             // TODO Auto-generated method stub
> >             boolean ret= super.onMenuItemSelected(featureId, item);
> >             switch(item.getItemId()){
> >             case MENU_PLAYER:
> >                     playVideoByMediaPlayer(VIDEOURL);
> >
> >                     break;
> >             case MENU_VIDEO:
> >                     playVideoByVideoView(VIDEOURL);
> >                     break;
> >             }
> >             return ret;
> >     }
> >}
> >
> >
> >
> >But when I invoke playVideoByVideoView() method in onCreate() ,I can
> >see the video part.  Can anybody tell me why this problem happen?  How
> >can I solve this problem. Thanks Very Much!
> >
> >>
>
>
>
> ------------------------------
> 网易邮箱,中国第一大电子邮件服务商 <http://www.yeah.net>>
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to