GSYVideoPlayer icon indicating copy to clipboard operation
GSYVideoPlayer copied to clipboard

友盟统计报了个这个错误

Open dary123 opened this issue 5 years ago • 30 comments

231 设备机型 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)

dary123 avatar Mar 11 '19 09:03 dary123

这个错误在某些场景会出现,代码中我记得强行catch住了,理论上是不会抛出的

CarGuo avatar Mar 11 '19 09:03 CarGuo

我就是直接用的你的库,没有做任何修改

dary123 avatar Mar 11 '19 11:03 dary123

是的,因为这个理论上已经处理了,可能需要你看看复现的步骤。

CarGuo avatar Mar 11 '19 12:03 CarGuo

@CarGuo 我也遇到了一模一样的问题,请问有解决途径吗

malonecoder avatar Mar 14 '19 03:03 malonecoder

@dary123 你好 我想问下这个问题解决了吗

malonecoder avatar Mar 14 '19 03:03 malonecoder

@dary123 你好 我想问下这个问题解决了吗

还没解决

dary123 avatar Mar 14 '19 04:03 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

malonecoder avatar Mar 14 '19 08:03 malonecoder

@bysir521 一般如果配置了manifest,选择屏幕不会导致重构的啊

CarGuo avatar Mar 14 '19 10:03 CarGuo

您指的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

malonecoder avatar Mar 15 '19 01:03 malonecoder

是的

CarGuo avatar Mar 19 '19 01:03 CarGuo

最后怎么处理的

shangqianglong avatar Jun 25 '19 06:06 shangqianglong

@shangqianglong 禁止屏幕自动旋转了 哈哈 手动旋转没事

malonecoder avatar Jun 25 '19 08:06 malonecoder

@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

请问一下,您能自己重现出这个问题吗?我也尝试自己瞎旋转,可是也无法重现啊

equationl avatar Jul 04 '19 23:07 equationl

@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 avatar Jul 05 '19 02:07 shangqianglong

@shangqianglong @equationl 我也很郁闷,复现不出来······

CarGuo avatar Jul 05 '19 02:07 CarGuo

首先需要确定,是否因为屏幕选择导致的生命周期重构,还有是否因为混淆导致的类方法错误

CarGuo avatar Jul 09 '19 08:07 CarGuo

有同样的问题,目前还是小概率,无法复现。报错的位置倒是很明确,新版本能不能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()这个地方

NiaNingXue avatar Jul 10 '19 05:07 NiaNingXue

横屏视频源全屏播放的时候出现这个问题,后来把 android:configChanges="keyboard|orientation|keyboardHidden" 改成 android:configChanges="keyboard|orientation|keyboardHidden|screenSize" 就好了

wang6793453 avatar Jul 23 '19 09:07 wang6793453

@wang6793453 我猜测也是

CarGuo avatar Jul 23 '19 11:07 CarGuo

横屏视频源全屏播放的时候出现这个问题,后来把 android:configChanges="keyboard|orientation|keyboardHidden" 改成 android:configChanges="keyboard|orientation|keyboardHidden|screenSize" 就好了

没有用,还是出现了

dary123 avatar Jul 28 '19 09:07 dary123

希望得到解决,目前线上崩溃率极高

lrnrzg avatar Aug 26 '19 02:08 lrnrzg

出现同样的问题,线上版本友盟统计到的。

w13159584927 avatar Dec 17 '19 03:12 w13159584927

  1. 如果是生命周期导致
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
  • 在activity中处理好enabledisablerelease的时机。
  • 也可以参考我的实现AutoRotationUtil.java,单独处理屏幕自动旋转逻辑。
  1. Android O 透明activity不允许旋转bug 项目中OrientationUtils没有处理此问题,Android O里activity如果使用透明主题,调用mActivity.setRequestedOrientation(mScreenType);时会崩溃。

  2. 平板旋转方向问题 手机和部分平板的默认正方向(角度)是不同的,比如部分三星、sony平板,默认方向时Surface.ROTATION_270,这一点需要单独处理。

之前主要借鉴了OrientationUtils的实现,后来完善了一下,希望大家能早日解决问题~

haohaozaici avatar Dec 30 '19 08:12 haohaozaici

  1. 如果是生命周期导致
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
  • 在activity中处理好enabledisablerelease的时机。
  • 也可以参考我的实现AutoRotationUtil.java,单独处理屏幕自动旋转逻辑。
  1. Android O 透明activity不允许旋转bug 项目中OrientationUtils没有处理此问题,Android O里activity如果使用透明主题,调用mActivity.setRequestedOrientation(mScreenType);时会崩溃。
  2. 平板旋转方向问题 手机和部分平板的默认正方向(角度)是不同的,比如部分三星、sony平板,默认方向时Surface.ROTATION_270,这一点需要单独处理。

之前主要借鉴了OrientationUtils的实现,后来完善了一下,希望大家能早日解决问题~

今天凌晨才突然机遇发现了ui模式改变的问题,要是早看到大佬的信息估计就能更早解决了,感谢!

anonyein avatar Jan 02 '20 06:01 anonyein

这个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)。。。

anonyein avatar Jun 28 '20 15:06 anonyein

这个问题现在有修复方案么?

elenin avatar Jul 15 '20 10:07 elenin

我使用了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)

BoBoSama avatar Aug 05 '20 03:08 BoBoSama

用的7.1.5版本 manifest也配置了 <activity android:name=".video.activity.VideoActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode" android:screenOrientation="portrait" />

BoBoSama avatar Aug 05 '20 03:08 BoBoSama

https://github.com/CarGuo/GSYVideoPlayer/issues/2873#issuecomment-668351120 @BoBoSama 初步怀疑是这个问题 https://github.com/CarGuo/GSYVideoPlayer/commit/2829be067b0deea11d75a41b8a77fd95ea34c94b

CarGuo avatar Aug 05 '20 03:08 CarGuo

我遇到过此问题,并解决了;但不确定场景是否一致;

出现系统:Android 10

我的场景:进入 activity 后,player 开始播放后马上设置横屏 orientationUtils.resolveByClick(),然后就出现一样问题;

解决方式:首次进入页面,将 orientationUtils.resolveByClick() 放到 onWindowFocusChanged hasFocus 为 true 的时候调用;

可以看下是否有参考意义

linkaipeng avatar Feb 24 '21 01:02 linkaipeng