簡體   English   中英

使用SurfaceView僅在三星GT-I8260中渲染視頻時出現問題。 IOException:准備失敗。:status = 0x1

[英]Problems rendering video only in Samnsung GT-I8260 using SurfaceView. IOException: Prepare failed.: status=0x1

我正在開發一個使用ViewPager並在每個頁面中包含一個視頻的應用程序。 一切都可以在所有智能手機上正常運行,但不能在具有Android 4.1.2的Samsung GT-I8260中運行

因此,在此智能手機中,當我進行編譯時,它返回IOException:准備失敗。: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機器將這種情況解釋為該文件不存在或不起作用。 我更改了文件的高和寬大小,它的工作原理就像是魅力!

因此,對於任何類似的情況:請注意屏幕所支持的最大分辨率,並嘗試使用此尺寸來避免在渲染視頻時出現任何奇怪的錯誤。

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM