视频未在 flutter 中播放

问题描述 投票:0回答:1

我想在 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
作为演示。所以我使用这个网址然后播放视频。我还在我的服务器上上传了完全相同的视频,但视频无法播放并且显示黑屏。

请帮助我。

flutter dart visual-studio-code video-player
1个回答
0
投票

问题是不允许明文 HTTP 流量

我们可以在官方android文档中找到解决方案 上面写着:

如果您的应用程序在其网络安全配置不允许时请求明文 HTTP 流量(即

http://
而不是
https://
),则会发生此错误。如果您的应用程序面向 Android 9(API 级别 28)或更高版本,则默认配置会禁用明文 HTTP 流量。

如果您的应用程序需要使用明文 HTTP 流量,那么您需要使用允许它的网络安全配置。有关详细信息,请参阅 Android 的网络安全文档。要启用所有明文 HTTP 流量,您只需将

android:usesCleartextTraffic="true"
添加到应用程序的 AndroidManifest.xml 的应用程序元素即可。

另一种方法是为您的主机获取 ssl 证书并开始使用 HTTPS

© www.soinside.com 2019 - 2024. All rights reserved.