57Flutter vide0_Player视频播放

Flutter vide0_Player视频播放

1.简介

vide_Player适用于iOS,Android和Web的Flutter插件,用于在Widget曲面上播放视频。官网维护的一套

注意:此插件仍在开发中,某些API可能尚不可用。后续会添加上来

2.使用

1.依赖
dependencies:
  video_player: ^2.1.1
import 'package:video_player/video_player.dart';
2.IOS
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>
3.android
<uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

注意:在Android 29以上的版本,需要添加该配置

    <application
      android:name="io.flutter.app.FlutterApplication"
        android:label="flutter_first"
        android:requestLegacyExternalStorage="true"
        android:usesCleartextTraffic="true"
        android:icon="@mipmap/ic_launcher">

3.常用方法说明

_controller.seekTo(position); //设置视频播放位置跳转至指定时间(duration类型)
_controller.pause();//暂停
_controller.play(); //播放
_controller.setVolume(volume);  //设置视频的音量(double类型)
_controller.setLooping(looping);//设置是否循环播放(bool类型)
_controller.addListener(() { });//监听,可以应用于进度条的监听刷新等等场景
_controller.dispose(); //关闭Gui页面,一般有固定写法
_controller.setPlaybackSpeed(speed);//设置播放数据

——————————注意:使用addListener时,尽量使用局部刷新,而不是全局刷新,提升UI性能

注意问题:

设置this的播放速度。
speed表示速度值,不同的平台接受不同的速度值范围。在speed必须大于0。
这些值将按以下方式处理:
在网络上,当浏览器确定声音不再有用时,音频将以某种速度静音。例如,“壁虎将范围外的声音静音0.25为5.0”(请参阅https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/playbackRate)。
在Android上,某些非常极端的速度将无法正确播放。取而代之的是,您的视频仍会播放,但ExoPlayer会限制速度(但该值是由播放器允许的,例如在Web上)。
在iOS上,有时您无法超过2.0视频的播放速度。如果不支持该选项,将引发错误。也有可能您的特定视频无法放慢速度,在这种情况下,该插件还会报告错误。

4.播放信息获取

 //获取当前视频播放的信息
    VideoPlayerValue videoPlayerValue = _videoPlayerController.value;

    //是否初始化完成
    bool initialized = videoPlayerValue.initialized;
    //是否正在播放
    bool isPlaying = videoPlayerValue.isPlaying;
    //当前播放的视频的宽高比例
    double aspectRatio = videoPlayerValue.aspectRatio;
    //当前视频是否缓存
    bool isBuffer = videoPlayerValue.isBuffering;
    //当前视频是否循环
    bool isLoop = videoPlayerValue.isLooping;
    //当前播放视频的总时长
    Duration totalDuration = videoPlayerValue.duration;
    //当前播放视频的位置
    Duration currentDuration = videoPlayerValue.position;
    if (initialized) {
      // 视频已初始化
      if (isPlaying) {
        // 正播放 --- 暂停
        _videoPlayerController.pause();
      } else {
        //暂停 ----播放
        _videoPlayerController.play();
      }
      setState(() {});
    } else {
      //未初始化
      _videoPlayerController.initialize().then((_) {
        // videoPlayerController.play();
        // setState(() {});
      });
    }

播放本地asset视频和File

    _videoPlayerController =
        VideoPlayerController.asset('assets/Butterfly-209.mp4');

VideoPlayerUI.file

代码如下:

import 'package:video_player/video_player.dart';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: VideoDemo(),
    );
  }
}

class VideoDemo extends StatefulWidget {
  @override
  _VideoDemoState createState() => _VideoDemoState();
}

class _VideoDemoState extends State<VideoDemo> {
  VideoPlayerController _controller;

  @override
  void initState() {
    super.initState();
    _controller = VideoPlayerController.network(
        'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4')
    ..initialize().whenComplete((){
      setState(() {
        print('准备好了1${_controller.value.isInitialized}');
      });
    });

    _controller.setLooping(true);//循环播放
    Duration duration = Duration(seconds: 10);
    _controller.seekTo(duration);
    _controller.setVolume(3.0);
    _controller.addListener(() {
      print('播放');
      print('${_controller.value.duration}');
    });

    // _controller =
    //     VideoPlayerController.asset("asset资源路径");

  }

  @override
  Widget build(BuildContext context) {
    print('准备好了2${_controller.value.isInitialized}');
    return MaterialApp(
      title: 'Video Demo',
      home: Scaffold(
        body: Center(
          child: _controller.value.isInitialized
              ? AspectRatio(
            aspectRatio: _controller.value.aspectRatio,
            child: VideoPlayer(_controller),
          )
              : Container(color: Colors.red),
        ),
        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();
  }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值