【问题标题】:Flutter Video Player isn't playing颤振视频播放器没有播放
【发布时间】:2021-09-13 03:25:28
【问题描述】:

我正在尝试为我正在制作的游戏构建一个教程小部件,但我的视频播放器没有显示。我遇到的主要问题是我的视频播放器没有出现在我的屏幕上。我确实将互联网权限插入到我的AndroidManifest.xml 文件中。下面是我的代码屏幕,下面是我的代码:

这是我的代码:

import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:in_app_update/in_app_update.dart';
import 'package:video_player/video_player.dart';
import 'ad_manager.dart';
import 'audio_controller.dart';
import 'main.dart';
class Tutorial extends StatefulWidget {
  Future<InitializationStatus> _initGoogleMobileAds() {
    return MobileAds.instance.initialize();
  }

  @override
  State<StatefulWidget> createState() {
    this._initGoogleMobileAds();
    return _TutorialState();
  }
}
class _TutorialState extends State<Tutorial> {
AudioController _audioController = AudioController();
late var _bannerAd;
bool _isBannerAdReady = false;
late VideoPlayerController _controller;

@override
void initState() {
  _audioController.pauseMusic();
  super.initState();
  _controller = VideoPlayerController.network('http://techslides.com/demos/sample-videos/small.mp4')
    ..initialize().then((_){
    setState((){});
  });
  if(Platform.isAndroid)
    InAppUpdate.performImmediateUpdate();
  _bannerAd = BannerAd(
    adUnitId: AdManager.bannerAd0UnitId,
    request: AdRequest(),
    size: AdSize.banner,
    listener: BannerAdListener(
      onAdLoaded: (_) {
        setState(() {
          _isBannerAdReady = true;
        });
      },
      onAdFailedToLoad: (ad, err) {
        print('Failed to load a banner ad: ${err.message}');
        print(err.responseInfo);
        print(err.code);
        print(err.domain);
        _isBannerAdReady = false;
        ad.dispose();
      },
    ),
  );

  _bannerAd.load();
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
  ]);
}
@override
Widget build(BuildContext context) {
  return new MaterialApp(
    home: Builder(
      builder: (BuildContext context){
        return Scaffold(
          backgroundColor: Color(0xFF151515),
          body: Column(
            children: <Widget>[
              if (_isBannerAdReady)
                Align(
                  alignment: Alignment.topCenter,
                  child: Container(
                    width: _bannerAd.size.width.toDouble(),
                    height: _bannerAd.size.height.toDouble(),
                    child: AdWidget(ad: _bannerAd),
                  ),
                ),
              Center(
                child: _controller.value.isInitialized
                    ? AspectRatio(
                  aspectRatio: _controller.value.aspectRatio,
                  child: VideoPlayer(_controller),
                )
                    : Container(),
              ),
              FloatingActionButton(
                onPressed: () {
                  setState(() {
                    _controller.value.isPlaying
                        ? _controller.pause()
                        : _controller.play();
                  });
                },
                child: Icon(
                  _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
                ),
              ),
              TextButton(
                //padding: EdgeInsets.only(left: 100, right: 100),
                onPressed: () {
                  print("Back");
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                        builder: (context) => DBall()),
                  );
                },
                child: Card(
                    margin: EdgeInsets.fromLTRB(25, 130, 25, 5),
                    borderOnForeground: false,
                    child: Padding(
                      padding: EdgeInsets.all(20),
                      child: Text(
                        "Back",
                        textAlign: TextAlign.center,
                        style: TextStyle(
                            fontSize: 30, fontFamily: "Goldman"),
                      ),
                    )),
              ),
            ]
          )
        );
      }
    )
  );
}

}

这是我的输出:

E/ExoPlayerImplInternal(14522): Playback error
E/ExoPlayerImplInternal(14522):   com.google.android.exoplayer2.ExoPlaybackException: Source error
E/ExoPlayerImplInternal(14522):       at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:554)
E/ExoPlayerImplInternal(14522):       at android.os.Handler.dispatchMessage(Handler.java:102)
E/ExoPlayerImplInternal(14522):       at android.os.Looper.loop(Looper.java:223)
E/ExoPlayerImplInternal(14522):       at android.os.HandlerThread.run(HandlerThread.java:67)
E/ExoPlayerImplInternal(14522):   Caused by: com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: Unable to connect
E/ExoPlayerImplInternal(14522):       at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:309)
E/ExoPlayerImplInternal(14522):       at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:84)
E/ExoPlayerImplInternal(14522):       at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1013)
E/ExoPlayerImplInternal(14522):       at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:415)
E/ExoPlayerImplInternal(14522):       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/ExoPlayerImplInternal(14522):       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/ExoPlayerImplInternal(14522):       at java.lang.Thread.run(Thread.java:923)
E/ExoPlayerImplInternal(14522):   Caused by: java.io.IOException: Cleartext HTTP traffic to techslides.com not permitted
E/ExoPlayerImplInternal(14522):       at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:127)
E/ExoPlayerImplInternal(14522):       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:462)
E/ExoPlayerImplInternal(14522):       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)
E/ExoPlayerImplInternal(14522):       at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:589)
E/ExoPlayerImplInternal(14522):       at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:493)
E/ExoPlayerImplInternal(14522):       at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:307)
E/ExoPlayerImplInternal(14522):       ... 6 more
E/flutter (14522): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: PlatformException(VideoError, Video player had error com.google.android.exoplayer2.ExoPlaybackException: Source error, null, null)
E/flutter (14522): 

【问题讨论】:

    标签: flutter dart video-player


    【解决方案1】:

    在错误中,它指出

    E/ExoPlayerImplInternal(14522):原因:java.io.IOException:不允许到 techslides.com 的明文 HTTP 流量

    这是因为视频的 URL 使用的是 HTTP,您需要使用以 HTTPS 开头的 URL 来提供视频

    【讨论】:

      猜你喜欢
      • 2021-04-03
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2021-10-28
      • 1970-01-01
      • 2020-03-02
      相关资源
      最近更新 更多