Flutter视频播放插件flutter_lykluk_vlc_player的使用

Flutter视频播放插件flutter_lykluk_vlc_player的使用

安装

iOS

如果您无法从外部源加载媒体,还应添加以下内容:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

更多详细信息或更细粒度的控制,请参阅Apple的文档。

确保在<project root>/ios/Podfile文件中的以下行未被注释:

platform :ios, '9.0'

注意:虽然Flutter的video_player在iOS模拟器上不工作,但本插件(flutter_vlc_player)在iOS模拟器上完全可用。

要启用vlc投射功能以支持外部显示(如Chromecast),还需要添加以下内容:

<key>NSLocalNetworkUsageDescription</key>
<string>用于搜索Chromecast设备</string>
<key>NSBonjourServices</key>
<array>
  <string>_googlecast._tcp</string>
</array>

Android

为了从互联网加载媒体/字幕,您的应用需要INTERNET权限。这可以通过确保<project root>/android/app/src/main/AndroidManifest.xml文件包含android.permission.INTERNETuses-permission声明来实现:

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

注意:如果出现“Cleartext HTTP流量到*不受允许”的错误,您需要在AndroidManifest.xml文件中添加android:usesClearTextTraffic="true"标志,或者定义一个新的“网络安全配置”文件。更多信息可查看Android安全配置文档

为了从内部设备存储加载媒体/字幕,您应该添加以下权限:

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

在某些情况下,您还需要在AndroidManifest.xml文件的应用程序标签中添加android:requestLegacyExternalStorage="true"标志。

之后,您可以访问媒体/字幕文件:

"/storage/emulated/0/{FilePath}"
"/sdcard/{FilePath}"
Android构建配置
  1. android/app/build.gradle文件中:
android {
    packagingOptions {
       // 解决重复库构建问题,
       // 当您的项目使用依赖于C++库的多个插件时。
        pickFirst 'lib/**/libc++_shared.so'
    }
   
   buildTypes {
      release {
         minifyEnabled true
         useProguard true
         proguardFiles getDefaultProguardFile(
                 'proguard-android-optimize.txt'),
                 'proguard-rules.pro'
      }
   }
}
  1. 创建android/app/proguard-rules.pro文件,并添加以下行:
-keep class org.videolan.libvlc.** { *; }
Android多窗口支持

要在Android应用程序中启用多窗口支持,您需要对AndroidManifest.xml进行更改,在主活动中添加android:resizeableActivity键,以及在应用程序中添加android.allow_multiple_resumed_activities元数据:

<manifest ...>
  <application ...>
    <activity ...
      android:resizeableActivity="true">
      ...
    </activity>
    ...
    <meta-data
      android:name="android.allow_multiple_resumed_activities"
      android:value="true" />
  </application>
</manifest>

快速开始

要开始使用该插件,请复制以下代码或遵循示例项目中的flutter_vlc_player/example目录:

import 'package:flutter/material.dart';
import 'package:flutter_vlc_player/vlc_player_flutter.dart';

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

class MyApp extends StatelessWidget {
  // 这个小部件是你的应用的根组件。
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  VlcPlayerController _videoPlayerController;

  Future<void> initializePlayer() async {}

  @override
  void initState() {
    super.initState();

    _videoPlayerController = VlcPlayerController.network(
      'https://media.w3.org/2010/05/sintel/trailer.mp4',
      hwAcc: HwAcc.FULL,
      autoPlay: false,
      options: VlcPlayerOptions(),
    );
  }

  @override
  void dispose() async {
    super.dispose();
    await _videoPlayerController.stopRendererScanning();
    await _videoPlayerController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body: Center(
          child: VlcPlayer(
            controller: _videoPlayerController,
            aspectRatio: 16 / 9,
            placeholder: Center(child: CircularProgressIndicator()),
          ),
        ));
  }
}

录制功能

要开始/停止视频录制,您需要调用startRecording(String saveDirectory)stopRecording()方法。通过调用停止方法,您可以从vlcPlayerController.value.recordPath获取录制文件的路径。

升级说明

版本5.0升级

要升级到版本5.0,首先您需要将现有项目迁移到Swift。

  1. 清理仓库:
    git clean -xdf
    
  2. 删除现有iOS文件夹。如果有自定义更改,请将其重命名或复制到项目外。
  3. 重新创建iOS应用:此命令仅创建具有Swift支持的iOS目录。具体可参考如何为现有项目启用Swift支持
    flutter create -i swift .
    

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

1 回复

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


flutter_lykluk_vlc_player 是一个基于 VLC 播放器的 Flutter 插件,用于在 Flutter 应用中播放视频。它支持多种视频格式和流媒体协议,提供了丰富的播放控制功能。以下是使用 flutter_lykluk_vlc_player 的基本步骤:

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 flutter_lykluk_vlc_player 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_lykluk_vlc_player: ^0.0.1 # 请使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 flutter_lykluk_vlc_player 包:

import 'package:flutter_lykluk_vlc_player/flutter_lykluk_vlc_player.dart';

3. 创建播放器实例

你可以通过 VlcPlayerController 来控制视频播放。首先,创建一个 VlcPlayerController 实例:

VlcPlayerController _controller;

@override
void initState() {
  super.initState();
  _controller = VlcPlayerController(
    // 你可以在这里指定视频的URL或文件路径
    url: 'https://www.example.com/video.mp4',
    // 其他可选参数
    autoPlay: true,
    looping: false,
  );
}

4. 显示视频播放器

使用 VlcPlayer widget 来显示视频播放器:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Video Player'),
    ),
    body: Center(
      child: VlcPlayer(
        controller: _controller,
        aspectRatio: 16 / 9, // 设置视频的宽高比
      ),
    ),
  );
}

5. 控制视频播放

你可以通过 VlcPlayerController 来控制视频的播放、暂停、停止等操作。例如:

FlatButton(
  onPressed: () {
    _controller.play();
  },
  child: Text('Play'),
),

FlatButton(
  onPressed: () {
    _controller.pause();
  },
  child: Text('Pause'),
),

FlatButton(
  onPressed: () {
    _controller.stop();
  },
  child: Text('Stop'),
),

6. 释放资源

在页面销毁时,记得释放播放器资源:

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

7. 处理播放事件

你可以监听播放器的事件,例如播放完成、错误等:

_controller.addListener(() {
  if (_controller.value.isCompleted) {
    // 视频播放完成
    print('Video playback completed');
  }
});
回到顶部