在Android MediaPlayer中从原始文件夹播放视频时出错
我试图播放原始文件夹中的视频,但它返回以下错误 错误(1,-2147483648) 这是我的密码:在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
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();
}
}