Flutter GPU加速视频播放插件gpu_video_flutter_kz的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter GPU加速视频播放插件gpu_video_flutter_kz的使用

关于

  • 什么是它,它能做什么

    • 在您的视频中自定义滤镜
    • 录制带有多种滤镜的视频
    • 支持闪光灯、后置或前置摄像头等
    • 支持横屏、竖屏或方形相机类型
  • 项目状态: 已完成/原型阶段

    • 完成功能: 3/3
    • 下一步: 清理和重新整理代码

目录

安装

pubspec.yaml 文件中添加此库:

gpu_video_flutter_kz: ^0.0.4

打开项目并在 Android 中进行以下更改:

  • minSdkVersion 更改为 21:
defaultConfig {
    minSdkVersion 21
}
  • build.gradle (Project: android) 中添加以下内容:
maven { 
  url 'https://jitpack.io' 
}

使用

视频预览

GPUMoviePreview(
  videoUrl: "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/360/Big_Buck_Bunny_360_10s_1MB.mp4",
)

要为视频应用滤镜,可以使用:

GpuVideoFlutterKz.filterVideo(FilterType.BILATERAL_BLUR);

设置滤镜的百分比:

GpuVideoFlutterKz.setFilterPercentage(int percent);

摄像头录制

初始化:

GPUCameraRecord(
      cameraViewType: CameraViewType.square),
)

您可以将相机类型更改为竖屏或横屏。

为预览相机添加滤镜:

GpuVideoFlutterKz.filterCameraRecorder(filterType);

开始录制:

GpuVideoFlutterKz.recordCameraVideo();

结束录制:

String videoPath = GpuVideoFlutterKz.stopRecordCameraVideo();
// 返回录制视频的路径

切换前后摄像头:

GpuVideoFlutterKz.switchCamera();

打开或关闭闪光灯:

GpuVideoFlutterKz.turnOnOffFlash();

拍摄照片:

String imagePath = GpuVideoFlutterKz.captureImage();
// 返回拍摄照片的路径

MP4 合成

获取相册中的所有视频:

List<VideoItem> videos = await GpuVideoFlutterKz.getListVideo();
// 返回 VideoItem 的列表 (在我的库中)

启动编解码器:

GpuVideoFlutterKz.startCodec(isMute, isFlipHorizontal, isFlipVertical, videoSelectedPath, filterType);
// 应用 5 个属性到您的视频,并将其保存到您的相册

特性

  • 自定义滤镜
  • 多种滤镜录制视频
  • 支持闪光灯、前后摄像头
  • 支持横屏、竖屏或方形相机类型

需求

  • 要求 Android 最低 SDK 版本为 21

资源(文档和其他链接)

许可

Apache License, Version 2.0

示例代码

以下是完整的示例代码:

// ignore_for_file: prefer_const_constructors

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:gpu_video_flutter_kz_example/demo_platform_view.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomeView(),
      theme: ThemeData(
        highlightColor: Colors.blueAccent,
      ),
    );
  }

  void _onMp4ComposeButtonClick(BuildContext context) {}

  void _onMoviePreviewButtonClick(BuildContext context) {
    log("123123");
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => DemoPlatformView(
          keyFunction: KeyFunction.moviePreview,
        ),
      ),
    );
  }

  void _onCameraRecordButtonClick(BuildContext context) {}
}

class HomeView extends StatelessWidget {
  const HomeView({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextButton(
                onPressed: () => _onMp4ComposeButtonClick(context),
                child: Text("MP4 合成")),
            TextButton(
                onPressed: () => _onCameraRecordButtonClick(context),
                child: Text("摄像头录制")),
            TextButton(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => DemoPlatformView(
                          keyFunction: KeyFunction.moviePreview),
                    ),
                  );
                },
                child: Text("视频预览")),
          ],
        ),
      ),
    );
  }

  _onMp4ComposeButtonClick(BuildContext context) {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) =>
            DemoPlatformView(keyFunction: KeyFunction.mp4Compose),
      ),
    );
  }

  void _onCameraRecordButtonClick(BuildContext context) {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) =>
            DemoPlatformView(keyFunction: KeyFunction.cameraRecord),
      ),
    );
  }
}

enum KeyFunction { mp4Compose, cameraRecord, moviePreview }

更多关于Flutter GPU加速视频播放插件gpu_video_flutter_kz的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter GPU加速视频播放插件gpu_video_flutter_kz的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 gpu_video_flutter_kz 插件进行 GPU 加速视频播放的示例代码。这个插件允许在 Flutter 应用中高效地播放视频,利用 GPU 加速来提升性能。

首先,确保你已经在 pubspec.yaml 文件中添加了依赖:

dependencies:
  flutter:
    sdk: flutter
  gpu_video_flutter_kz: ^最新版本号  # 替换为最新的版本号

然后,运行 flutter pub get 来获取依赖。

接下来,在你的 Flutter 项目中,你可以按照以下步骤使用 gpu_video_flutter_kz 插件:

  1. 导入插件

在你的 Dart 文件中导入插件:

import 'package:gpu_video_flutter_kz/gpu_video_flutter_kz.dart';
  1. 创建视频播放器控件

使用 GpuVideoPlayerControllerGpuVideoPlayer 控件来播放视频。下面是一个完整的示例:

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

void main() {
  runApp(MyApp());
}

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

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

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  late GpuVideoPlayerController _controller;

  @override
  void initState() {
    super.initState();
    // 初始化控制器并设置视频资产路径(或网络URL)
    _controller = GpuVideoPlayerController.asset('assets/sample_video.mp4')
      ..initialize().then((_) {
        // 视频初始化完成后,可以开始播放
        setState(() {});
      });
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GPU 加速视频播放'),
      ),
      body: Center(
        child: _controller.value.isInitialized
            ? AspectRatio(
                aspectRatio: _controller.value.aspectRatio,
                child: GpuVideoPlayer(_controller),
              )
            : CircularProgressIndicator(),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            _controller.value.isPlaying
                ? _controller.pause()
                : _controller.play();
          });
        },
        child: Icon(
          _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
        ),
      ),
    );
  }
}

在这个示例中:

  • GpuVideoPlayerController 用于控制视频的播放。你可以通过 .asset() 方法加载本地视频资产,或者通过 .network() 方法加载网络视频。
  • initState 方法中,我们初始化视频控制器,并在视频初始化完成后更新 UI。
  • GpuVideoPlayer 控件用于在界面上显示视频。
  • 一个简单的浮动操作按钮用于播放和暂停视频。
  1. 添加视频资产(如果使用本地视频):

如果你使用的是本地视频资产,确保在 pubspec.yaml 中声明这些资产:

flutter:
  assets:
    - assets/sample_video.mp4

然后,将你的视频文件放在 assets 文件夹中。

这就是一个基本的示例,展示了如何使用 gpu_video_flutter_kz 插件在 Flutter 应用中实现 GPU 加速视频播放。根据你的需求,你可以进一步自定义和扩展这个示例。

回到顶部