**嗨,我正在尝试在我的 flutter 应用程序中播放实时新闻视频,它是 .m3u8 格式,但出现上述错误。使用所有更新的依赖项。我想在我的 flutter 应用程序中播放实时新闻。我有网址,你也可以试试。 网址:http://161.97.162.167:1936/live/tnnnews/playlist.m3u8 当我将另一个 url 与 .m3u8 一起使用时,它会在 flutter 应用程序上播放,但是当我粘贴实时 url 代码时,它会抛出上述错误。 **
代码
import 'package:video_player/video_player.dart';
import 'package:flutter/material.dart';
class VideoApp extends StatefulWidget {
@override
_VideoAppState createState() => _VideoAppState();
}
class _VideoAppState extends State<VideoApp> {
VideoPlayerController _controller;
@override
void initState() {
super.initState();
_controller = VideoPlayerController.network(
'http://161.97.162.167:1936/live/tnnnews/playlist.m3u8')
..initialize().then((_) {
// Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Video Demo',
home: Scaffold(
body: Center(
child: _controller.value.isInitialized
? AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
)
: Container(),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
_controller.value.isPlaying
? _controller.pause()
: _controller.play();
});
},
child: Icon(
_controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
),
),
),
);
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
}
将其放入您的 AndroidManifest.xml
<application ...
android:usesCleartextTraffic="true"
这个问题发生在我身上,经过搜索我发现问题出在链接本身 由于该库仅在链接的扩展名是 .mp4 时有效,否则您必须解析它以包含 .mp4 扩展名
执行 Flutter 清理并运行应用程序。
嘿,我今天在 2022/19/8 遇到了同样的错误。只是添加 fijkplayer:^0.10.0 在你的项目 pubsec.yaml 文件中它会工作。
我已经做到了,它对我有用
我的 AndroidManifest.xml 已经有了这一行,但它不工作。 所以,问题出在链接上。链接后你必须添加像 .mp4 这样的扩展名 它对我有用。
我在使用存储在项目资产中的 MP4 视频时遇到了这个错误。为了解决这个问题,我将视频的尺寸从 2160x4096 减小到 1080x2048。
对我来说,这解决了问题:
controller = VideoPlayerController.asset(widget.video)
..initialize().then((value) {
setState(() {
controller.play();
});
});
视频网址应以
https
开头,而不是http
.
video_player 包不支持以
http
开头的视频。
我知道这已经很晚了,但是对于任何因为这个灾难性错误而在 2023 年仍在挣扎的人来说,调用以下代码可以帮助您在更改视频(加载下一个或上一个视频)时摆脱它
`
Future <void> onControllerChange () async {
if (_videoPlayerController == null) { //if current controller is null
initializeController(); //method to initialize your video controller
} else {
final oldController = _videoPlayerController;
await oldController.dispose();
initializeController();
}
}`