美文网首页
Android使用react-native-video的ExoP

Android使用react-native-video的ExoP

作者: zjiaxin | 来源:发表于2019-05-13 15:01 被阅读0次
    在Android项目是引入react-native-video可以查看我之前的文章。
    • 前言

    开开心心的引入react-native-video,并且快乐的使用着,模拟器正常播放,大部分安卓手机也正常播放。

    但是事情就发生在发布前夜,手持小米8(Android9 , API 28)的我正测试着,打开视频一看居然播放不出来,其他手机测试都没问题啊,为啥?miui?小米?miui?小米?是他们的锅吗?

    于是我谨慎的点击了几次手机版本号,打开开发者模式,连上手机,debug测试。并且调出onError回调,小心翼翼的点开一个视频,大概过了漫长的1s,一片红到来。

    onError回调:

    {"error":{"errorException":"Unable to connect to http://xxx.mp4","errorString":"Unrecognized media format"}}
    
    • 瞎扯

    嗯,从上图看,很明显是ExoPlayer的锅,那么我改用原生的MediaPlayer播放,改的不亦乐乎,于是乎又不行,出现下面报错,什么鬼?

    05-13 14:32:20.090 32102-32223/com.xxx E/MediaPlayerNative: error (1, -2147483648)
    05-13 14:32:20.091 32102-32102/com.xxx E/MediaPlayer: Error (1,-2147483648)
    
    • 认真起来

    经过很长时间的折腾,加上时间紧急,头脑一片混乱。喝杯咖啡冷静一下,从一开始的报错排查,于是换回ExoPlayer播放器。

    脑子里只有以下两点问题

    1、ExoPlaterImplInternal:Source error.    
    2、Unrecognized media format
    

    忽然眼前一亮,发现不止一个异常信息,我忽略了这个

    Caused by: java.net.UnknownServiceException: CLEARTEXT communication to xxx.com not permitted by network security policy
    
    • 问题分析

    Android P (API27 以上) 限制了明文流量的请求,这样的请求会被系统禁止掉。而我用的视频地址是http,而非https,这样就会导系统禁止该请求,然而导致播放失败。刚好我的targetSdkVersion=28。

    • 问题解决

    面对这个问题,项目发布之际,不可能修改视频地址,于是想到如下解决办法:
    在Android项目中的res目录下新建xml目录,新建network_security_config.xml文件,xml文件配置如下:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true"/>
    </network-security-config>
    

    随后,在AndroidManifest.xml文件中设置:

    <application
            ...
            android:networkSecurityConfig="@xml/network_security_config"
            ... >
            //...
    </application>
    
    • 测试

    ok,没问题,手机终于可以正常播放了!

    如果同样是使用ReactNative双平台开发的朋友们,不妨关注我,我们一起入坑。

    觉得文章对您有用,请点个赞或者赞赏(是一种美德),感谢!

    相关文章

      网友评论

          本文标题:Android使用react-native-video的ExoP

          本文链接:https://www.haomeiwen.com/subject/kolukqtx.html