JeffMony / JeffVideoCache

Better than AndroidVideoCache, it supports M3U8 and MP4
Apache License 2.0
290 stars 65 forks source link

大佬,可以增加原生api MediaPlayer 实现的demo吗 #10

Open qyf123 opened 3 years ago

qyf123 commented 3 years ago

可以用MediaPlayer实现吗,在demo 里按照IjkPlayer 模板实现试了一下, MediaPlayer 一直报错, 找不到原因。。。

JeffMony commented 3 years ago

可以用MediaPlayer实现吗,在demo 里按照IjkPlayer 模板实现试了一下, MediaPlayer 一直报错, 找不到原因。。。

可以将你的代码贴一下。

qyf123 commented 3 years ago

可以用MediaPlayer实现吗,在demo 里按照IjkPlayer 模板实现试了一下, MediaPlayer 一直报错, 找不到原因。。。

可以将你的代码贴一下。

是在demo里复制了一下IjkPlayerImpl 改成了MediaPlayer , 下面是代码:

public class MediaPlayerImpl extends BasePlayerImpl { private static final String TAG = "MediaPlayerImpl";

private MediaPlayer mIjkPlayer;

public MediaPlayerImpl(Context context) {
    super(context);
    mIjkPlayer = new MediaPlayer();
    initPlayerListeners();
}

private void initPlayerListeners() {
    mIjkPlayer.setOnPreparedListener(mOnPreparedListener);
    mIjkPlayer.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);
    mIjkPlayer.setOnErrorListener(mOnErrorListener);
}

@Override
public void setDataSource(Context context, Uri uri, Map<String, String> headers) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException {
    String playUrl;
    if (mPlayerSettings.getLocalProxyEnable()) {
        playUrl = ProxyCacheUtils.getProxyUrl(uri.toString(), null, null);
        //请求放在客户端,非常便于控制
        mLocalProxyVideoControl.startRequestVideoInfo(uri.toString(), null, null);
    } else {
        playUrl = uri.toString();
    }
    mIjkPlayer.setDataSource(context, Uri.parse(playUrl), headers);
}

@Override
public void setSeekType(SeekType type) {

// if (type == SeekType.EXACT_SYNC) { // mIjkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1); // } else { // mIjkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 0); // } }

@Override
public void setSurface(Surface surface) {
    mIjkPlayer.setSurface(surface);
}

@Override
public void prepareAsync() throws IllegalStateException {
    mIjkPlayer.prepareAsync();
}

@Override
public void start() throws IllegalStateException {
    if (mPlayerSettings.getLocalProxyEnable()) {
        mLocalProxyVideoControl.resumeLocalProxyTask();
    }
    mIjkPlayer.start();
}

@Override
public void stop() throws IllegalStateException {
    mIjkPlayer.stop();
}

@Override
public void pause() throws IllegalStateException {
    if (mPlayerSettings.getLocalProxyEnable()) {
        mLocalProxyVideoControl.pauseLocalProxyTask();
    }
    mIjkPlayer.pause();
}

@Override
public void setSpeed(float speed) {
    //mIjkPlayer.setSpeed(speed);
}

@Override
public long getCurrentPosition() {
    return mIjkPlayer.getCurrentPosition();
}

@Override
public long getBufferedPosition() {
    if (mPlayerSettings.getLocalProxyEnable()) {
        return (long) (mProxyCachePercent * mIjkPlayer.getDuration() / 100);
    }
    return 0;
}

@Override
public long getDuration() {
    return mIjkPlayer.getDuration();
}

@Override
public boolean isPlaying() {
    return mIjkPlayer.isPlaying();
}

@Override
public void reset() {
    mIjkPlayer.reset();
}

@Override
public void release() {
    if (mPlayerSettings.getLocalProxyEnable()) {
        mLocalProxyVideoControl.releaseLocalProxyResources();
    }
    mIjkPlayer.release();
}

@Override
public void seekTo(long position) throws IllegalStateException {
    if (mPlayerSettings.getLocalProxyEnable()) {
        mLocalProxyVideoControl.seekToCachePosition(position);
    }
    //mIjkPlayer.seekTo(position);
}

private MediaPlayer.OnPreparedListener mOnPreparedListener = mp -> notifyOnPrepared();

private MediaPlayer.OnVideoSizeChangedListener mOnVideoSizeChangedListener = new MediaPlayer.OnVideoSizeChangedListener() {
    @Override
    public void onVideoSizeChanged(MediaPlayer mediaPlayer, int width, int height) {
        notifyOnVideoSizeChanged(width, height, 1, 1, 0);
    }
};

private MediaPlayer.OnErrorListener mOnErrorListener = (mp, what, extra) -> {
    notifyOnError(what, "" + extra);
    return true;
};

}

