java - 仅在使用 SurfaceView 的 Samsung GT-I8260 中渲染视频时出现问题。异常 : Prepare failed.:状态=0x1

标签 java android media-player android-mediaplayer surfaceview

我正在开发一款使用 ViewPager 的应用程序,每个页面中有一个视频。在每部智能手机上一切正常,但在运行 Android 4.1.2 的 Samsung GT-I8260 上却无法正常工作

因此,在这款智能手机中,当我编译时,它会返回 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 机器将这种情况解释为该文件不存在或不起作用。我已经更改了文件的高度和宽度尺寸,它的效果非常好!

因此,对于任何类似的情况:请注意您支持的最大屏幕分辨率,并尝试使用此尺寸以避免渲染视频时出现任何奇怪的错误。

希望对你有帮助!

关于java - 仅在使用 SurfaceView 的 Samsung GT-I8260 中渲染视频时出现问题。异常 : Prepare failed.:状态=0x1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29766937/

相关文章:

java - 从 BMP 照片中提取内存初始化文件 (MIF)

Android 以 bundle 方式传递持久信息还是使用单例模式?

iphone - MPMoviePlayerViewController - 如何拦截或更改完成按钮的功能

android - android MediaPlayer res原始文件夹getContentUri

java - 格式化 Bean 生成器的 header 字段 - Java

java - Ext-GWT 高级表格

java - 多个dex文件定义Lcom/google/android/gms/ads/identifier/AdvertisingIdClient$Info;

android - 如何在Android模拟器(1.6)上安装SD卡

android - 应用程序未设置 : This app is still in development mode

android - 媒体播放器 : error (-19, 0)