bilibili / ijkplayer

Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.
GNU General Public License v2.0
32.44k stars 8.11k forks source link

循环播放视频 #4382

Open FaithOo opened 6 years ago

FaithOo commented 6 years ago

循环播放视频在开始部分卡死了,没有获取到log。只能看代码 ,哪里什么配置吗?

/**

// if (usingOpenSLES) { // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 1); // } else { // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 0); // } // // if (TextUtils.isEmpty(pixelFormat)) { // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32); // } else { // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", pixelFormat); // } // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1); // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0); // // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "http-detect-range-support", 0); // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "timeout", 10000000); // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "reconnect", 1); // // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48); } mMediaPlayer = ijkMediaPlayer; }

        if (enableBackgroundPlay) {
            mMediaPlayer = new TextureMediaPlayer(mMediaPlayer);
        }

        // TODO: create SubtitleController in MediaPlayer, but we need
        // a context for the subtitle renderers
        final Context context = getContext();
        // REMOVED: SubtitleController

        // REMOVED: mAudioSession
        /**视频准备播放监听*/
        mMediaPlayer.setOnPreparedListener(mPreparedListener);
        /**视频播放完成监听*/
        mMediaPlayer.setOnCompletionListener(mCompletionListener);
        /**视频错误监听*/
        mMediaPlayer.setOnErrorListener(mErrorListener);
        /**视频其他信息监听*/
        mMediaPlayer.setOnInfoListener(mInfoListener);
        /**视频界面大小改变监听*/
        mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);
        /**视频缓冲监听*/
        mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener);
        mCurrentBufferPercentage = 0;
        String scheme = mUri.getScheme();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
                usingAndroidPlayer &&
                (TextUtils.isEmpty(scheme) || scheme.equalsIgnoreCase("file"))) {
            IMediaDataSource dataSource = new FileMediaDataSource(new File(mUri.toString()));
            mMediaPlayer.setDataSource(dataSource);
        } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            mMediaPlayer.setDataSource(mAppContext, mUri, mHeaders);
        } else {
            mMediaPlayer.setDataSource(mUri.toString());
        }
        bindSurfaceHolder(mMediaPlayer, mSurfaceHolder);
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mMediaPlayer.setScreenOnWhilePlaying(true);
        mMediaPlayer.prepareAsync();

        // REMOVED: mPendingSubtitleTracks

        // we don't set the target state here either, but preserve the target state that was there before.我们这里不设置目标状态,但保护的目标状态
        mCurrentState = PlayStateParams.STATE_PREPARING;
        attachMediaController();
    } catch (IOException ex) {
        Log.w(TAG, "Unable to open content: " + mUri, ex);
        mCurrentState = PlayStateParams.STATE_ERROR;
        mTargetState = PlayStateParams.STATE_ERROR;
        mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
        return;
    } catch (IllegalArgumentException ex) {
        Log.w(TAG, "Unable to open content: " + mUri, ex);
        mCurrentState = PlayStateParams.STATE_ERROR;
        mTargetState = PlayStateParams.STATE_ERROR;
        mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
        return;
    } finally {
        // REMOVED: mPendingSubtitleTracks.clear();
    }
}
xiaolexian commented 5 years ago

iOS 同问