Flutter视频播放插件qyplayer的使用

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

Flutter视频播放插件qyplayer的使用

安装

在您的 pubspec.yaml 文件中添加 qyplayer 作为依赖项。

dependencies:
  qyplayer: ^x.x.x

iOS

如果您需要通过 HTTP(而不是 HTTPS)URL 访问视频,您需要在应用程序的 Info.plist 文件中添加适当的 NSAppTransportSecurity 权限。Info.plist 文件通常位于 ios/Runner/Info.plist

Android

如果您使用的是基于网络的视频,请确保在您的 AndroidManifest.xml 文件中包含以下权限。该文件通常位于 android/app/src/main/AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

macOS

如果您使用的是基于网络的视频,您需要添加 com.apple.security.network.client 权限。

示例

下面是一个简单的示例,展示如何使用 qyplayer 插件在 Flutter 应用程序中播放视频。

示例代码

首先,确保在 pubspec.yaml 中添加了 qyplayer 依赖项,然后运行 flutter pub get 更新依赖项。

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:qyplayer/interface/qyplayer_interface.dart';
import 'package:qyplayer/qyplayer.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'QYPlayer',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  GlobalKey<QYPlayerState> playerKey = GlobalKey<QYPlayerState>();

  QYPlayerController? controller;

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    controller = QYPlayerController(
      src:
          'https://1500005690.vod2.myqcloud.com/43843704vodtranscq1500005690/57c0f251243791580257343139/adp.10.m3u8?t=65e1d812&us=3405534&sign=f26dcdbc5d73b646752ffddc39f85660',
      poster:
          'https://img2.baidu.com/it/u=3867960631,2923014190&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500',
      width: MediaQuery.of(context).size.width,
      height: MediaQuery.of(context).size.height / 2,
      isLive: false,
      initTime: const Duration(seconds: 12),
      autoplay: false,
      useSafeArea: true,
      bgColor: Colors.white,
    );
  }

  @override
  Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        systemNavigationBarColor: Colors.black,
        statusBarColor: Colors.black,
        statusBarIconBrightness: Brightness.light,
      ),
    );
    return Scaffold(
      body: QYPlayer(
        key: playerKey,
        controller: controller!,
      ),
    );
  }
}

代码解释

  1. 导入必要的包

    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'package:qyplayer/interface/qyplayer_interface.dart';
    import 'package:qyplayer/qyplayer.dart';
    
  2. 创建主应用类 MyApp

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'QYPlayer',
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
            useMaterial3: true,
          ),
          home: const MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
  3. 创建主页类 MyHomePage

    class MyHomePage extends StatefulWidget {
      const MyHomePage({super.key, required this.title});
    
      final String title;
    
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
  4. 定义 _MyHomePageState

    class _MyHomePageState extends State<MyHomePage> {
      GlobalKey<QYPlayerState> playerKey = GlobalKey<QYPlayerState>();
      QYPlayerController? controller;
    
      @override
      void didChangeDependencies() {
        super.didChangeDependencies();
        controller = QYPlayerController(
          src: 'https://1500005690.vod2.myqcloud.com/43843704vodtranscq1500005690/57c0f251243791580257343139/adp.10.m3u8?t=65e1d812&us=3405534&sign=f26dcdbc5d73b646752ffddc39f85660',
          poster: 'https://img2.baidu.com/it/u=3867960631,2923014190&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500',
          width: MediaQuery.of(context).size.width,
          height: MediaQuery.of(context).size.height / 2,
          isLive: false,
          initTime: const Duration(seconds: 12),
          autoplay: false,
          useSafeArea: true,
          bgColor: Colors.white,
        );
      }
    
      @override
      Widget build(BuildContext context) {
        SystemChrome.setSystemUIOverlayStyle(
          const SystemUiOverlayStyle(
            systemNavigationBarColor: Colors.black,
            statusBarColor: Colors.black,
            statusBarIconBrightness: Brightness.light,
          ),
        );
        return Scaffold(
          body: QYPlayer(
            key: playerKey,
            controller: controller!,
          ),
        );
      }
    }
    

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

1 回复

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


当然,以下是关于如何在Flutter项目中使用qyplayer视频播放插件的一个简单代码示例。请注意,由于qyplayer并不是官方或广泛认知的Flutter插件,因此以下示例假设你已经正确安装并配置了qyplayer插件。如果你还没有安装,请参考插件的官方文档进行安装。

首先,确保你的pubspec.yaml文件中已经包含了qyplayer的依赖:

dependencies:
  flutter:
    sdk: flutter
  qyplayer: ^x.y.z  # 替换为实际的版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中创建一个视频播放页面。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:qyplayer/qyplayer.dart';  // 假设qyplayer的import路径是这样的

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Video Player with QyPlayer',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: VideoPlayerPage(),
    );
  }
}

class VideoPlayerPage extends StatefulWidget {
  @override
  _VideoPlayerPageState createState() => _VideoPlayerPageState();
}

class _VideoPlayerPageState extends State<VideoPlayerPage> {
  QyPlayerController? _controller;

  @override
  void initState() {
    super.initState();
    _controller = QyPlayerController.init();
    _controller?.setDataSource("https://www.example.com/your-video.mp4");  // 替换为实际的视频URL
    _controller?.prepareAsync();
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('QyPlayer Demo'),
      ),
      body: Center(
        child: _controller?.value.isInitialized == true
            ? AspectRatio(
                aspectRatio: _controller!.value.aspectRatio,
                child: QyPlayerView(_controller!),
              )
            : Container(),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            if (_controller?.value.isPlaying == true) {
              _controller?.pause();
            } else {
              _controller?.play();
            }
          });
        },
        tooltip: 'Play/Pause',
        child: Icon(
          _controller?.value.isPlaying == true ? Icons.pause : Icons.play_arrow,
        ),
      ),
    );
  }
}

在上面的代码中,我们做了以下几件事情:

  1. 创建了一个QyPlayerController实例:这个实例用于控制视频播放。
  2. 设置了视频数据源:通过setDataSource方法设置要播放的视频URL。
  3. 准备视频播放:通过prepareAsync方法异步准备视频。
  4. 构建UI:使用QyPlayerView来显示视频,并使用AspectRatio来确保视频按照其原始的宽高比进行显示。
  5. 播放/暂停控制:使用FloatingActionButton来播放或暂停视频。

请注意,由于qyplayer的具体API可能有所不同,上述代码可能需要根据实际插件的API进行调整。务必参考qyplayer的官方文档或GitHub仓库以获取最新的API信息和用法示例。

回到顶部