jiajunhui / playerbase Goto Github PK
View Code? Open in Web Editor NEWThe basic library of Android player will process complex business components. The access is simple。Android播放器基础库,专注于播放视图组件的高复用性和组件间的低耦合,轻松处理复杂业务。
License: Apache License 2.0
The basic library of Android player will process complex business components. The access is simple。Android播放器基础库,专注于播放视图组件的高复用性和组件间的低耦合,轻松处理复杂业务。
License: Apache License 2.0
请问可以设置画页旋转吗
网络视频缓存到本地,再播放本地视频,为什么会loading一下,播放结束重播时也是,请问怎么把这个逻辑去掉
比如我想Window播放,然后返回上一个界面操作其他事件
无法播放raw文件夹下面的MP4格式的视频
如果在视频列表里面点击播放,然后上下滚动,此时视频播放停止,然后再次点击相同视频会出现无法播放。
Attempt to invoke interface method 'void com.kk.taurus.playerbase.extension.ReceiverEventSender.sendInt(java.lang.String, int)' on a null object reference
希望作者修一下 我这边就不fork改了
现在是对不同的CoverLevel设计3个不同的组别层级,但是在实际中,可能UI组件需要多于三个的显示层级顺序。但在同一Level层级中,要区分它们的显示顺序是做不到的(代码中是在ReceiverGroup中使用Set的增强for循环遍历Cover,这个在不同的JDK版本得出的结果可能不一样,可能根据key的hashCode得到一种有序的结果)。所以建议设计CoverLevel为int值(类似ZOrder的概念),来区分不同的显示层级。
还有既然设计了IReceiverGroup接口,为什么在xxx.setReceiverGroup(ReceiverGroup r)方法中,不指定参数为IReceiverGroup而是直接使用ReceiverGroup实现类?我想改你的forEach方法都做不到。。
布局方式是充满 renderView的测量宽度,高度根据比例计算。
比如 RenderMeasure.doMeasure 里的 四个变量:
widthSpecSize,
heightSpecSize,
mVideoWidth,
mVideoHeight,
使测量结果为:
mMeasureWidth = widthSpecSize
mMeasureHeight = widthSpecSize * mVideoHeight / mVideoWidth
添加字幕
谢谢
demo第1个BaseVideoView 点进去,切到后台,还是在播放,全屏也是
大佬好,请教一个问题,视频切换到横屏播放时,然后暂停播放,再切回到竖屏,这个时候并没有横屏播放时暂停的那一帧画面,而是黑屏。同理,竖屏暂停切横屏也会出现这种情况,请问这个要怎么处理呢?
这个应该不属于框架处理范围
视频缓冲完,没网状态下拖动进度条后,视频无法继续播放,这个体验不是很好
Caused by: java.lang.NoSuchMethodError: android.view.View.setClipToOutline
at com.kk.taurus.playerbase.style.StyleSetter.setRoundRectShape(StyleSetter.java:50)
at com.kk.taurus.playerbase.style.StyleSetter.setRoundRectShape(StyleSetter.java:44)
at com.kk.taurus.playerbase.widget.BaseVideoView.setRoundRectShape(BaseVideoView.java:488)
at com.kk.taurus.avplayer.ui.VideoViewActivity.onStyleSetRoundRect(VideoViewActivity.java:163)
没有做兼容低版本处理嘛?如果想在5.0以下机型使用,怎么设置?
每次Window的无缝切播退出后都会弹出的警告
刚看,没啥思路
续播是不是对解码器有要求的,发现如果注释掉demo中App的ijk和exo player,使用默认的mediaplayer,续播会出现问题
Hi:
暂停/播放 cover层状态切换同步有问题。 切换到全屏也有黑黑一片的问题
你好👋,我的应用用了PlayerBase后,是使用了RelationAssist,在部分4.2.2手机上面出现了这个奔溃
下面是奔溃信息
Thread Name: 'main'
Back traces starts.
java.lang.RuntimeException: Error during detachFromGLContext (see logcat for details)
at android.graphics.SurfaceTexture.attachToGLContext(SurfaceTexture.java:237)
at android.view.GLES20TextureLayer.setSurfaceTexture(GLES20TextureLayer.java:81)
at android.view.HardwareRenderer$Gl20Renderer.setSurfaceTexture(HardwareRenderer.java:1576)
at android.view.TextureView.getHardwareLayer(TextureView.java:393)
at android.view.View.getDisplayList(View.java:12806)
at android.view.View.getDisplayList(View.java:12887)
at android.view.View.draw(View.java:13632)
at android.view.ViewGroup.drawChild(ViewGroup.java:3045)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2909)
at android.view.View.getDisplayList(View.java:12838)
at android.view.View.getDisplayList(View.java:12887)
at android.view.View.draw(View.java:13632)
at android.view.ViewGroup.drawChild(ViewGroup.java:3045)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2909)
at android.view.View.draw(View.java:13939)
at android.widget.FrameLayout.draw(FrameLayout.java:467)
at android.view.View.getDisplayList(View.java:12843)
at android.view.View.getDisplayList(View.java:12887)
at android.view.View.draw(View.java:13632)
at android.view.ViewGroup.drawChild(ViewGroup.java:3045)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2909)
at android.view.View.draw(View.java:13939)
at android.widget.FrameLayout.draw(FrameLayout.java:467)
at android.view.View.getDisplayList(View.java:12843)
at android.view.View.getDisplayList(View.java:12887)
at android.view.View.draw(View.java:13632)
at android.view.ViewGroup.drawChild(ViewGroup.java:3045)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2909)
at android.view.View.draw(View.java:13939)
at android.widget.FrameLayout.draw(FrameLayout.java:467)
at android.view.View.getDisplayList(View.java:12843)
at android.view.View.getDisplayList(View.java:12887)
at android.view.View.draw(View.java:13632)
at android.view.ViewGroup.drawChild(ViewGroup.java:3045)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2909)
at android.view.View.getDisplayList(View.java:12838)
at android.view.View.getDisplayList(View.java:12887)
at android.view.View.draw(View.java:13632)
at android.view.ViewGroup.drawChild(ViewGroup.java:3045)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2909)
at android.view.View.getDisplayList(View.java:12838)
at android.view.View.getDisplayList(View.java:12887)
at android.view.View.draw(View.java:13632)
at android.view.ViewGroup.drawChild(ViewGroup.java:3045)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2909)
at android.view.View.getDisplayList(View.java:12838)
at android.view.View.getDisplayList(View.java:12887)
at android.view.View.draw(View.java:13632)
at android.view.ViewGroup.drawChild(ViewGroup.java:3045)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2909)
at android.view.View.draw(View.java:13939)
at android.widget.FrameLayout.draw(FrameLayout.java:467)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2228)
at android.view.View.getDisplayList(View.java:12843)
at android.view.View.getDisplayList(View.java:12887)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1249)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2523)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2390)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2192)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1181)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4945)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
at android.view.Choreographer.doCallbacks(Choreographer.java:579)
at android.view.Choreographer.doFrame(Choreographer.java:548)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5409)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:897)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:664)
at dalvik.system.NativeStart.main(Native Method)
Back traces ends.
视频播放加个重力感应就完美了
用ijkplayer播放4k视频卡顿,按ijkplayer官方文档开启mediacodec-hevc也还是会卡顿,但切换原生MediaPlayer播放就不会卡顿
库很不错,感谢作者的开源,如题 我使用库后会出现绿屏的问题,手机为Meizu mi metal android5.1 api22
出现场景为: 暂停播放后切换屏幕会出现绿屏(全屏操作或者跳到第二个页面再回来), 该库例子中使用的是 ijkplayer 改为系统播放器后,也会重现这个绿屏的问题
在哪里设置呢
Failed to register native method tv.danmaku.ijk.media.player.IjkMediaPlayer._injectCacheNode(IJJJJ)V in /data/app/-mJm7CVdaglBjUXLqzs-Lqg==/base.apk!classes2.dex
java_vm_ext.cc:534] JNI DETECTED ERROR IN APPLICATION: JNI FindClass called with pending exception java.lang.NoSuchMethodError: no static or non-static method "Ltv/danmaku/ijk/media/play
java_vm_ext.cc:534] at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.String) (Runtime.java:-2)
java_vm_ext.cc:534] at java.lang.String java.lang.Runtime.doLoad(java.lang.String, java.lang.ClassLoader) (Runtime.java:1099)
java_vm_ext.cc:534] at void java.lang.Runtime.loadLibrary0(java.lang.ClassLoader, java.lang.String) (Runtime.java:1014)
java_vm_ext.cc:534] at void java.lang.System.loadLibrary(java.lang.String) (System.java:1657)
java_vm_ext.cc:534] at void tv.danmaku.ijk.media.player.IjkMediaPlayer$1.loadLibrary(java.lang.String) (IjkMediaPlayer.java:179)
java_vm_ext.cc:534] at void tv.danmaku.ijk.media.player.IjkMediaPlayer.loadLibrariesOnce(tv.danmaku.ijk.media.player.IjkLibLoader) (IjkMediaPlayer.java:192)
java_vm_ext.cc:534] at void com.kk.taurus.ijkplayer.IjkPlayer.() (IjkPlayer.java:46)
java_vm_ext.cc:534] at java.lang.Class java.lang.Class.classForName(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:-2)
java_vm_ext.cc:534] at java.lang.Class java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:453)
java_vm_ext.cc:534] at java.lang.Class java.lang.Class.forName(java.lang.String) (Class.java:378)
java_vm_ext.cc:534] at java.lang.Class com.kk.taurus.playerbase.config.PlayerLoader.getSDKClass(java.lang.String) (PlayerLoader.java:75)
java_vm_ext.cc:534] at java.lang.Object com.kk.taurus.playerbase.config.PlayerLoader.getDecoderInstance(int) (PlayerLoader.java:49)
java_vm_ext.cc:534] at com.kk.taurus.playerbase.player.BaseInternalPlayer com.kk.taurus.playerbase.config.PlayerLoader.loadInternalPlayer(int) (PlayerLoader.java:36)
java_vm_ext.cc:534] at void com.kk.taurus.playerbase.AVPlayer.loadInternalPlayer(int) (AVPlayer.java:87)
java_vm_ext.cc:534] at void com.kk.taurus.playerbase.AVPlayer.(int) (AVPlayer.java:75)
java_vm_ext.cc:534] at void com.kk.taurus.playerbase.AVPlayer.() (AVPlayer.java:64)
java_vm_ext.cc:534] at void com.kk.taurus.playerbase.assist.RelationAssist.(android.content.Context, com.kk.taurus.playerbase.widget.SuperContainer) (RelationAssist.java:87)
java_vm_ext.cc:534] at void com.kk.taurus.playerbase.assist.RelationAssist.(android.content.Context) (RelationAssist.java:82)
如题
刚下了demo试了下,窗口播放应该是要权限的吧,没给权限直接点窗口播放就白屏了,是不是没做权限的判断?
手机是:魅蓝5s 6.0系统
您写的这个好像不能播放直播视频 ,或许我没有找到设置 !如果您有空能方便通知我一下吗?谢谢!
重现步骤:
1,列表页播放一个,然后滑动出去。
2, 再次回到刚刚播放的 item ,播放不了。
3, ijkPlayer return code MEDIA_INFO_OPEN_INPUT 10005
很不错,帮我解决了一个大麻烦,值得好好学习下!
GroupValue现在是receiver group的数据共享池,在每次调用putXXX系列方法时,除了把value存起来都会去遍历内部 OnGroupValueUpdateListener,这样做基本没错。但是有时候有些需求单纯的只是想存值,然后在某些时候拿出来用,而不想去遍历各种listener。
比如说,在controller中调节进度条onProgressChanged的时候,我想存值。但是每次存值都会去遍历listener并回调一些方法,固然可以通过filterKeys去过滤这些lietener。但是由于这个onProgressChanged回调的次数很多,所以GroupValue去遍历回调各种listener的次数也很多,这样就会造成一定的效率问题。
这个例子是在说,在你需要频繁的去改变数据共享池的时候,一些需求只是单纯的存储数据,但是附带的遍历回调会带来效率问题。
所以希望提供这样的接口,给putXXX系列方法一个flag,表示是否去遍历回调listener,
比如 putInt(int key, int value, boolean isNotifyCallback)
进在线视频列表,随机点击一个视频,在缓冲的时候,条目里面的视频view 有 loading 层展示,这时候再点击条目的跳转展示大屏播放,在大屏里面缓冲完毕播放,点击关闭返回列表页,列表里面的视频在播放 但是 loading层没有去掉,依然展示
本地/在线List播放中,最后一个Item视频,横屏之后 你再按返回按钮或者点击退出横屏,他会竖屏播放,而不是返回列表。谢谢。
长视频,比如 2G 120分钟的视频,要卡很久。
播放flv格式文件,插上耳机有声音,不插耳机,声音低的听不清http://vodtv1mhgc2.vod.126.net/vodtv1mhgc2/LUiQhEif_1722088671_sd.flv
已经引用
api 'com.kk.taurus.playerbase:playerbase:3.3.2'
api 'cn.jiajunhui:ijkplayer:332_088_001'
当应用处于后台时,网络状态发生变化,视频会自动播放;应该在网络变化后给自动播放加上”当前应用是否处于前台“的条件
将ijkplayer和exoplayer也放到远程仓库中,这样需要扩展的就直接引用即可,而且您要是有修改也能方便使用者更新。
扩展的方式让我学习了不少。感谢提供这样好用的库。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.