IJKPlayer 遇到的诡异问题

Posted 顾明伟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IJKPlayer 遇到的诡异问题相关的知识,希望对你有一定的参考价值。

        今天重新封装播放器界面的时候发现了一个诡异的问题。

        覆盖在ijkplayer上层的View莫名其妙消失了,View确定已经被addView 到了ContentView中,但是视图里就是看不到,debug也确定了被add的View已经有了Parent,add两次的时候会抛异常。那跟ijkplayer又有什么关系呢?当我把ijkplayer remove掉之后,看不到的View又重新出现了。也就是直接证明了确实确实跟ijkplayer有关系。看看效果先:


图中的播放器上面盖了一层View用来显示主播的信息,手指滑动时跟着滑动,有开启和关闭两种状态,旋转屏幕时替换了不同的布局。

我当时是这样初始化的:

contentView.addView(ijkplayer);//播放器
contentView.addView(infoview);//浮层
横竖屏都可以正常切换,滑动。

当我在横屏状态把浮层滑出屏幕之后,切换回竖屏幕,浮层对象处于正常添加状态,滑动的时候TranX的值也在正常变化,但是在视图里看不到,这就很奇怪了,View明明添加了为啥看不到腻。我第一个想到的是是不是顺序有问题,被播放器挡住了。然后在切换屏幕时候调用了

infoview.bringToFront();//把view放到容器的最上层

然后发现并没什么卵用。打开开发者模式绘制View边界,发现边界都没有。

陷入沉思........

不知道啥原因就乱试一试,果然这一试就试出结果了。

修改了Activity的根布局,我用两个View分别加载VideoView和InfoView,这样你俩没什么直接的联系了应该就不会出问题了,为了方便观察,我给两个布局设置了不同的颜色。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/live_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/video_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#434343"></RelativeLayout>

    <RelativeLayout
        android:id="@+id/info_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#808080"></RelativeLayout>

</RelativeLayout>

这样把播放器和浮层添加到不同的Layout中

videoLayout.addView(VideoView);
infoLayout.addView(infoView);

然后加载了View,调试,果然,真的没啥问题,切换横竖屏View都可以正常显示。介个时候,我想,既然没什么问题了我就把颜色给去掉吧,去掉颜色之后发现,卧槽,刚不是已经好了么,View怎么又消失了,脑子里各种脑补,可能手机坏了,可能刚才出现幻觉了,可能Studi编译出bug了,可能是ijkplayer的大bug等等。

冷静了10秒钟,得我再把颜色加上,再看。发现又变正常了。

2333333.。。。。。。。

这是什么鬼问题。view 的background居然可以影响view的加载或者是显示问题,然后把两个颜色改成了#00000000 暂时算解决这个问题了。但是结论还有待研究,问题有点诡异。

以上是关于IJKPlayer 遇到的诡异问题的主要内容,如果未能解决你的问题,请参考以下文章

当SQL注入遇到诡异的编码问题

ijkplayer总结

处理Activity#onResume()遇到java.lang.IllegalArgumentException诡异异常

处理Activity#onResume()遇到java.lang.IllegalArgumentException诡异异常

char *转string遇到诡异的问题记录

使用jni遇到的诡异内存bug