Ang*_*ley 7 android flutter flutter-video-player bunnycdn
以下经典代码片段无法从 Bunny CDN 获取视频
@override
void initState() {
super.initState();
controller = VideoPlayerController.networkUrl(Uri.parse(widget.video),
httpHeaders: {"AccessKey": CDN_READ_ONLY_TOKEN});
controller.initialize();
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
E/ExoPlayerImplInternal(14202): Playback error
E/ExoPlayerImplInternal(14202): com.google.android.exoplayer2.ExoPlaybackException: Source error
E/ExoPlayerImplInternal(14202): at com.google.android.exoplayer2.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:644)
E/ExoPlayerImplInternal(14202): at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:616)
E/ExoPlayerImplInternal(14202): at android.os.Handler.dispatchMessage(Handler.java:103)
E/ExoPlayerImplInternal(14202): at android.os.Looper.loop(Looper.java:224)
E/ExoPlayerImplInternal(14202): at android.os.HandlerThread.run(HandlerThread.java:67)
E/ExoPlayerImplInternal(14202): Caused by: com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 401
E/ExoPlayerImplInternal(14202): at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:413)
E/ExoPlayerImplInternal(14202): at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:263)
E/ExoPlayerImplInternal(14202): at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:84)
E/ExoPlayerImplInternal(14202): at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1005)
E/ExoPlayerImplInternal(14202): at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:412)
E/ExoPlayerImplInternal(14202): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/ExoPlayerImplInternal(14202): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/ExoPlayerImplInternal(14202): at java.lang.Thread.run(Thread.java:919)
Run Code Online (Sandbox Code Playgroud)
我认为问题出在 accessKey 上,但是:
在检查了 github 和 SO 的潜在解决方案后,我尝试修改文件AndroidManifest.xml并添加以下行
<uses-permission android:name="android.permission.INTERNET"/>
<application android:usesCleartextTraffic="true"/>
Run Code Online (Sandbox Code Playgroud)
我还尝试将 AccessKey 直接集成到 url 中,如下所示:
https://storage.bunnycdn.com/XXX-YYY/video-acbce1cce090476a95b03cd485a1e54d.mp4?AccessKey=XXX
此链接直接在浏览器中打开视频,并且在 iOS 上也适用,但在 Android 上失败并出现相同的错误。
最后,我在 github 上找到了有关自签名 SSL 证书的线程,但我不确定这就是问题,因为该错误专门抱怨授权而不是服务器的证书。
https://github.com/flutter/flutter/issues/75995
尽管如此,我添加了以下network_security_config,这并没有解决问题
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config>
<domain includeSubdomains="true">storage.bunnycdn.com</domain>
<trust-anchors>
<!-- Trust all certificates -->
<certificates src="user" />
<certificates src="system" />
</trust-anchors>
</domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
以前还有其他人处理过类似的事情吗?
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |