我在eclipse上DDMS的File Explore对话框里把mj.mp4放到了/mnt/sdcard/目录下,JAVA代码如下:
就是个简单的播放媒体的Activitypublic class MyActivity extends Activity
{
    private VideoView       mVideo;
    private MediaController mMediaController;
    private String this.mUri ;
    private int mPositionWhenPaused = -1;    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        this.mUri = this.getExternalStoragePath() + "/mj.mp4";
     
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        
        this.mVideo           = (VideoView)findViewById(R.id.videoView1);
        this.mMediaController = new MediaController(this);
        this.mVideo.setVideoURI(Uri.parse(this.mUri));
        this.mVideo.setMediaController(mMediaController);
        
        this.mMediaController.setAnchorView(this.mVideo);
        this.mMediaController.requestFocus();
        
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        
        Log.v("mplayer", ">>>create ok."); 
    }
    
    @Override
    public void onStart()
    {
     super.onStart();
     
     this.mVideo.start();
    }
    
    public void onPause() 
    {
     // Stop video when the activity is pause.
     mPositionWhenPaused = this.mVideo.getCurrentPosition();
     this.mVideo.stopPlayback();
     super.onPause();
    }
    
    public void onResume() 
    {
     // Resume video player
     if(mPositionWhenPaused >= 0)
     {
      this.mVideo.seekTo(mPositionWhenPaused);
      mPositionWhenPaused = -1;
     }
     super.onResume();
    }
}可运行起来后LogCat报错:
06-22 06:50:33.503: INFO/StagefrightPlayer(33): setDataSource('/mnt/sdcard/mj.mp4')
06-22 06:50:34.433: INFO/ActivityManager(79): Displayed hls.m3u/.HttpLiveStreaming: +7s83ms
06-22 06:50:34.774: INFO/ARMAssembler(79): generated scanline__00000177:03515104_00001002_00000000 [ 87 ipp] (110 ins) at [0x477be520:0x477be6d8] in 1578134 ns
06-22 06:50:38.832: DEBUG/MediaPlayer(434): getMetadata
06-22 06:50:38.944: DEBUG/AudioSink(33): bufferCount (4) is too small and increased to 12
06-22 06:50:38.983: ERROR/MediaPlayer(434): error (1, -2147483648)
06-22 06:50:39.123: ERROR/MediaPlayer(434): Attempt to call getDuration without a valid mediaplayer
06-22 06:50:39.123: ERROR/MediaPlayer(434): error (-38, 0)
06-22 06:50:39.186: ERROR/MediaPlayer(434): Error (1,-2147483648)
06-22 06:50:39.186: DEBUG/VideoView(434): Error: 1,-2147483648虚拟机上弹出窗口显示:
Cannot play video请问我哪里写错了吗?还是哪里出问题了!谢谢!

解决方案 »

  1.   

    /**
     * 播放视频
     * 
     * @param fileName
     *            指定具体的视频文件名称(要求是.mp4 Or .3gp 文件)
     */
    public void play(String fileName) {
    StringBuffer path = new StringBuffer(this.getSDPath());
    path.append("/");
    path.append(fileName);
    videoView.setVideoURI(Uri.parse(path.toString()));
    videoView.requestFocus(); // 继承View类别,将重贴放在特定的视讯资源档案
    videoView.start(); // 开始播放视频
    } /**
     * 获取SD卡根路径
     * 
     * @return 转换为一个字符串的形式返回
     */
    public String getSDPath() {
    File sdDir = null;
    boolean sdCardExist = Environment.getExternalStorageState().equals(
    android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在
    if (sdCardExist) {
    sdDir = Environment.getExternalStorageDirectory();// 获取跟目录
    } else {
    new AlertDialog.Builder(video)
    .setTitle(R.string.playError)
    .setMessage(R.string.sdisNullWarning)
    .setIcon(R.drawable.error)
    .setNegativeButton(R.string.ok,
    new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog,
    int which) {
    System.exit(1);
    }
    }).show();
    }
    return sdDir.toString();
    }
    最后,调用play();方法,里面传入mj.mp4即可播放;你写的太多了
      

  2.   

    哦, 不好意思,其实: new AlertDialog.Builder(video)
                        .setTitle(R.string.playError)
                        .setMessage(R.string.sdisNullWarning)
                        .setIcon(R.drawable.error)
                        .setNegativeButton(R.string.ok,
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        System.exit(1);
                                    }
                                }).show();这段是可以不要的。这些是我从我的项目中直接剪贴过来的,也没太注意;其实你加上也无所谓。 只要你懂得怎么使用AlertDialog.Builder()的话,那你应该就会知道怎么回事
      

  3.   

    用Android 3.0 SDK的模拟设备以上吧,2.2的不行。
    祝你好运.
    等散分。来自android.growprogress.com
      

  4.   

    根据报错是没有合法的播放器,你将this.mVideo.setVideoURI(Uri.parse(this.mUri));
     改成this.mVideo.setVideoPath(Uri.parse(this.mUri));试一下
     
      

  5.   

    建议使用真机调试。我之前也弄过视频的代码,如果代码没有问题,模拟器无法播放视频是因为模拟器没有视频的解码包。===
    个人博客:www.girlcoding.com
      

  6.   

    模拟器上面 视频格式为3gp的可以直接播放 ,而格式为mp4,flv等都不可以,只有声音没有图像出来,这个问题我也很纠结,书上说是安卓2.2版本的一个bug  但是3gp格式在2.2上面可以播放,所以我感觉是视频大小的原因求解释