我无法使用 Flutter 的视频播放器库从我的服务器播放视频
当我尝试 flutter
时,视频工作正常并播放,但如果我播放我的服务器端 url
视频显示错误和黑屏。所以请帮我缩短这个查询。
代码是
import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
class MyVideoPlayerPage extends StatefulWidget {
String myvideo;
MyVideoPlayerPage({this.myvideo});
@override
_MyVideoPlayerPageState createState() => _MyVideoPlayerPageState(myvideo);
}
class _MyVideoPlayerPageState extends State<MyVideoPlayerPage> {
String myvideo;
_MyVideoPlayerPageState(this.myvideo);
VideoPlayerController _controller;
Future<void> _initializeVideoPlayerFuture;
@override
void initState() {
// TODO: implement initState
super.initState();
_controller = VideoPlayerController.network(
//'http://ochapchap.com/public/propertyImage/1594746367.VID-20200713-WA0001.mp4'
// 'http://techslides.com/demos/sample-videos/small.mp4',
'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4'
);
_initializeVideoPlayerFuture = _controller.initialize();
_controller.setLooping(true);
_controller.setVolume(1);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Video"),
),
body: FutureBuilder(
future: _initializeVideoPlayerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
// not wrapped in an AspectRatio widget
return VideoPlayer(_controller);
} else {
return Center(child: CircularProgressIndicator());
}
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
print(myvideo);
setState(() {
if (_controller.value.isPlaying) {
_controller.pause();
} else {
_controller.play();
}
});
},
child: Icon(
_controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
),
),
);
}
}
但是当我把这个 flutter dev video 播放起来很有魅力。链接是 https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4
我的服务器链接不播放 http://ochapchap.com/public/propertyImage/1594746367.VID-20200713-WA0001.mp4
我的链接上显示的错误是
E/ExoPlayerImplInternal: Source error
com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: Unable to connect
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:282)
at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83)
at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:956)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:391)
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:919)
Caused by: java.io.IOException: Cleartext HTTP traffic to ochapchap.com not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:124)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:462)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:550)
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:454)
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:280)
at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83)
at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:956)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:391)
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:919)
最佳答案
此地址使用http
,如果此链接支持https
,可以直接使用https
与 http
和
一起使用
处理 不允许站点的明文 HTTP 流量
您可以编辑 android\app\src\main\AndroidManifest.xml
并添加 android:usesCleartextTraffic="true"
代码片段
<application
android:name="yourName"
android:label="yourLable"
android:usesCleartextTraffic="true"
关于flutter - 无法在 VideoPlayer : Flutter 中播放来自服务器 url 的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62983587/