qyf123 commented 3 years ago

这个是大概的日志, 中间有一段error

2021-06-24 15:57:47.705 24576-24576/com.jeffmony.sample I/ViewRootImpl@4c2aa87[MainActivity]: ViewPostIme pointer 0 2021-06-24 15:57:47.802 24576-24576/com.jeffmony.sample I/ViewRootImpl@4c2aa87[MainActivity]: ViewPostIme pointer 1 2021-06-24 15:57:47.846 24576-24576/com.jeffmony.sample I/DecorView: [INFO] isPopOver=false, config=true 2021-06-24 15:57:47.847 24576-24576/com.jeffmony.sample I/DecorView: updateCaptionType >> DecorView@5cc1205[], isFloating=false, isApplication=true, hasWindowDecorCaption=false, hasWindowControllerCallback=true 2021-06-24 15:57:47.847 24576-24576/com.jeffmony.sample D/DecorView: setCaptionType = 0, this = DecorView@5cc1205[] 2021-06-24 15:57:47.894 24576-24576/com.jeffmony.sample D/InputTransport: Input channel constructed: '5a26b5a', fd=91 2021-06-24 15:57:47.896 24576-24576/com.jeffmony.sample I/ViewRootImpl@54ef6e5[VideoPlayActivity]: setView = com.android.internal.policy.DecorView@5cc1205 TM=true 2021-06-24 15:57:47.917 24576-24576/com.jeffmony.sample I/SurfaceControl: assignNativeObject: nativeObject = 0 Surface(name=null)/@0xbf715ba / android.view.SurfaceControl.readFromParcel:1115 android.view.IWindowSession$Stub$Proxy.relayout:1820 android.view.ViewRootImpl.relayoutWindow:9005 android.view.ViewRootImpl.performTraversals:3360 android.view.ViewRootImpl.doTraversal:2618 android.view.ViewRootImpl$TraversalRunnable.run:9971 android.view.Choreographer$CallbackRecord.run:1010 android.view.Choreographer.doCallbacks:809 android.view.Choreographer.doFrame:744 android.view.Choreographer$FrameDisplayEventReceiver.run:995 2021-06-24 15:57:47.919 24576-24576/com.jeffmony.sample I/ViewRootImpl@54ef6e5[VideoPlayActivity]: Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)0 dur=12 res=0x7 s={true 492312436736} ch=true fn=-1 2021-06-24 15:57:47.924 24576-24576/com.jeffmony.sample I/ViewRootImpl@54ef6e5[VideoPlayActivity]: [DP] dp(1) 1 android.view.ViewRootImpl.reportNextDraw:10957 android.view.ViewRootImpl.performTraversals:3845 android.view.ViewRootImpl.doTraversal:2618 2021-06-24 15:57:47.924 24576-24576/com.jeffmony.sample I/ViewRootImpl@54ef6e5[VideoPlayActivity]: [DP] pd() Asnyc report 2021-06-24 15:57:47.927 24576-24576/com.jeffmony.sample V/MediaPlayer-JNI: native_setup 2021-06-24 15:57:47.927 24576-24576/com.jeffmony.sample V/MediaPlayerNative: constructor 2021-06-24 15:57:47.927 24576-24576/com.jeffmony.sample V/MediaPlayerNative: setListener 2021-06-24 15:57:47.932 24576-24576/com.jeffmony.sample V/MediaPlayerNative: setVideoSurfaceTexture 2021-06-24 15:57:47.937 24576-24576/com.jeffmony.sample I/StorageUtils: readVideoCacheInfo : dir=/storage/emulated/0/Android/data/com.jeffmony.sample/files/Video/jeffmony/d55728f26bfeb5f32e77b00d320c605f 2021-06-24 15:57:47.946 24576-24576/com.jeffmony.sample I/VideoProxyCacheManager: startRequestVideoInfo VideoCacheInfo[url=https://static.starscape.live/2021-06-21/3643311789e2ceab54b95cae86261aba/chunk/playlist.m3u8,type=1,isCompleted=true,cachedSize=4781592,totalSize=4781592,cachedTs=17,totalTs=17] 2021-06-24 15:57:47.947 24576-24576/com.jeffmony.sample V/MediaHTTPService: MediaHTTPService(android.media.MediaHTTPService@3f0d386): Cookies: null 2021-06-24 15:57:47.954 24576-24576/com.jeffmony.sample V/MediaPlayerNative: setVideoSurfaceTexture 2021-06-24 15:57:47.955 24576-24576/com.jeffmony.sample V/MediaPlayerNative: prepareAsync 2021-06-24 15:57:47.957 24576-25159/com.jeffmony.sample V/MediaHTTPService: makeHTTPConnection: CookieHandler (java.net.CookieManager@792cde) exists. 2021-06-24 15:57:47.957 24576-25159/com.jeffmony.sample V/MediaHTTPService: makeHTTPConnection(android.media.MediaHTTPService@3f0d386): cookieHandler: java.net.CookieManager@792cde Cookies: null 2021-06-24 15:57:47.966 24576-25159/com.jeffmony.sample I/MediaHTTPConnection: setReadTimeout and setConnectTimeout with 8000ms 2021-06-24 15:57:47.967 24576-24576/com.jeffmony.sample I/ViewRootImpl@54ef6e5[VideoPlayActivity]: [DP] pdf(0) 1 android.view.ViewRootImpl.lambda$performDraw$1$ViewRootImpl:4668 android.view.-$$Lambda$ViewRootImpl$DJd0VUYJgsebcnSohO6h8zc_ONI.run:6 android.os.Handler.handleCallback:938 2021-06-24 15:57:47.967 24576-24576/com.jeffmony.sample I/ViewRootImpl@54ef6e5[VideoPlayActivity]: [DP] rdf() 2021-06-24 15:57:47.967 24576-25159/com.jeffmony.sample I/System.out: (HTTPLog)-Static: isSBSettingEnabled false 2021-06-24 15:57:47.967 24576-30870/com.jeffmony.sample I/VideoProxyCacheManager: onTaskCompleted ----, totalSize=4781592 2021-06-24 15:57:47.967 24576-25159/com.jeffmony.sample I/System.out: (HTTPLog)-Static: isSBSettingEnabled false 2021-06-24 15:57:47.968 24576-24576/com.jeffmony.sample I/ViewRootImpl@4c2aa87[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 0 1 2021-06-24 15:57:47.970 24576-25159/com.jeffmony.sample I/System.out: (HTTPLog)-Static: isSBSettingEnabled false 2021-06-24 15:57:47.970 24576-25159/com.jeffmony.sample I/System.out: (HTTPLog)-Static: isSBSettingEnabled false 2021-06-24 15:57:47.978 24576-30877/com.jeffmony.sample I/SocketProcessTask: sRequestCountAtomic : 1 2021-06-24 15:57:47.989 24576-25159/com.jeffmony.sample I/MediaHTTPConnection: response code = 200 2021-06-24 15:57:47.989 24576-30877/com.jeffmony.sample I/M3U8Response: Send M3U8 video info end, this=com.jeffmony.videocache.socket.response.M3U8Response@70ede0c 2021-06-24 15:57:47.990 24576-24576/com.jeffmony.sample I/SurfaceControl: release : mNativeObject = 495103274496 - Surface(name=Surface(name=dcbb838 InputMethod)/@0x6ae8777 - animation-leash)/@0xd4b2a38 / android.view.-$$Lambda$Rl1VZmNJ0VZDLK0BAbaVGis0rrA.accept:2 android.view.InsetsSourceControl.release:170 android.view.InsetsSourceConsumer.setControl:202 android.view.ImeInsetsSourceConsumer.setControl:154 2021-06-24 15:57:47.991 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject s[495103274496] 2021-06-24 15:57:47.991 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject e[495103274496] 2021-06-24 15:57:47.991 24576-24576/com.jeffmony.sample I/SurfaceControl: release : mNativeObject = 495103268352 - Surface(name=Surface(name=2a4720 NavigationBar0)/@0x541a7fe - animation-leash)/@0x2446355 / android.view.-$$Lambda$Rl1VZmNJ0VZDLK0BAbaVGis0rrA.accept:2 android.view.InsetsSourceControl.release:170 android.view.InsetsSourceConsumer.setControl:202 android.view.InsetsController.onControlsChanged:833 2021-06-24 15:57:47.991 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject s[495103268352] 2021-06-24 15:57:47.991 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject e[495103268352] 2021-06-24 15:57:47.991 24576-24576/com.jeffmony.sample I/SurfaceControl: release : mNativeObject = 492312762816 - Surface(name=Surface(name=9396502 StatusBar)/@0x4d912b2 - animation-leash)/@0x620616a / android.view.-$$Lambda$Rl1VZmNJ0VZDLK0BAbaVGis0rrA.accept:2 android.view.InsetsSourceControl.release:170 android.view.InsetsSourceConsumer.setControl:202 android.view.InsetsController.onControlsChanged:833 2021-06-24 15:57:47.991 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject s[492312762816] 2021-06-24 15:57:47.991 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject e[492312762816] 2021-06-24 15:57:47.993 24576-24576/com.jeffmony.sample I/ViewRootImpl@54ef6e5[VideoPlayActivity]: MSG_WINDOW_FOCUS_CHANGED 1 1 2021-06-24 15:57:47.993 24576-24576/com.jeffmony.sample D/InputMethodManager: prepareNavigationBarInfo() DecorView@5cc1205[VideoPlayActivity] 2021-06-24 15:57:47.994 24576-24576/com.jeffmony.sample D/InputMethodManager: getNavigationBarColor() -855310 2021-06-24 15:57:47.995 24576-24576/com.jeffmony.sample D/InputMethodManager: prepareNavigationBarInfo() DecorView@5cc1205[VideoPlayActivity] 2021-06-24 15:57:47.995 24576-24576/com.jeffmony.sample D/InputMethodManager: getNavigationBarColor() -855310 2021-06-24 15:57:47.995 24576-24576/com.jeffmony.sample V/InputMethodManager: Starting input: tba=com.jeffmony.sample ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false 2021-06-24 15:57:47.996 24576-24576/com.jeffmony.sample D/InputMethodManager: startInputInner - Id : 0 2021-06-24 15:57:47.996 24576-24576/com.jeffmony.sample I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus 2021-06-24 15:57:48.000 24576-24576/com.jeffmony.sample D/InputTransport: Input channel constructed: 'ClientS', fd=96 2021-06-24 15:57:48.000 24576-24576/com.jeffmony.sample D/InputTransport: Input channel destroyed: 'ClientS', fd=97 2021-06-24 15:57:48.010 24576-24576/com.jeffmony.sample D/SurfaceControl: hide : mNativeObject = 495105193280 - sc.mNativeObject = 490475248928 - Surface(name=Surface(name=dcbb838 InputMethod)/@0x6ae8777 - animation-leash)/@0xb73f65b 2021-06-24 15:57:48.010 24576-24576/com.jeffmony.sample D/SurfaceControl: nativeSetFlags Done : Surface(name=Surface(name=dcbb838 InputMethod)/@0x6ae8777 - animation-leash)/@0xb73f65b 2021-06-24 15:57:48.011 24576-25196/com.jeffmony.sample V/MediaPlayerNative: message received msg=100, ext1=1, ext2=-2147483648 2021-06-24 15:57:48.011 24576-25196/com.jeffmony.sample E/MediaPlayerNative: error (1, -2147483648) 2021-06-24 15:57:48.012 24576-24576/com.jeffmony.sample I/SurfaceControl: release : mNativeObject = 492312004448 - Surface(name=Surface(name=2a4720 NavigationBar0)/@0x541a7fe - animation-leash)/@0xad1cef8 / android.view.-$$Lambda$Rl1VZmNJ0VZDLK0BAbaVGis0rrA.accept:2 android.view.InsetsSourceControl.release:170 android.view.InsetsSourceConsumer.setControl:202 android.view.InsetsController.onControlsChanged:833 2021-06-24 15:57:48.012 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject s[492312004448] 2021-06-24 15:57:48.012 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject e[492312004448] 2021-06-24 15:57:48.012 24576-24576/com.jeffmony.sample I/SurfaceControl: release : mNativeObject = 492312004064 - Surface(name=Surface(name=9396502 StatusBar)/@0x4d912b2 - animation-leash)/@0x434dfd1 / android.view.-$$Lambda$Rl1VZmNJ0VZDLK0BAbaVGis0rrA.accept:2 android.view.InsetsSourceControl.release:170 android.view.InsetsSourceConsumer.setControl:202 android.view.InsetsController.onControlsChanged:833 2021-06-24 15:57:48.012 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject s[492312004064] 2021-06-24 15:57:48.012 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject e[492312004064] 2021-06-24 15:57:48.013 24576-24576/com.jeffmony.sample I/SurfaceControl: release : mNativeObject = 492558296000 - Surface(name=Surface(name=dcbb838 InputMethod)/@0x6ae8777 - animation-leash)/@0x35b2a36 / android.view.-$$Lambda$Rl1VZmNJ0VZDLK0BAbaVGis0rrA.accept:2 android.view.InsetsSourceControl.release:170 android.view.InsetsSourceConsumer.setControl:202 android.view.ImeInsetsSourceConsumer.setControl:154 2021-06-24 15:57:48.013 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject s[492558296000] 2021-06-24 15:57:48.013 24576-24576/com.jeffmony.sample I/SurfaceControl: nativeRelease nativeObject e[492558296000] 2021-06-24 15:57:48.016 24576-24576/com.jeffmony.sample E/MediaPlayer: Error (1,-2147483648)