【问题标题】:Error when play video from raw folder in Android MediaPlayer从 Android MediaPlayer 中的原始文件夹播放视频时出错
【发布时间】:2015-04-19 10:19:45
【问题描述】:

我正在尝试从原始文件夹播放视频,但结果它返回以下错误

错误 (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

    }
}

【问题讨论】:

    标签: android android-mediaplayer media


    【解决方案1】:

    注意:众所周知,MediaPlayers 是通过 API 1 创建的,因此存在问题。因此建议您手动处理媒体播放器的所有错误。

    您的问题: 简而言之,您没有将媒体播放器与表面连接

    你可以快速尝试:

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

    我确实建议您尝试以下 VideoPlayerManager 类。

    使用示例

    VideoView videoView = ((VideoView) findViewById(R.id.VideoView));
    _videoPlayer = new VideoPlayerManager(getApplicationContext(),videoView);
    videoView.getHolder().addCallback(_videoPlayer);
    

    VideoPlayerManager 类

    /**
     * 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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 2018-07-16
      相关资源
      最近更新 更多