首页 > 其他分享 >chewie 视频播放器使用

chewie 视频播放器使用

时间:2024-01-16 22:13:30浏览次数:26  
标签:播放器 视频 chewieController dispose chewie initState override videoPlayerController 

基本使用1

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

class VideoPlayerScreen extends StatefulWidget {
  @override
  _VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  late VideoPlayerController
      _videoPlayerController; //声明 VideoPlayerController 对象
  late Future<void> _initializeVideoPlayerFuture; //声明所需的异步任务 Future 对象

  @override
  void initState() {
    super.initState();
    // 初始化 VideoPlayerController
    // ignore: deprecated_member_use
    _videoPlayerController = VideoPlayerController.network(
        'https://dashanbook.oss-cn-shenzhen.aliyuncs.com/av/2023/12/04/86e70d8117914e369b93ec8f2b5b5aef.mp4');

    // 初始化 video_player,等待视频加载完成
    _initializeVideoPlayerFuture = _videoPlayerController.initialize();
  }

  @override
  void dispose() {
    // 释放资源
    _videoPlayerController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: _initializeVideoPlayerFuture,
        builder: (context, snapshot) {
          // 判断视频加载状态
          if (snapshot.connectionState == ConnectionState.done) {
            // Chewie 组件用于展示和控制视频播放
            return Chewie(
              controller: ChewieController(
                // 将 VideoPlayerController 传递给 ChewieController
                videoPlayerController: _videoPlayerController,
                aspectRatio: 16 / 9, // 视频宽高比
                autoPlay: false, // 是否自动播放
                looping: true, // 是否循环播放
              ),
            );
          } else {
            // 正在加载视频时显示加载指示器
            return const Center(
              child: CircularProgressIndicator(),
            );
          }
        },
      ),
    );
  }
}

基本使用2

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

class ChewieVideoPage extends StatefulWidget {
  const ChewieVideoPage({super.key});
  @override
  State<ChewieVideoPage> createState() => _ChewieVideoPageState();
}

class _ChewieVideoPageState extends State<ChewieVideoPage> {
  late VideoPlayerController videoPlayerController;
  late ChewieController chewieController;
  @override
  void initState() {
// TODO: implement initState
    super.initState();
    _initVideo();
  }

  _initVideo() async {
    videoPlayerController = VideoPlayerController.network(
        'https://dashanbook.oss-cn-shenzhen.aliyuncs.com/av/2023/12/04/c9283ebc3ae44c9f90f7c19549b934eb.mp4');
    chewieController = ChewieController(
      videoPlayerController: videoPlayerController,
      aspectRatio: 3 / 2, //视频宽高比
      autoPlay: true,
      looping: true,
    );
  }

/*销毁*/
  @override
  void dispose() {
    videoPlayerController.dispose();
    chewieController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('在线视频播放'),
      ),
      body: Center(
          child: SizedBox(
        child: AspectRatio(
          aspectRatio: 3 / 2,
          child: Chewie(
            controller: chewieController,
          ),
        ),
      )),
    );
  }
}

使用字幕

class ChewieVideoPage extends StatefulWidget {
  const ChewieVideoPage({super.key});
  @override
  State<ChewieVideoPage> createState() => _ChewieVideoPageState();
}

class _ChewieVideoPageState extends State<ChewieVideoPage> {
  late VideoPlayerController videoPlayerController;
  late ChewieController chewieController;
  @override
  void initState() {
// TODO: implement initState
    super.initState();
    _initVideo();
  }

  _initVideo() async {
    videoPlayerController = VideoPlayerController.network(
        'https://dashanbook.oss-cn-shenzhen.aliyuncs.com/av/2023/12/04/c9283ebc3ae44c9f90f7c19549b934eb.mp4');
    chewieController = ChewieController(
        videoPlayerController: videoPlayerController,
        aspectRatio: 3 / 2, //视频宽高比
        autoPlay: true,
        looping: true,
        subtitle: Subtitles([ //创建的字幕列表
          Subtitle(
              index: 0, //字幕的索引(从0开始)
              start: Duration.zero, //字幕开始的时间戳
              end: Duration(seconds: 10), //字幕结束的时间戳
              text: "How are you?"),   //字幕的文本内容
          Subtitle(
              index: 1,
              start: Duration(seconds: 10),
              end: Duration(seconds: 20),
              text: "这是字幕")
        ]));
  }

/*销毁*/
  @override
  void dispose() {
    videoPlayerController.dispose();
    chewieController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('在线视频播放'),
      ),
      body: Center(
          child: SizedBox(
        child: AspectRatio(
          aspectRatio: 3 / 2,
          child: Chewie(
            controller: chewieController,
          ),
        ),
      )),
    );
  }
}

播放速度的汉化

class ChewieVideoPage extends StatefulWidget {
  const ChewieVideoPage({super.key});
  @override
  State<ChewieVideoPage> createState() => _ChewieVideoPageState();
}

class _ChewieVideoPageState extends State<ChewieVideoPage> {
  late VideoPlayerController videoPlayerController;
  late ChewieController chewieController;
  @override
  void initState() {
// TODO: implement initState
    super.initState();
    _initVideo();
  }

