flutter - 无法在 VideoPlayer : Flutter 中播放来自服务器 url 的视频

标签 flutter flutter-layout flutter-dependencies flutter-animation flutter-web

我无法使用 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/

相关文章:

flutter - flutter 中的BLOC模式是什么?

flutter - flutter :增加appBar图标的高度

dart - 按下一个 MaterialButton 时更改一个 MaterialButton 的颜色?

Flutter:应用内购买信用卡测试

Flutter:项目在 'pod update' 之后无法编译

android - 如何使用 Flutter 处理应用程序生命周期(在 Android 和 iOS 上)?

dart - BottomNavigationBarItem 中添加的四个图标不起作用

gridview - 如何在 Flutter 中将 gridView 项目居中?

flutter 地理定位器包不返回经度和纬度值

flutter - 错误 : unable to find directory entry in pubspec.