仅在使用 SurfaceView 的 Samnsung GT-I8260 中渲染视频时出现问题。 IOException:准备失败。:状态=0x1
Problems rendering video only in Samnsung GT-I8260 using SurfaceView. IOException: Prepare failed.: status=0x1
我正在开发一个使用 ViewPager 的应用程序,每个页面都有一个视频。一切在每部智能手机上都运行良好,但在 Android 4.1.2
的三星 GT-I8260 中却无法运行
所以在这个智能手机中,当我编译它时 returns IOException: Prepare failed.: status=0x1 并且它指向 mMediaPlayer.prepare();
现在的代码是下一个:
//First of all I initilize MediaPlayer and I handle the Callback method for SurfaceView
mMediaPlayer = new MediaPlayer();
mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mMediaPlayer.release();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
holder.setSizeFromLayout();
playVideoDelay();
}
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
}
});
//The app plays the first video with the next method
private void playVideoDelay() {
try {
Uri path = Uri.parse("android.resource://com.casabioclimatica/raw/"+mVideoId);
mMediaPlayer.reset();
mMediaPlayer.setDataSource( mActivity, path);
mMediaPlayer.setDisplay(mSurfaceView.getHolder());
mMediaPlayer.prepare();
if (Build.VERSION.SDK_INT >= 16)
mMediaPlayer
.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
// fis = new FileInputStream(new File(path.getPath()));
//mMediaPlayer.setDataSource(fis.getFD());
} catch (Exception e) {
e.printStackTrace();
}
}
//When ViewPager changes it pages I call this method:
public void playVideoDelay(int videoId) {
try {
Uri path = Uri.parse("android.resource://com.casabioclimatica/raw/"+videoId);
mMediaPlayer.reset();
mMediaPlayer.setDataSource( mActivity, path);
mMediaPlayer.setDisplay(mSurfaceView.getHolder());
mMediaPlayer.prepare();
if (Build.VERSION.SDK_INT >= 16)
mMediaPlayer
.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
希望有人遇到过类似的事情并且知道正确的解决方案!
谢谢!
经过大量代码更改后,我发现了这款智能手机的问题,这是因为最大分辨率。在这种情况下,它有 800 x 480 像素,而我使用的是 1080 x 800,它太多了,Dalvik 机器解释这种情况,就像这个文件不存在或不起作用。我已经更改了文件的高和宽大小,效果非常好!
因此对于任何类似情况:请注意您的屏幕支持的最大分辨率,并尝试使用此尺寸以避免在渲染视频时出现任何奇怪的错误。
希望对您有所帮助!
我正在开发一个使用 ViewPager 的应用程序,每个页面都有一个视频。一切在每部智能手机上都运行良好,但在 Android 4.1.2
的三星 GT-I8260 中却无法运行所以在这个智能手机中,当我编译它时 returns IOException: Prepare failed.: status=0x1 并且它指向 mMediaPlayer.prepare();
现在的代码是下一个:
//First of all I initilize MediaPlayer and I handle the Callback method for SurfaceView
mMediaPlayer = new MediaPlayer();
mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mMediaPlayer.release();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
holder.setSizeFromLayout();
playVideoDelay();
}
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
}
});
//The app plays the first video with the next method
private void playVideoDelay() {
try {
Uri path = Uri.parse("android.resource://com.casabioclimatica/raw/"+mVideoId);
mMediaPlayer.reset();
mMediaPlayer.setDataSource( mActivity, path);
mMediaPlayer.setDisplay(mSurfaceView.getHolder());
mMediaPlayer.prepare();
if (Build.VERSION.SDK_INT >= 16)
mMediaPlayer
.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
// fis = new FileInputStream(new File(path.getPath()));
//mMediaPlayer.setDataSource(fis.getFD());
} catch (Exception e) {
e.printStackTrace();
}
}
//When ViewPager changes it pages I call this method:
public void playVideoDelay(int videoId) {
try {
Uri path = Uri.parse("android.resource://com.casabioclimatica/raw/"+videoId);
mMediaPlayer.reset();
mMediaPlayer.setDataSource( mActivity, path);
mMediaPlayer.setDisplay(mSurfaceView.getHolder());
mMediaPlayer.prepare();
if (Build.VERSION.SDK_INT >= 16)
mMediaPlayer
.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
希望有人遇到过类似的事情并且知道正确的解决方案! 谢谢!
经过大量代码更改后,我发现了这款智能手机的问题,这是因为最大分辨率。在这种情况下,它有 800 x 480 像素,而我使用的是 1080 x 800,它太多了,Dalvik 机器解释这种情况,就像这个文件不存在或不起作用。我已经更改了文件的高和宽大小,效果非常好!
因此对于任何类似情况:请注意您的屏幕支持的最大分辨率,并尝试使用此尺寸以避免在渲染视频时出现任何奇怪的错误。
希望对您有所帮助!