无法从VideoPlayer中的服务器URL播放视频:Flutter

时间:2020-07-19 17:35:30

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

我无法使用Flutter的视频播放器lib从服务器播放视频 当我尝试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,
        ),
      ),
    );
  }
}

但是当我把这个颤抖的开发视频放起来时,就像魅力一样。链接为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) 

1 个答案:

答案 0 :(得分:1)

此地址使用http,如果此链接支持https,则可以直接使用https
http
一起使用 处理Cleartext HTTP traffic to site not permitted
您可以编辑android\app\src\main\AndroidManifest.xml并添加android:usesCleartextTraffic="true"

代码段

 <application
        android:name="yourName"
        android:label="yourLable"
        android:usesCleartextTraffic="true"