Flutter视频播放插件video_player_oneplusdream的使用

Flutter视频播放插件video_player_oneplusdream的使用

视频播放插件介绍

video_player_oneplusdream 是一个用于在 Flutter 应用中播放视频的插件,支持 iOS、Android 和 Web 平台。

支持平台

Android iOS Web
支持 SDK 24+ 13.0+ Any*

安装

首先,在 pubspec.yaml 文件中添加 video_player_oneplusdream 作为依赖项。

dependencies:
  video_player_oneplusdream: ^x.x.x

iOS

如果你需要通过 http URL 访问视频(而不是 https),你需要在应用的 Info.plist 文件中添加适当的 NSAppTransportSecurity 权限。Info.plist 文件位于 <项目根目录>/ios/Runner/Info.plist。具体可以参考 Apple 文档

Android

如果你使用的是网络视频,确保在 AndroidManifest.xml 文件中添加以下权限:

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

AndroidManifest.xml 文件位于 <项目根目录>/android/app/src/main/AndroidManifest.xml

Web

index.html 文件中添加以下两个链接:

<link href="https://vjs.zencdn.net/8.0.4/video-js.css" rel="stylesheet" />
<script src="https://vjs.zencdn.net/8.0.4/video.min.js"></script>

请参阅 video.js 文档 获取更多详细信息。

支持的格式

  • iOS: 使用 AVPlayer,支持格式取决于 iOS 版本。
  • Android: 使用 ExoPlayer,支持格式请参阅 这里
  • Web: 使用 video.js。

示例

以下是一个基本示例,展示了如何使用 video_player_oneplusdream 插件。

import 'package:flutter/material.dart';
import 'package:video_player_oneplusdream/video_player_oneplusdream.dart';
import 'package:video_player_oneplusdream_example/cache.dart';

import 'first.dart';

class HomeRoute extends StatelessWidget {
  HomeRoute({super.key});

  // 创建视频控制器
  VideoPlayerController controller = createVideoController();

  // 播放列表
  List<PlayingItem> items = [
    PlayingItem(
      id: '1',
      url: "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8",
      title: "Rabbit",
      position: 20.0,
    ),
    PlayingItem(
      id: '3',
      url: "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8",
      title: "BigBop",
    ),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('插件示例应用'),
      ),
      body: SafeArea(
        child: SingleChildScrollView(
          child: Column(
            children: [
              // 视频播放器
              SizedBox(
                height: 300,
                child: VideoPlayerOnePlusDream(
                  items,
                  controller: controller,
                  enableMarquee: true,
                  enablePreventScreenCapture: true,
                  marqueeText: "Marquee",
                  autoPlay: true,
                  onPlaying: (event) {
                    print("状态: ${event.status} 当前位置: ${event.currentPosition}");
                    print("正在播放: ${event.item.url}");
                  },
                  onUrlRequested: (url) {
                    print("Flutter 请求的 URL: $url");
                  },
                ),
              ),
              // 按钮
              ElevatedButton(
                onPressed: () async {
                  controller.togglePause(true);
                  await Navigator.push(
                    context,
                    MaterialPageRoute(builder: (_) => CacheRoute()),
                  );
                  await controller.togglePause(false);
                },
                child: const Text("转到缓存页面"),
              ),
              ElevatedButton(
                onPressed: () async {
                  controller.togglePause(true);
                  print("暂停以导航到新页面");
                  await Navigator.push(
                    context,
                    MaterialPageRoute(builder: (_) => FirstRoute()),
                  );
                  print("返回并重新播放");
                  await controller.togglePause(false);
                },
                child: const Text("转到新页面"),
              ),
              ElevatedButton(
                onPressed: () {
                  controller.toggleFullScreen(ToggleFullScreenParam(isFullScreen: true));
                },
                child: const Text("打开全屏"),
              ),
              ElevatedButton(
                onPressed: () {
                  VideoPlayerGlobal().clearAllCache();
                },
                child: const Text("清除所有缓存"),
              )
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter中,video_player_oneplusdream 并不是一个广泛认知的官方或主流的视频播放插件。通常情况下,开发者会使用 video_player 插件来处理视频播放功能。不过,如果你确实需要使用一个特定名为 video_player_oneplusdream 的插件(可能是某个定制或特殊用途的插件),以下是如何在Flutter项目中集成和使用一个视频播放插件的通用步骤和代码示例。请注意,由于 video_player_oneplusdream 不是官方插件,你需要确保你拥有正确的插件包名和已经将其添加到你的 pubspec.yaml 文件中。

假设 video_player_oneplusdream 插件的使用方式与 video_player 类似(因为大多数视频插件遵循相似的API设计),以下是一个基本的集成和使用示例:

  1. pubspec.yaml 中添加依赖

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

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

  2. 导入插件并创建视频播放器

    import 'package:flutter/material.dart';
    import 'package:video_player_oneplusdream/video_player_oneplusdream.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> {
      VideoPlayerController? _controller;
    
      @override
      void initState() {
        super.initState();
        // 初始化视频控制器
        _controller = VideoPlayerController.network(
          'https://www.example.com/video.mp4',  // 替换为你的视频URL
        )
        ..initialize().then((_) {
          // 确保在UI更新之前视频已经初始化完成
          setState(() {});
        });
      }
    
      @override
      void dispose() {
        _controller?.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Video Player'),
          ),
          body: Center(
            child: _controller?.value.isInitialized
                ? AspectRatio(
                    aspectRatio: _controller!.value.aspectRatio,
                    child: VideoPlayer(_controller!),
                  )
                : Container(
                    child: CircularProgressIndicator(),
                  ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: () {
              setState(() {
                _controller?.value.isPlaying
                    ? _controller!.pause()
                    : _controller!.play();
              });
            },
            child: Icon(
              _controller?.value.isPlaying ?? false
                  ? Icons.pause
                  : Icons.play_arrow,
            ),
          ),
        );
      }
    }
    

请注意,上述代码是一个通用的视频播放器实现示例,它假设 video_player_oneplusdream 插件提供了类似的 VideoPlayerControllerVideoPlayer 小部件。如果 video_player_oneplusdream 插件的API与 video_player 插件有很大不同,你需要查阅该插件的具体文档来了解如何正确初始化和使用它。

由于 video_player_oneplusdream 不是标准插件,如果在实际使用中遇到问题,建议查阅该插件的官方文档或仓库以获取更多信息和支持。

回到顶部