我想在 flutter 中播放视频。这是我的源代码:
import 'package:flutter/material.dart';
import 'package:second_project/core/api_client.dart';
import 'package:video_player/video_player.dart';
class MyProfileScreenUtility_MyPostVideo extends StatefulWidget {
final String postVideo;
const MyProfileScreenUtility_MyPostVideo({
super.key,
required this.postVideo,
});
@override
State<MyProfileScreenUtility_MyPostVideo> createState() =>
_MyProfileScreenUtility_MyPostVideoState();
}
class _MyProfileScreenUtility_MyPostVideoState
extends State<MyProfileScreenUtility_MyPostVideo> {
late VideoPlayerController _controller;
late Future<void> _initializeVideoPlayerFuture;
@override
void initState() {
super.initState();
String url = (ApiClient.baseUrl + widget.postVideo).replaceAll("\\", "/");
//String url =
//'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4';
_controller = VideoPlayerController.networkUrl(Uri.parse(url));
//_controller = VideoPlayerController.asset("assets/Videos/butterfly.mp4");
_initializeVideoPlayerFuture = _controller.initialize();
//_controller.setLooping(true);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
FutureBuilder(
future: _initializeVideoPlayerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return GestureDetector(
onTap: () {
setState(() {
if (_controller.value.isPlaying) {
_controller.pause();
} else {
_controller.play();
}
});
},
child: Center(
child: AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
),
),
);
} else {
return const Center(
child: CircularProgressIndicator(),
);
}
},
),
],
);
}
}
但是视频无法播放并且显示黑屏。我使用了
video_player
包。
下面的截图显示我的源代码中正确生成了视频URL:
视频地址
程序调试中生成的示例视频 URL =
http://amiini.ir/api/Uploads/UploadedFiles/164e6f65-bca6-4424-b660-89e243a36648.mp4
在
video_player
包的文档中已使用视频https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4
作为演示。所以我使用这个网址然后播放视频。我还在我的服务器上上传了完全相同的视频,但视频无法播放并且显示黑屏。
请帮助我。
问题是不允许明文 HTTP 流量,
我们可以在官方android文档中找到解决方案 上面写着:
如果您的应用程序在其网络安全配置不允许时请求明文 HTTP 流量(即
http://
而不是 https://
),则会发生此错误。如果您的应用程序面向 Android 9(API 级别 28)或更高版本,则默认配置会禁用明文 HTTP 流量。
如果您的应用程序需要使用明文 HTTP 流量,那么您需要使用允许它的网络安全配置。有关详细信息,请参阅 Android 的网络安全文档。要启用所有明文 HTTP 流量,您只需将
android:usesCleartextTraffic="true"
添加到应用程序的 AndroidManifest.xml 的应用程序元素即可。
另一种方法是为您的主机获取 ssl 证书并开始使用 HTTPS