GSYVideoPlayer
GSYVideoPlayer copied to clipboard
友盟统计报了个这个错误
设备机型
M5 Note
java.lang.IllegalStateException
at android.media.MediaPlayer.getVideoHeight(Native Method)
at tv.danmaku.ijk.media.player.AndroidMediaPlayer.getVideoHeight(AndroidMediaPlayer.java:201)
at com.shuyu.gsyvideoplayer.f.d.getVideoHeight(SystemPlayerManager.java:160)
at com.shuyu.gsyvideoplayer.c.getVideoHeight(GSYVideoBaseManager.java:483)
at com.shuyu.gsyvideoplayer.video.base.GSYVideoView.getCurrentVideoHeight(GSYVideoView.java:224)
at com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer.isVerticalVideo(GSYBaseVideoPlayer.java:473)
at com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer.isVerticalFullByVideoSize(GSYBaseVideoPlayer.java:523)
at com.shuyu.gsyvideoplayer.utils.OrientationUtils$1.onOrientationChanged(OrientationUtils.java:49)
at android.view.OrientationEventListener$SensorEventListenerImpl.onSensorChanged(OrientationEventListener.java:143)
at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:713)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:328)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:6519)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:974)
这个错误在某些场景会出现,代码中我记得强行catch住了,理论上是不会抛出的
我就是直接用的你的库,没有做任何修改
是的,因为这个理论上已经处理了,可能需要你看看复现的步骤。
@CarGuo 我也遇到了一模一样的问题,请问有解决途径吗
@dary123 你好 我想问下这个问题解决了吗
@dary123 你好 我想问下这个问题解决了吗
还没解决
@CarGuo大佬 我用的是6.0.0版本的 7.0.0处理这个问题了吗 - -
使用场景大多数应该是来回旋转屏幕导致的~ java.lang.IllegalStateException at android.media.MediaPlayer.getVideoHeight(Native Method) at tv.danmaku.ijk.media.player.b.j(AndroidMediaPlayer.java:201) at com.shuyu.gsyvideoplayer.e.d.j(SystemPlayerManager.java:160) at com.shuyu.gsyvideoplayer.b.t(GSYVideoBaseManager.java:475) at com.shuyu.gsyvideoplayer.video.base.GSYVideoView.getCurrentVideoHeight(GSYVideoView.java:220) at com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer.N(GSYBaseVideoPlayer.java:472) at com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer.Q(GSYBaseVideoPlayer.java:523) at com.shuyu.gsyvideoplayer.g.h$1.onOrientationChanged(OrientationUtils.java:49) at android.view.OrientationEventListener$SensorEventListenerImpl.onSensorChanged(OrientationEventListener.java:143) at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:707) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:323) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:6165) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) 2019-03-13 20:18:10.808 2756-4124/? W/ActivityManager: Force finishing activity
@bysir521 一般如果配置了manifest,选择屏幕不会导致重构的啊
您指的manifest配置是什么呀 是下面这些吗
<activity
android:name=".ui.selfhelp.content.fragment.VideoPlayActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_video_play"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden" />
发件人: [email protected] [email protected] 代表 Shuyu Guo 发送时间: 2019年3月14日 18:23 收件人: CarGuo/GSYVideoPlayer [email protected] 抄送: mavenLiu [email protected]; Mention [email protected] 主题: Re: [CarGuo/GSYVideoPlayer] 友盟统计报了个这个错误 (#1869)
@bysir521 https://github.com/bysir521 一般如果配置了manifest,选择屏幕不会导致重构的啊
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/CarGuo/GSYVideoPlayer/issues/1869#issuecomment-472790220 , or mute the thread https://github.com/notifications/unsubscribe-auth/AY7SYU8pS_VUVLyNcgpX1DccONDID4oYks5vWiMVgaJpZM4boK4j . https://github.com/notifications/beacon/AY7SYa0AnmrTzW-xItzHvSub8c3-Rj4Hks5vWiMVgaJpZM4boK4j.gif
是的
最后怎么处理的
@shangqianglong 禁止屏幕自动旋转了 哈哈 手动旋转没事
@CarGuo大佬 我用的是6.0.0版本的 7.0.0处理这个问题了吗 - -
使用场景大多数应该是来回旋转屏幕导致的~ java.lang.IllegalStateException at android.media.MediaPlayer.getVideoHeight(Native Method) at tv.danmaku.ijk.media.player.b.j(AndroidMediaPlayer.java:201) at com.shuyu.gsyvideoplayer.e.d.j(SystemPlayerManager.java:160) at com.shuyu.gsyvideoplayer.b.t(GSYVideoBaseManager.java:475) at com.shuyu.gsyvideoplayer.video.base.GSYVideoView.getCurrentVideoHeight(GSYVideoView.java:220) at com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer.N(GSYBaseVideoPlayer.java:472) at com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer.Q(GSYBaseVideoPlayer.java:523) at com.shuyu.gsyvideoplayer.g.h$1.onOrientationChanged(OrientationUtils.java:49) at android.view.OrientationEventListener$SensorEventListenerImpl.onSensorChanged(OrientationEventListener.java:143) at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:707) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:323) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:6165) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) 2019-03-13 20:18:10.808 2756-4124/? W/ActivityManager: Force finishing activity
请问一下,您能自己重现出这个问题吗?我也尝试自己瞎旋转,可是也无法重现啊
@CarGuo大佬 我用的是6.0.0版本的 7.0.0处理这个问题了吗 - - 使用场景大多数应该是来回旋转屏幕导致的~ java.lang.IllegalStateException at android.media.MediaPlayer.getVideoHeight(Native Method) at tv.danmaku.ijk.media.player.b.j(AndroidMediaPlayer.java:201) at com.shuyu.gsyvideoplayer.e.d.j(SystemPlayerManager.java:160) at com.shuyu.gsyvideoplayer.b.t(GSYVideoBaseManager.java:475) at com.shuyu.gsyvideoplayer.video.base.GSYVideoView.getCurrentVideoHeight(GSYVideoView.java:220) at com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer.N(GSYBaseVideoPlayer.java:472) at com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer.Q(GSYBaseVideoPlayer.java:523) at com.shuyu.gsyvideoplayer.g.h$1.onOrientationChanged(OrientationUtils.java:49) at android.view.OrientationEventListener$SensorEventListenerImpl.onSensorChanged(OrientationEventListener.java:143) at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:707) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:323) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:6165) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) 2019-03-13 20:18:10.808 2756-4124/? W/ActivityManager: Force finishing activity
请问一下,您能自己重现出这个问题吗?我也尝试自己瞎旋转,可是也无法重现啊
我也是重现不了 可是我的统计 次数占比 已经达到了97.13%;用户反馈是播放一段时间就闪退;现在考虑换个播放器了
@shangqianglong @equationl 我也很郁闷,复现不出来······
首先需要确定,是否因为屏幕选择导致的生命周期重构,还有是否因为混淆导致的类方法错误
有同样的问题,目前还是小概率,无法复现。报错的位置倒是很明确,新版本能不能catch下
orientationEventListener = new OrientationEventListener(activity.getApplicationContext()) {
@Override
public void onOrientationChanged(int rotation) {
boolean autoRotateOn = (Settings.System.getInt(activity.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 1);
if (!autoRotateOn && mRotateWithSystem) {
return;
}
if (gsyVideoPlayer != null && gsyVideoPlayer.isVerticalFullByVideoSize()) {
return;
}
if (mIsPause) {
return;
}
OrientationUtils类里gsyVideoPlayer.isVerticalFullByVideoSize()这个地方
横屏视频源全屏播放的时候出现这个问题,后来把 android:configChanges="keyboard|orientation|keyboardHidden" 改成 android:configChanges="keyboard|orientation|keyboardHidden|screenSize" 就好了
@wang6793453 我猜测也是
横屏视频源全屏播放的时候出现这个问题,后来把 android:configChanges="keyboard|orientation|keyboardHidden" 改成 android:configChanges="keyboard|orientation|keyboardHidden|screenSize" 就好了
没有用,还是出现了
希望得到解决,目前线上崩溃率极高
出现同样的问题,线上版本友盟统计到的。
- 如果是生命周期导致
- 参考自行处理配置变更。 我的配置如下:
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
- 在activity中处理好
enable
、disable
和release
的时机。 - 也可以参考我的实现AutoRotationUtil.java,单独处理屏幕自动旋转逻辑。
-
Android O 透明activity不允许旋转bug 项目中OrientationUtils没有处理此问题,Android O里activity如果使用透明主题,调用
mActivity.setRequestedOrientation(mScreenType);
时会崩溃。 -
平板旋转方向问题 手机和部分平板的默认正方向(角度)是不同的,比如部分三星、sony平板,默认方向时
Surface.ROTATION_270
,这一点需要单独处理。
之前主要借鉴了OrientationUtils的实现,后来完善了一下,希望大家能早日解决问题~
- 如果是生命周期导致
- 参考自行处理配置变更。 我的配置如下:
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
- 在activity中处理好
enable
、disable
和release
的时机。- 也可以参考我的实现AutoRotationUtil.java,单独处理屏幕自动旋转逻辑。
- Android O 透明activity不允许旋转bug 项目中OrientationUtils没有处理此问题,Android O里activity如果使用透明主题,调用
mActivity.setRequestedOrientation(mScreenType);
时会崩溃。- 平板旋转方向问题 手机和部分平板的默认正方向(角度)是不同的,比如部分三星、sony平板,默认方向时
Surface.ROTATION_270
,这一点需要单独处理。之前主要借鉴了OrientationUtils的实现,后来完善了一下,希望大家能早日解决问题~
今天凌晨才突然机遇发现了ui模式改变的问题,要是早看到大佬的信息估计就能更早解决了,感谢!
这个Crash基本上探明了,是在反向全屏的自动播放的时候发生的。。。OrientationUtils.禁用是锁不住,因为一般来说 orientationUtils.setEnable(true)是在onPrepared里面调用的,但是这时候如果是反向全屏,从上一个视频跳转过来并自动播放的时候,一方面是屏幕是默认是倒的,要翻转(OrientationEventListener监听到),二方面前面的视频放空(NULLPOINT),getCurrentPlayer其实是放空的。。。 orientationEventListener = new OrientationEventListener(activity.getApplicationContext()) { @Override public void onOrientationChanged(int rotation) { boolean autoRotateOn = (Settings.System.getInt(activity.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 1); if (!autoRotateOn && mRotateWithSystem) { return; } if (gsyVideoPlayer != null && gsyVideoPlayer.isVerticalFullByVideoSize()) { return; } if (mIsPause) { return; } 里面的gsyVideoPlayer.isVerticalFullByVideoSize()一调用就崩溃了(因为里面要取getHeight)。。。
这个问题现在有修复方案么?
我使用了demo里的DanmakuVideoPlayer, 还是出现了同样的问题
android.media.MediaPlayer._getVideoHeight(Native Method) android.media.MediaPlayer.getVideoHeight(MediaPlayer.java:2167) tv.danmaku.ijk.media.player.AndroidMediaPlayer.getVideoHeight() a.m.a.q.e.getVideoHeight() a.m.a.d.getVideoHeight() com.shuyu.gsyvideoplayer.video.base.GSYVideoView.getCurrentVideoHeight() com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer.isVerticalVideo() com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer.isVerticalFullByVideoSize() com.shuyu.gsyvideoplayer.utils.OrientationUtils$1.onOrientationChanged() android.view.OrientationEventListener$SensorEventListenerImpl.onSensorChanged(OrientationEventListener.java:143)
用的7.1.5版本 manifest也配置了 <activity android:name=".video.activity.VideoActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode" android:screenOrientation="portrait" />
https://github.com/CarGuo/GSYVideoPlayer/issues/2873#issuecomment-668351120 @BoBoSama 初步怀疑是这个问题 https://github.com/CarGuo/GSYVideoPlayer/commit/2829be067b0deea11d75a41b8a77fd95ea34c94b
我遇到过此问题,并解决了;但不确定场景是否一致;
出现系统:Android 10
我的场景:进入 activity 后,player 开始播放后马上设置横屏 orientationUtils.resolveByClick(),然后就出现一样问题;
解决方式:首次进入页面,将 orientationUtils.resolveByClick() 放到 onWindowFocusChanged hasFocus 为 true 的时候调用;
可以看下是否有参考意义