Android:Android9.0使用 AndroidVideoCache時不能緩存播放視頻的解決

一纷捞、問題現(xiàn)象:

項目中使用 https://github.com/danikula/AndroidVideoCache 作為視頻緩存組件,但是在9.0手機上無法正常緩存蔓倍,并且報錯:

1巩搏、詳細錯誤截圖

輸入圖片說明

2骚露、詳細錯誤文本描述

2018-11-16 14:35:19.781 31012-32296/com.xxx.xxx E/Pinger: Error reading ping response
    com.danikula.videocache.ProxyCacheException: Error opening connection for http://127.0.0.1:34851/ping with offset 0. Version: 2.7.0
        at com.danikula.videocache.HttpUrlSource.open(HttpUrlSource.java:75)
        at com.danikula.videocache.Pinger.pingServer(Pinger.java:101)
        at com.danikula.videocache.Pinger.access$100(Pinger.java:33)
        at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:123)
        at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:119)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:784)
     Caused by: java.io.IOException: Cleartext HTTP traffic to 127.0.0.1 not permitted
        at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
        at com.danikula.videocache.HttpUrlSource.openConnection(HttpUrlSource.java:160)
        at com.danikula.videocache.HttpUrlSource.open(HttpUrlSource.java:68)
        at com.danikula.videocache.Pinger.pingServer(Pinger.java:101) 
        at com.danikula.videocache.Pinger.access$100(Pinger.java:33) 
        at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:123) 
        at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:119) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:784) 
2018-11-16 14:35:19.783 31012-31012/com.xxx.xxx E/Pinger: Error pinging server (attempts: 3, max timeout: 280). If you see this message, please, report at https://github.com/danikula/AndroidVideoCache/issues/134. Default proxies are: [DIRECT]
    com.danikula.videocache.ProxyCacheException: Error pinging server (attempts: 3, max timeout: 280). If you see this message, please, report at https://github.com/danikula/AndroidVideoCache/issues/134. Default proxies are: [DIRECT]. Version: 2.7.0
        at com.danikula.videocache.Pinger.ping(Pinger.java:73)
        at com.danikula.videocache.HttpProxyCacheServer.isAlive(HttpProxyCacheServer.java:183)
        at com.danikula.videocache.HttpProxyCacheServer.<init>(HttpProxyCacheServer.java:82)
        at com.danikula.videocache.HttpProxyCacheServer.<init>(HttpProxyCacheServer.java:67)
        at com.xxx.mqtt.tools.CusApplication.newProxy(CusApplication.java:192)
        at com.xxx.mqtt.tools.CusApplication.getProxy(CusApplication.java:182)
        at com.xxx.video.activity.VideoPreviewActivity.onCreate(VideoPreviewActivity.java:59)
        at android.app.Activity.performCreate(Activity.java:7444)
        at android.app.Activity.performCreate(Activity.java:7434)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1286)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3269)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3474)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2115)
        at android.os.Handler.dispatchMessage(Handler.java:109)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:7439)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

二、問題原因:

根本原因是從Android9.0開始障般,出于完全因素考慮调鲸,默認不再支持http網(wǎng)絡(luò)請求,需要使用 https挽荡。

但是藐石,在AndroidVideoCache中使用了一個緩存代理地址:http://127.0.0.1,所以定拟,就會報錯于微。

三、解決方案:

解決的基本思路是:對指定的網(wǎng)址進行過濾,強制允許指定網(wǎng)址繼續(xù)使用http請求

下列解決步驟基于參考地址1整理:

1角雷、步驟1

A:創(chuàng)建 res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
</network-security-config>

注意:
上述代碼的意思是解除對指定網(wǎng)址的限制祸穷。

在解除上述視頻緩存庫報錯信息時,<domain> 節(jié)點的具體取值如下:

 <domain includeSubdomains="true"> 127.0.0.1</domain>

如果需要過濾某個地址勺三,則只寫域名即可雷滚,不需要寫 http://,如:想過濾的地址為:http://www.baidu.com/123,則<demain>節(jié)點如下:

<domain includeSubdomains="true"> www.baidu.com</domain>

B:修改 AndroidManifest.xml

配置 android:networkSecurityConfig

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>

2吗坚、步驟2

A:修改AndroidManifest.xml

啟用 android:usesCleartextTraffic

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

3祈远、步驟3

在 @david.s'的回答中指出 android:targetSandboxVersion 也可能會導致該問題 -

Manifest Docs https://developer.android.com/guide/topics/manifest/manifest-element#targetSandboxVersion 中對于 android:targetSandboxVersion有如下描述

android:targetSandboxVersion

The target sandbox for this app to use. The higher the sandbox version number, the higher the level of security. Its default value is 1; you can also set it to 2. Setting this attribute to 2 switches the app to a different SELinux sandbox. The following restrictions apply to a level 2 sandbox:

The default value of usesCleartextTraffic in the Network Security Config is false.
Uid sharing is not permitted.

所以,如果你在 AndroidManifest.xml 的 <manifest> 節(jié)點中配置了 android:targetSandboxVersion,需要將它的值置為1.

A:修改AndroidManifest.xml

降低 android:targetSandboxVersion 的版本

<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末商源,一起剝皮案震驚了整個濱河市车份,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牡彻,老刑警劉巖扫沼,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異庄吼,居然都是意外死亡缎除,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門总寻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來器罐,“玉大人,你說我怎么就攤上這事渐行『浞唬” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵祟印,是天一觀的道長肴沫。 經(jīng)常有香客問我,道長旁理,這世上最難降的妖魔是什么樊零? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮孽文,結(jié)果婚禮上驻襟,老公的妹妹穿的比我還像新娘。我一直安慰自己芋哭,他們只是感情好沉衣,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著减牺,像睡著了一般豌习。 火紅的嫁衣襯著肌膚如雪存谎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天肥隆,我揣著相機與錄音既荚,去河邊找鬼。 笑死栋艳,一個胖子當著我的面吹牛恰聘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吸占,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼晴叨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了矾屯?” 一聲冷哼從身側(cè)響起兼蕊,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎件蚕,沒想到半個月后孙技,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡骤坐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年绪杏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纽绍。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖势似,靈堂內(nèi)的尸體忽然破棺而出拌夏,到底是詐尸還是另有隱情,我是刑警寧澤履因,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布障簿,位于F島的核電站,受9級特大地震影響栅迄,放射性物質(zhì)發(fā)生泄漏站故。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一毅舆、第九天 我趴在偏房一處隱蔽的房頂上張望西篓。 院中可真熱鬧,春花似錦憋活、人聲如沸岂津。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吮成。三九已至橱乱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粱甫,已是汗流浹背泳叠。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茶宵,地道東北人危纫。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像节预,于是被迫代替她去往敵國和親叶摄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容