Comments (3)
可以用MediaPlayer实现吗,在demo 里按照IjkPlayer 模板实现试了一下, MediaPlayer 一直报错, 找不到原因。。。
可以将你的代码贴一下。
from jeffvideocache.
可以用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;
};
}
from jeffvideocache.
这个是大概的日志, 中间有一段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)
from jeffvideocache.
Related Issues (20)
- 当m3u8有加密key时,缓存成功后必须在有网络的情况下才能进行本地代理播放 HOT 1
- 请问如何使用exoplayer2自带ui中的playerview控件? HOT 4
- 缓存怎么使用的,可以写清楚一下吗,大佬 HOT 6
- demo换成mp4视频无法播放 HOT 2
- 请问可以支持只缓存部分数据吗? HOT 6
- 能直接给GSYvideoplayer用吗 HOT 1
- 大佬,请问 setPlayingUrlMd5() 是干嘛的? HOT 1
- 只支持mp4和m3u8吗?我换成mkv就一直在转圈圈;
- parseRequest请求一直报错,请大佬看看
- Mp4CacheTask.getRequestRange() 逻辑困惑
- 多段缓存时,Mp4CacheTask.getRequestRange() 返回的分段问题
- 你好!来自客户端的seek操作
- 忽略了一种切片suffix情况,望修复 HOT 3
- 有些有文件内版权信息的视频,会让ijkPlayer发出多次http请求,这时咱们的代理就会卡住,界面视频一直loading HOT 1
- 重大BUG。视频seek在最后,再往回seek到中间,数据出错,播放器无法播放。 HOT 1
- 需要缓存完一整个视频才能播放 HOT 3
- 这个播放和 MediaSDK里面的播放器两个有啥区别。 HOT 3
- 改了一下getRequestRange HOT 1
- 怎么支持多音轨切换? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jeffvideocache.