  _initVideo() async {
    videoPlayerController = VideoPlayerController.network(
        'https://dashanbook.oss-cn-shenzhen.aliyuncs.com/av/2023/12/04/c9283ebc3ae44c9f90f7c19549b934eb.mp4');
    chewieController = ChewieController(
        videoPlayerController: videoPlayerController,
        aspectRatio: 3 / 2, //视频宽高比
        autoPlay: true,
        looping: true,
        optionsBuilder: (context, chewieOptions) async{  //视频上方三个点
          await showModalBottomSheet(context: context, builder: (context){
                  return SizedBox(
                    height: 200,
                    child: ListView(
                    children:  [
                      ListTile(title: Text("播放速度"),onTap: (){
                        chewieOptions[0].onTap!(); //播放速度的汉化
                      },),
                      ListTile(title: Text("取消"),onTap: (){
                        Navigator.pop(context);
                      },),
                    ],
                  ),
                  );
          });
        },
        );
  }

/*销毁*/
  @override
  void dispose() {
    videoPlayerController.dispose();
    chewieController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('在线视频播放'),
      ),
      body: Center(
          child: SizedBox(
        child: AspectRatio(
          aspectRatio: 3 / 2,
          child: Chewie(
            controller: chewieController,
          ),
        ),
      )),
    );
  }
}

 

 

 

标签:播放器,视频,chewieController,dispose,chewie,initState,override,videoPlayerController,
From: https://www.cnblogs.com/xbinbin/p/17916328.html

相关文章

  • 国标视频监控平台EasyCVR如何通过接口调用下载设备录像文件
    安防监控系统国标GB28181协议EasyCVR视频监控平台采用了开放式的网络结构,平台可支持Windows/Linux(CentOSubuntu)/国产麒麟系统,能在局域网、公网、专网等复杂的网络环境中,将场景中分散的海量网络监控设备进行统一接入与汇聚管理,并能提供实时远程视频监控、视频录像、回放与存储、......
  • 【视频编辑工具】上海道宁与剪映助力您更轻松制作出专业级的视频作品
     在当今的数字媒体时代从生活到学习视频已经成为人们获取外界信息必不可少的方式与之相对应的制作视频已经成为了企业商业宣传的重要方式  对于许多非专业人士来说视频制作可能是一项复杂且繁琐的任务剪映是一款强大且易用的视频编辑工具让每一个人或者......
  • 高速视频采集卡设计方案:620-基于PCIe的高速视频采集卡
    一、产品概述   基于PCIe的高速视频采集卡,通过PCIe3.0X8传输到存储计算服务器,实现信号的分析、存储。    北京太速科技产品固化FPGA逻辑,适配视频连续采集,缓存容量2GB,开源的PCIe QT客户端软件,用户可以在很短的时间内完成视频程序的开发,开发效率高、难度小。  ......
  • 某客《微信小程序》从基础到实战视频教程
     第1部分微信小程序从基础到实战课程概要  第1节微信小程序从基础到实战课程概要  1.1微信小程序从基础到实战课程概要  第2部分初识微信小程序   第1节微信小程序简介  2.1微信小程序简介  第2节微信小程序开发准备2.2.1微信小程序开发准......
  • YOLOv8原理与源码解析(视频教程)
    课程链接:https://edu.51cto.com/course/35522.html【为什么要学习这门课】Linux创始人LinusTorvalds有一句名言:Talkischeap.Showmethecode.冗谈不够,放码过来!代码阅读是从基础到提高的必由之路。YOLOv8基于先前YOLO版本的成功,引入了新功能和改进,进一步提升性能和灵活性。......
  • 视频监控管理平台智能边缘分析一体机视频分析明烟明火告警
    在当今数字化时代,视频监控已经成为我们生活中不可或缺的一部分。无论是在商业领域还是在公共安全领域,视频监控都发挥着重要的作用。然而,随着技术的不断发展,传统的视频监控系统已经无法满足我们日益增长的需求。我们需要一种更加智能、更加高效的解决方案来提升视频监控的效果和效......
  • 视频监控管理平台智能边缘分析一体机视频分析明烟明火告警
    在当今数字化时代,视频监控已经成为我们生活中不可或缺的一部分。无论是在商业领域还是在公共安全领域,视频监控都发挥着重要的作用。然而,随着技术的不断发展,传统的视频监控系统已经无法满足我们日益增长的需求。我们需要一种更加智能、更加高效的解决方案来提升视频监控的效果和效率......
  • 视频监控管理平台智能边缘分析一体机视频分析区域人数统计
    在这个数据驱动的时代,我们每天都在产生大量的数据。这些数据中蕴含着无尽的信息和价值,只要我们有足够的能力去挖掘和利用。然而,传统的数据处理方式往往无法满足我们对实时、精准、高效的需求。这时,智能边缘分析一体机应运而生,它以其独特的优势,正在改变我们的生活和工作方式。今天......
  • DVI光端机在视频传输中的关键作用分析
    在数字化、网络化和智能化的社会背景下,DVI光端机在视频传输领域的作用日益凸显。本文旨在深入探讨DVI光端机的技术特性、应用场景及其未来发展趋势。DVI光端机技术概述DVI(DigitalVisualInterface,数字视频接口)是一种用于传输未经压缩的数字化视频的接口标准。DVI光端机主要功能是......
  • VGA光端机在高清视频传输中的应用分析
    随着数字技术的发展,VGA光端机在高清视频传输领域扮演着越来越重要的角色。本文将对VGA光端机的技术特性、应用场景以及未来发展趋势进行详细探讨。VGA光端机技术概述VGA(VideoGraphicsArray,视频图形阵列)是一种传统的视频传输标准,主要用于传输模拟视频信号。VGA光端机通过将模拟信......