Open WuCh1k1n opened 5 years ago
定义回调:类 FileAndroidIO.java
public class FileAndroidIO implements IAndroidIO { private static String TAG = "ANDROID_IO_TRACE"; private RandomAccessFile file; public FileAndroidIO() { } @Override public int open(String url) throws IOException { Log.i(TAG, "open , url = " + url); this.file = new RandomAccessFile(new File(url), "r"); return 1; } @Override public int read(byte[] buffer, int size) throws IOException { int read = file.read(buffer, 0, size); Log.i(TAG, "read , size=" + size + " , bufferLength = " + buffer.length + " , read=" + read); return read; } @Override public long seek(long offset, int whence) throws IOException { Log.i(TAG, "seek , offset=" + offset + ", whence=" + whence); file.seek(offset); return file.getFilePointer(); } @Override public int close() throws IOException { Log.i(TAG, "close"); file.close(); file = null; return 1; }
}
设置回调: 类 IjkVideoView.java private void openVideo() {
if (mUri == null || mSurfaceHolder == null) { // not ready for playback just yet, will try again later return; } // we shouldn't clear the target state, because somebody might have // called start() previously release(false); AudioManager am = (AudioManager) mAppContext.getSystemService(Context.AUDIO_SERVICE); am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); try { mMediaPlayer = createPlayer(mSettings.getPlayer()); // 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.setOnVideoSizeChangedListener(mSizeChangedListener); mMediaPlayer.setOnCompletionListener(mCompletionListener); mMediaPlayer.setOnErrorListener(mErrorListener); mMediaPlayer.setOnInfoListener(mInfoListener); mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener); mMediaPlayer.setOnSeekCompleteListener(mSeekCompleteListener); mMediaPlayer.setOnTimedTextListener(mOnTimedTextListener); mCurrentBufferPercentage = 0; //-------------------------修改------------------------- ((IjkMediaPlayer) mMediaPlayer).setAndroidIOCallback(new FileAndroidIO()); // mUri = Uri.parse("ijkio:httphook:" + mUri.toString()); mUri = Uri.parse("ijkio:androidio:" + mUri.toString()); //-------------------------修改------------------------- String scheme = mUri.getScheme(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && mSettings.getUsingMediaDataSource() && (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); mPrepareStartTime = System.currentTimeMillis(); mMediaPlayer.prepareAsync(); if (mHudViewHolder != null) mHudViewHolder.setMediaPlayer(mMediaPlayer); // REMOVED: mPendingSubtitleTracks // we don't set the target state here either, but preserve the // target state that was there before. mCurrentState = STATE_PREPARING; attachMediaController(); } catch (IOException ex) { Log.w(TAG, "Unable to open content: " + mUri, ex); mCurrentState = STATE_ERROR; mTargetState = STATE_ERROR; mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0); } catch (IllegalArgumentException ex) { Log.w(TAG, "Unable to open content: " + mUri, ex); mCurrentState = STATE_ERROR; mTargetState = STATE_ERROR; mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0); } finally { // REMOVED: mPendingSubtitleTracks.clear(); } }
@raymond1012 这是我的修改 有错敬请指正~
Originally posted by @shuqiao in https://github.com/bilibili/ijkplayer/issues/3834#issuecomment-350636239
我也定义了 FileAndroidIO.java,并且在 ijkVideoView.java 中 setAndroidIOCallback。但是播放视频的时候就闪退了,报错如下: 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example V/IJKMEDIA: setDataSource: path ijkio:androidio:/storage/emulated/0/Movies/SD2019-05-06-10-13-32.mp4 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_set_data_source(url="ijkio:androidio:/storage/emulated/0/Movies/SD2019-05-06-10-13-32.mp4") 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_set_data_source(url="ijkio:androidio:/storage/emulated/0/Movies/SD2019-05-06-10-13-32.mp4")=0 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: IjkMediaPlayer_setVideoSurface 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_set_android_surface(surface=0x7ff5000628) 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ffpipeline_set_surface() 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_set_android_surface(surface=0x7ff5000628)=void 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: IjkMediaPlayer_prepareAsync 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_prepare_async() 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: ===== versions ===== 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: ijkplayer : k0.8.8 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: FFmpeg : ff3.4--ijk0.8.7--20180103--001 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: libavutil : 55.78.100 08-21 17:49:48.950 20596-20659/tv.danmaku.ijk.media.example I/IJKMEDIA: SDL_RunThread: [20659] ff_msg_loop 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: libavcodec : 57.107.100 08-21 17:49:48.950 20596-20659/tv.danmaku.ijk.media.example D/IJKMEDIA: message_loop 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: libavformat : 57.83.100 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: libswscale : 4.8.100 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: libswresample: 2.9.100 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: ===== options ===== 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : mediacodec = 0 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : opensles = 0 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : overlay-format = 842225234 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : framedrop = 1 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : start-on-prepared = 0 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : ijkapplication = 367467380576 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : ijkiomanager = 367467380736 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : http-detect-range-support = 0 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : androidio-inject-callback = 1049930 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: codec-opts : skip_loop_filter = 48 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: =================== 08-21 17:49:48.951 20596-20659/tv.danmaku.ijk.media.example D/IJKMEDIA: FFP_MSG_FLUSH: 08-21 17:49:48.952 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_prepare_async()=0 08-21 17:49:48.952 20596-20660/tv.danmaku.ijk.media.example I/IJKMEDIA: SDL_RunThread: [20660] ff_vout 08-21 17:49:48.952 20596-20661/tv.danmaku.ijk.media.example I/IJKMEDIA: SDL_RunThread: [20661] ff_read 08-21 17:49:48.952 20596-20661/tv.danmaku.ijk.media.example D/IJKMEDIA: Opening 'ijkio:androidio:/storage/emulated/0/Movies/SD2019-05-06-10-13-32.mp4' for reading 08-21 17:49:48.952 20596-20661/tv.danmaku.ijk.media.example D/IJKMEDIA: AVOption type 127 of option async not implemented yet
--------- beginning of crash
08-21 17:49:48.952 20596-20661/tv.danmaku.ijk.media.example A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x7f00000010 in tid 20661 (ff_read) 08-21 17:49:49.005 551-551/? A/DEBUG: 08-21 17:49:49.005 551-551/? A/DEBUG: Build fingerprint: 'HONOR/CAM-AL00/HWCAM-Q:6.0/HONORCAM-AL00/C00B243:user/release-keys' 08-21 17:49:49.005 551-551/? A/DEBUG: Revision: '0' 08-21 17:49:49.005 551-551/? A/DEBUG: ABI: 'arm64' 08-21 17:49:49.005 551-551/? A/DEBUG: pid: 20596, tid: 20661, name: ff_read >>> tv.danmaku.ijk.media.example <<< 08-21 17:49:49.005 551-551/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x7f00000010 08-21 17:49:49.022 551-551/? A/DEBUG: x0 0000007f00000000 x1 0000000000000000 x2 000000558ecc5620 x3 0000000000000000 08-21 17:49:49.022 551-551/? A/DEBUG: x4 0000000000000000 x5 0000007f8eed90b0 x6 000000558ebc2d20 x7 000000558eab5540 08-21 17:49:49.022 551-551/? A/DEBUG: x8 0000000000000000 x9 0000000000000049 x10 0000000000000000 x11 00000000ffffff9f 08-21 17:49:49.022 551-551/? A/DEBUG: x12 0000000000000005 x13 0000007faec99be8 x14 0000000000000000 x15 0000000040051440 08-21 17:49:49.022 551-551/? A/DEBUG: x16 0000007faec92a60 x17 0000000000000000 x18 0000007faec99000 x19 0000000000000000 08-21 17:49:49.022 551-551/? A/DEBUG: x20 000000558ecc5620 x21 0000000000000000 x22 0000000000000000 x23 0000000000000000 08-21 17:49:49.022 551-551/? A/DEBUG: x24 000000558eab5540 x25 0000007f8eed90b0 x26 0000007faec50000 x27 0000007f00000000 08-21 17:49:49.022 551-551/? A/DEBUG: x28 0000007f8eed92d8 x29 0000007f8eed9420 x30 0000007f8fa39038 08-21 17:49:49.022 551-551/? A/DEBUG: sp 0000007f8eed9000 pc 0000007f8fa38964 pstate 0000000020000000 08-21 17:49:49.023 551-551/? A/DEBUG: backtrace: 08-21 17:49:49.023 551-551/? A/DEBUG: #00 pc 0000000000270964 /data/app/tv.danmaku.ijk.media.example-1/lib/arm64/libijkffmpeg.so (av_opt_next+20) 08-21 17:49:49.023 551-551/? A/DEBUG: #01 pc 0000000000271034 /data/app/tv.danmaku.ijk.media.example-1/lib/arm64/libijkffmpeg.so (av_opt_find2+228) @raymond1012 @shuqiao 请问知道是什么问题吗?是有什么东西还没配置吗?
你io的写法不对
请问正确写法该怎么写呢 我也遇到了这个问题
定义回调:类 FileAndroidIO.java
}
设置回调: 类 IjkVideoView.java private void openVideo() {
@raymond1012 这是我的修改 有错敬请指正~
Originally posted by @shuqiao in https://github.com/bilibili/ijkplayer/issues/3834#issuecomment-350636239
我也定义了 FileAndroidIO.java,并且在 ijkVideoView.java 中 setAndroidIOCallback。但是播放视频的时候就闪退了,报错如下: 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example V/IJKMEDIA: setDataSource: path ijkio:androidio:/storage/emulated/0/Movies/SD2019-05-06-10-13-32.mp4 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_set_data_source(url="ijkio:androidio:/storage/emulated/0/Movies/SD2019-05-06-10-13-32.mp4") 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_set_data_source(url="ijkio:androidio:/storage/emulated/0/Movies/SD2019-05-06-10-13-32.mp4")=0 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: IjkMediaPlayer_setVideoSurface 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_set_android_surface(surface=0x7ff5000628) 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ffpipeline_set_surface() 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_set_android_surface(surface=0x7ff5000628)=void 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: IjkMediaPlayer_prepareAsync 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_prepare_async() 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: ===== versions ===== 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: ijkplayer : k0.8.8 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: FFmpeg : ff3.4--ijk0.8.7--20180103--001 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: libavutil : 55.78.100 08-21 17:49:48.950 20596-20659/tv.danmaku.ijk.media.example I/IJKMEDIA: SDL_RunThread: [20659] ff_msg_loop 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: libavcodec : 57.107.100 08-21 17:49:48.950 20596-20659/tv.danmaku.ijk.media.example D/IJKMEDIA: message_loop 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: libavformat : 57.83.100 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: libswscale : 4.8.100 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: libswresample: 2.9.100 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: ===== options ===== 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : mediacodec = 0 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : opensles = 0 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : overlay-format = 842225234 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : framedrop = 1 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : start-on-prepared = 0 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : ijkapplication = 367467380576 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : ijkiomanager = 367467380736 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : http-detect-range-support = 0 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : androidio-inject-callback = 1049930 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: codec-opts : skip_loop_filter = 48 08-21 17:49:48.950 20596-20596/tv.danmaku.ijk.media.example I/IJKMEDIA: =================== 08-21 17:49:48.951 20596-20659/tv.danmaku.ijk.media.example D/IJKMEDIA: FFP_MSG_FLUSH: 08-21 17:49:48.952 20596-20596/tv.danmaku.ijk.media.example D/IJKMEDIA: ijkmp_prepare_async()=0 08-21 17:49:48.952 20596-20660/tv.danmaku.ijk.media.example I/IJKMEDIA: SDL_RunThread: [20660] ff_vout 08-21 17:49:48.952 20596-20661/tv.danmaku.ijk.media.example I/IJKMEDIA: SDL_RunThread: [20661] ff_read 08-21 17:49:48.952 20596-20661/tv.danmaku.ijk.media.example D/IJKMEDIA: Opening 'ijkio:androidio:/storage/emulated/0/Movies/SD2019-05-06-10-13-32.mp4' for reading 08-21 17:49:48.952 20596-20661/tv.danmaku.ijk.media.example D/IJKMEDIA: AVOption type 127 of option async not implemented yet
08-21 17:49:48.952 20596-20661/tv.danmaku.ijk.media.example A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x7f00000010 in tid 20661 (ff_read) 08-21 17:49:49.005 551-551/? A/DEBUG: 08-21 17:49:49.005 551-551/? A/DEBUG: Build fingerprint: 'HONOR/CAM-AL00/HWCAM-Q:6.0/HONORCAM-AL00/C00B243:user/release-keys' 08-21 17:49:49.005 551-551/? A/DEBUG: Revision: '0' 08-21 17:49:49.005 551-551/? A/DEBUG: ABI: 'arm64' 08-21 17:49:49.005 551-551/? A/DEBUG: pid: 20596, tid: 20661, name: ff_read >>> tv.danmaku.ijk.media.example <<< 08-21 17:49:49.005 551-551/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x7f00000010 08-21 17:49:49.022 551-551/? A/DEBUG: x0 0000007f00000000 x1 0000000000000000 x2 000000558ecc5620 x3 0000000000000000 08-21 17:49:49.022 551-551/? A/DEBUG: x4 0000000000000000 x5 0000007f8eed90b0 x6 000000558ebc2d20 x7 000000558eab5540 08-21 17:49:49.022 551-551/? A/DEBUG: x8 0000000000000000 x9 0000000000000049 x10 0000000000000000 x11 00000000ffffff9f 08-21 17:49:49.022 551-551/? A/DEBUG: x12 0000000000000005 x13 0000007faec99be8 x14 0000000000000000 x15 0000000040051440 08-21 17:49:49.022 551-551/? A/DEBUG: x16 0000007faec92a60 x17 0000000000000000 x18 0000007faec99000 x19 0000000000000000 08-21 17:49:49.022 551-551/? A/DEBUG: x20 000000558ecc5620 x21 0000000000000000 x22 0000000000000000 x23 0000000000000000 08-21 17:49:49.022 551-551/? A/DEBUG: x24 000000558eab5540 x25 0000007f8eed90b0 x26 0000007faec50000 x27 0000007f00000000 08-21 17:49:49.022 551-551/? A/DEBUG: x28 0000007f8eed92d8 x29 0000007f8eed9420 x30 0000007f8fa39038 08-21 17:49:49.022 551-551/? A/DEBUG: sp 0000007f8eed9000 pc 0000007f8fa38964 pstate 0000000020000000 08-21 17:49:49.023 551-551/? A/DEBUG: backtrace: 08-21 17:49:49.023 551-551/? A/DEBUG: #00 pc 0000000000270964 /data/app/tv.danmaku.ijk.media.example-1/lib/arm64/libijkffmpeg.so (av_opt_next+20) 08-21 17:49:49.023 551-551/? A/DEBUG: #01 pc 0000000000271034 /data/app/tv.danmaku.ijk.media.example-1/lib/arm64/libijkffmpeg.so (av_opt_find2+228) @raymond1012 @shuqiao 请问知道是什么问题吗?是有什么东西还没配置吗?