早上好,我在播放视频时遇到了问题--我正在使用这个软件包玩家:^2.4.5,但是当我打开包含我的视频的屏幕时,它就不起作用了。它给了我一个白色的屏幕
这是我的密码
class VideoPlayerScreenState extends State<VideoPlayerScreen> {
var controller;
var youTubVideoPlayerController;
@override
void initState() {
controller = VideoPlayerController.network(
widget.initialUrl.toString() ?? 'https://samplelib.com/lib/preview/mp4/sample-5s.mp4');
loadVideoPlayer();
super.initState();
}
loadVideoPlayer() {
controller.addListener(() {
setState(() {
print(widget.initialUrl); // this working well
});
});
// from here it doesn't work
controller.initialize().then((value) {
print("Load Video Player Initialized 1111");
setState(() {
print("Load Video Player Initialized 2222");
});
});
}
这是这个片段的输出
I/flutter (17062): https://www.privilegeapps.com/images/materials/1658523313file.mp4
E/flutter (17062): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: PlatformException(VideoError, Video player had error com.google.android.exoplayer2.ExoPlaybackException: Source error, null, null)
下面是我的日志输出
W/System (17062): ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
I/System.out(17062): e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp
W/System (17062): ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
I/System.out(17062): e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp
W/System (17062): ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
I/System.out(17062): e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp
W/System (17062): ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
I/System.out(17062): e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp
W/System (17062): ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
I/System.out(17062): e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp
W/System (17062): ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
I/System.out(17062): e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp
W/System (17062): ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
I/System.out(17062): e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp
W/System (17062): ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
I/System.out(17062): e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp
E/ExoPlayerImplInternal(17062): Playback error
E/ExoPlayerImplInternal(17062): com.google.android.exoplayer2.ExoPlaybackException: Source error
E/ExoPlayerImplInternal(17062): at com.google.android.exoplayer2.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:640)
E/ExoPlayerImplInternal(17062): at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:612)
E/ExoPlayerImplInternal(17062): at android.os.Handler.dispatchMessage(Handler.java:102)
E/ExoPlayerImplInternal(17062): at android.os.Looper.loop(Looper.java:166)
E/ExoPlayerImplInternal(17062): at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal(17062): Caused by: com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
E/ExoPlayerImplInternal(17062): at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:365)
E/ExoPlayerImplInternal(17062): at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:84)
E/ExoPlayerImplInternal(17062): at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1009)
E/ExoPlayerImplInternal(17062): at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:412)
E/ExoPlayerImplInternal(17062): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
E/ExoPlayerImplInternal(17062): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
E/ExoPlayerImplInternal(17062): at java.lang.Thread.run(Thread.java:780)
E/ExoPlayerImplInternal(17062): Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
E/ExoPlayerImplInternal(17062): at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:219)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:192)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:299)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:237)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)
E/ExoPlayerImplInternal(17062): at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(Unknown Source:0)
E/ExoPlayerImplInternal(17062): at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:636)
E/ExoPlayerImplInternal(17062): at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:533)
E/ExoPlayerImplInternal(17062): at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:359)
E/ExoPlayerImplInternal(17062): ... 6 more
E/ExoPlayerImplInternal(17062): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
E/ExoPlayerImplInternal(17062): at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:646)
E/ExoPlayerImplInternal(17062): at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:495)
E/ExoPlayerImplInternal(17062): at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:418)
E/ExoPlayerImplInternal(17062): at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:339)
E/ExoPlayerImplInternal(17062): at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94)
E/ExoPlayerImplInternal(17062): at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:88)
E/ExoPlayerImplInternal(17062): at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:197)
E/ExoPlayerImplInternal(17062): at com.android.org.conscrypt.ConscryptFileDescriptorSocket.verifyCertificateChain(Consc
最后是我的颤栗医生屏幕
[√] Flutter (Channel stable, 3.0.5, on Microsoft Windows [Version 10.0.19044.1826], locale en-US)
• Flutter version 3.0.5 at C:\Users\sayed\Documents\flutter_windows_2.2.3-stable\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision f1875d570e (3 weeks ago), 2022-07-13 11:24:16 -0700
• Engine revision e85ea0e79c
• Dart version 2.17.6
• DevTools version 2.12.2
[√] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
• Android SDK at C:\Users\sayed\AppData\Local\Android\sdk
• Platform android-33, build-tools 31.0.0
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840)
• All Android licenses accepted.
[√] Chrome - develop for the web
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[X] Visual Studio - develop for Windows
X Visual Studio not installed; this is necessary for Windows development.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[√] Android Studio (version 2021.2)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin can be installed from:
https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840)
[√] VS Code (version 1.69.2)
• VS Code at C:\Users\sayed\AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 3.36.0
[√] VS Code, 64-bit edition (version 1.63.0)
• VS Code at C:\Program Files\Microsoft VS Code
• Flutter extension version 3.36.0
[√] Connected device (4 available)
• DRA LX2 (mobile) • 5LX9K18817915788 • android-arm64 • Android 8.1.0 (API 27)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.19044.1826]
• Chrome (web) • chrome • web-javascript • Google Chrome 103.0.5060.134
• Edge (web) • edge • web-javascript • Microsoft Edge 103.0.1264.77
[√] HTTP Host Availability
• All required HTTP hosts are available
! Doctor found issues in 1 category.
发布于 2022-08-31 11:47:17
这是因为www.privilegeapps.com
的证书不受信任。您需要将它的证书添加到受信任列表中。安卓解决方案:
crip print --url=https://privilegeapps.com --format=pem
获取证书-----BEGIN CERTIFICATE-----
开始,以-----END CERTIFICATE-----
结束。<network-security-config>
<base-config cleartextTrafficPermitted="true" />
<domain-config>
<domain includeSubdomains="true">privilegeapps.com</domain>
<trust-anchors>
<certificates src="@raw/cert" />
</trust-anchors>
</domain-config>
</network-security-config>
<application
...
android:networkSecurityConfig="@xml/network_security_config">
如果您事先知道域,则此操作有效。如果视频链接来自用户,那么您可以捕获HandshakeException
并暂时关闭平台级别的SSL安全性。并在用户观看完视频后重新打开:
channel.setMethodCallHandler((call, result) -> {
switch (call.method) {
case SECURITY_OFF:
HttpsURLConnection.setDefaultSSLSocketFactory(unsafeSSLFactory());
result.success(null);
break;
case SECURITY_ON:
HttpsURLConnection.setDefaultSSLSocketFactory(factory);
}
});
private SSLSocketFactory unsafeSSLFactory() {
return SSLCertificateSocketFactory.getInsecure(5000, null);
}
https://stackoverflow.com/questions/73181210
复制相似问题