在Android MediaPlayer中从原始文件夹播放视频时出错

在Android MediaPlayer中从原始文件夹播放视频时出错,android,android-mediaplayer,media,Android,Android Mediaplayer,Media,我试图播放原始文件夹中的视频,但它返回以下错误 错误(1,-2147483648) 这是我的密码: public class AndroidVideoPlayer extends Activity implements SurfaceHolder.Callback{ MediaPlayer mediaPlayer; SurfaceView surfaceView; SurfaceHolder surfaceHolder; boolean pausing = fa

我试图播放原始文件夹中的视频,但它返回以下错误

错误(1,-2147483648)

这是我的密码:

public class AndroidVideoPlayer extends Activity implements SurfaceHolder.Callback{

    MediaPlayer mediaPlayer;
    SurfaceView surfaceView;
    SurfaceHolder surfaceHolder;
    boolean pausing = false;;
    Button btn1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);



        setContentView(R.layout.main); 
            Button buttonPlayVideo = (Button)findViewById(R.id.button1);

            getWindow().setFormat(PixelFormat.UNKNOWN);

            //Displays a video file.   
            VideoView mVideoView = (VideoView)findViewById(R.id.videoview);

            String uriPath = "android.resource://com.AndroidVideoPlayer/raw/"+R.raw.k;

            Uri uri = Uri.parse(uriPath);
            mVideoView.setVideoURI(uri);
            mVideoView.requestFocus();
            mVideoView.start();



            buttonPlayVideo.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View v) {

                    // VideoView refference see main.xml
                    VideoView mVideoView = (VideoView)findViewById(R.id.videoview);

                    String uriPath = "android.resource://com.AndroidVideoPlayer/"+R.raw.k;

                    Uri uri = Uri.parse(uriPath);
                    mVideoView.setVideoURI(uri);
                    mVideoView.requestFocus();
                    mVideoView.start();


            }});
     }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    }
}
注意:众所周知,MediaPlayer存在问题,因为它们是在API 1中创建的。因此,建议您妥善处理媒体播放器的所有错误

你的问题: 简而言之,您没有将mediaplayer与surface连接

您可以快速尝试的内容:

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    mediaPlayer.setDisplay(holder);

}
我建议您尝试一下下面的VideoPlayerManager类

用法示例 VideoPlayerManager类
VideoView videoView = ((VideoView) findViewById(R.id.VideoView));
_videoPlayer = new VideoPlayerManager(getApplicationContext(),videoView);
videoView.getHolder().addCallback(_videoPlayer);
/**
 * Written by George Hannuneh, 26/10/2015
 * 
 * Feel free to use, change, share as you see fit. 
 * It would be nice though when you refer :-)
 */
public class VideoPlayerManager implements SurfaceHolder.Callback{
    private static final String TAG = "VideoPlayerManager";
    private MediaPlayer mMediaPlayer;
    private Context mContext;
    private boolean enforcedStop;
    private float volume;
    private VideoView mVideoView;
    private String videoId;

    public VideoPlayerManager(Context context,VideoView video_view)  {
        this.mVideoView = video_view;
        mContext = context;
        videoId = null;
    }

    public void initPlayer() {
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                if (enforcedStop) {
                    enforcedStop = false;
                    return;
                }
                // setLooping(true) did not work, so we use this 2 lines of code
                mediaPlayer.seekTo(0);
                mediaPlayer.start();
            }
        });
        mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener()     {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                setVolumeToMainStream();
                mediaPlayer.start();
            }
        });
        mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                Log.i("VideoPlayerManager", "Error code (what): " + what);
                if (what == 100) {
                    mVideoView.stopPlayback();
                    mVideoView.start();
                    enforcedStop = true;
                } else if (what == 1) {
                    mVideoView.stopPlayback();
                    mVideoView.start();
                    enforcedStop = true;

                } else if (what == 800) {
                    mVideoView.stopPlayback();
                    mVideoView.start();
                    enforcedStop = true;

                } else if (what == 701) {
                    mVideoView.stopPlayback();
                    mVideoView.start();
                    enforcedStop = true;

                } else if (what == 700) {
                    mVideoView.stopPlayback();
                    mVideoView.start();
                    enforcedStop = true;
                } else if (what == -38) {
                    mVideoView.stopPlayback();
                    mVideoView.start();
                    enforcedStop = true;
                }
                return false;
            }
        });
}
    public synchronized void playVideo(String videoId) {
        this.videoId = videoId;
        mMediaPlayer.reset();
        try {
            mMediaPlayer.setDataSource(mContext, Uri.parse(MediaConstants.VIDEO_PATH + videoId + ".mp4"));
        } catch (IOException e) {
            if (MainActivity.DEBUG_MODE_ENABLED)
            {
                e.printStackTrace();
            }
        }
        try {
            mMediaPlayer.prepareAsync();
        } catch (IllegalStateException e) {
            if (MainActivity.DEBUG_MODE_ENABLED)
            {
                e.printStackTrace();
            }
        }
        if (MainActivity.DEBUG_MODE_ENABLED)
        {
            Log.d(TAG,"Played video successfully: "+videoId);
        }
    }
    public void setVolumeToMainStream() {
        AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
        setVolume((float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) / audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
    }
    public void release() {
        mMediaPlayer.release();
    }
    public void setVolume(float volume) {
        this.volume = volume;
        mMediaPlayer.setVolume(volume, volume);
    }
    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        if (MainActivity.DEBUG_MODE_ENABLED) {
            Log.d("VideoPlayerManager", "surfaceChanged");
        }
        initPlayer();
    }
    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width,
                               int height) {
        if (MainActivity.DEBUG_MODE_ENABLED) {
            Log.d("VideoPlayerManager", "surfaceChanged");
        }
        mMediaPlayer.setDisplay(surfaceHolder);
        if (videoId!= null) {
            playVideo(videoId);
        }
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        if (MainActivity.DEBUG_MODE_ENABLED) {
            Log.d("VideoPlayerManager", "surfaceDestroyed");
        }
        mMediaPlayer.release();
    }
}