Flutter视频播放插件flutter_vlc_player_vconnex的使用
Flutter视频播放插件flutter_vlc_player_vconnex的使用
VLC Player Plugin
一个基于VLC的Flutter视频播放器插件,支持iOS和Android。
安装
iOS
如果无法加载来自外部源的媒体,您应该添加以下内容:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
如需更多信息或更细粒度地控制您的App Transport Security(ATS)限制,请阅读 Apple官方文档。
确保以下行在 <项目根目录>/ios/Podfile
中已取消注释:
platform :ios, '9.0'
注意:虽然Flutter的
video_player
在iOS模拟器上不可用,但此插件 (flutter_vlc_player
) 在iOS模拟器上完全可用。
若要启用vlc投射功能以支持外部显示(如Chromecast),还应添加以下内容:
<key>NSLocalNetworkUsageDescription</key>
<string>Used to search for chromecast devices</string>
<key>NSBonjourServices</key>
<array>
<string>_googlecast._tcp</string>
</array>
Android
为了从互联网加载媒体/字幕,您的应用需要 INTERNET
权限。
这可以通过确保 <项目根目录>/android/app/src/main/AndroidManifest.xml
文件包含对 <uses-permission>
的声明来实现:
<uses-permission android:name="android.permission.INTERNET" />
由于Flutter默认包含此权限,因此该权限很可能已经声明在文件中。
如果您遇到“Cleartext HTTP traffic to * is not permitted”,则需要在 AndroidManifest.xml
文件中添加 android:usesClearTextTraffic="true"
标志,或者定义一个新的“网络安全配置”文件。有关更多信息,请参阅 https://developer.android.com/training/articles/security-config。
为了从内部设备存储加载媒体/字幕,您应添加以下权限:
<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构建配置
- 在
<项目根目录>/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'
}
}
}
- 创建
<项目根目录>/android/app/proguard-rules.pro
,并添加以下内容:
-keep class org.videolan.libvlc.** { *; }
Android多窗口支持
要在Android应用程序中启用多窗口支持,您需要修改 <项目根目录>/android/app/src/main/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。
-
清理仓库:
git clean -xdf
-
删除现有的iOS文件夹。如果对iOS应用进行了自定义更改,请将其重命名或复制到项目外。
-
重新创建iOS应用:
flutter create -i swift .
更多关于Flutter视频播放插件flutter_vlc_player_vconnex的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter视频播放插件flutter_vlc_player_vconnex的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_vlc_player_vconnex
是一个基于 libVLC
的 Flutter 视频播放插件,支持播放本地和网络视频流。它提供了强大的视频播放功能,包括支持多种视频格式、字幕、音频轨道切换、播放速度控制等。
以下是如何在 Flutter 项目中使用 flutter_vlc_player_vconnex
的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 flutter_vlc_player_vconnex
依赖:
dependencies:
flutter:
sdk: flutter
flutter_vlc_player_vconnex: ^latest_version
然后运行 flutter pub get
来获取依赖。
2. 导入包
在需要使用视频播放器的 Dart 文件中导入包:
import 'package:flutter_vlc_player_vconnex/flutter_vlc_player.dart';
3. 创建 VlcPlayerController
VlcPlayerController
是控制视频播放的核心类。你可以通过它来加载视频、控制播放、暂停、调整音量等。
VlcPlayerController _videoPlayerController;
@override
void initState() {
super.initState();
_videoPlayerController = VlcPlayerController.network(
'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4',
autoPlay: true,
options: VlcPlayerOptions(),
);
}
@override
void dispose() {
_videoPlayerController.dispose();
super.dispose();
}
4. 使用 VlcPlayer 组件
在 UI 中使用 VlcPlayer
组件来显示视频:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('VLC Player Example'),
),
body: Center(
child: VlcPlayer(
controller: _videoPlayerController,
aspectRatio: 16 / 9,
placeholder: Center(child: CircularProgressIndicator()),
),
),
);
}
5. 控制视频播放
你可以使用 VlcPlayerController
来控制视频的播放、暂停、跳转等操作。例如:
FloatingActionButton(
onPressed: () {
if (_videoPlayerController.value.isPlaying) {
_videoPlayerController.pause();
} else {
_videoPlayerController.play();
}
},
child: Icon(
_videoPlayerController.value.isPlaying ? Icons.pause : Icons.play_arrow,
),
),
6. 处理播放状态
你可以监听 VlcPlayerController
的状态变化来处理播放事件:
_videoPlayerController.addListener(() {
if (_videoPlayerController.value.isPlaying) {
// 视频正在播放
} else if (_videoPlayerController.value.isEnded) {
// 视频播放结束
}
});
7. 其他功能
flutter_vlc_player_vconnex
还支持一些高级功能,如字幕、音频轨道切换、播放速度控制等。你可以通过 VlcPlayerController
提供的 API 来实现这些功能。
// 切换字幕
_videoPlayerController.setSubtitleTrack(1);
// 切换音频轨道
_videoPlayerController.setAudioTrack(1);
// 设置播放速度
_videoPlayerController.setPlaybackSpeed(1.5);
8. 处理错误
你可以通过监听 VlcPlayerController
的错误来处理播放过程中可能出现的错误:
_videoPlayerController.addListener(() {
if (_videoPlayerController.value.hasError) {
// 处理错误
print('Error: ${_videoPlayerController.value.errorMessage}');
}
});
9. 自定义选项
你可以通过 VlcPlayerOptions
来自定义播放器的一些选项,例如启用硬件加速、设置缓冲时间等:
VlcPlayerOptions options = VlcPlayerOptions(
advanced: VlcAdvancedOptions([
'--no-xlib', // 禁用 Xlib
]),
hwAcceleration: HwAcceleration.full, // 启用硬件加速
autoPlay: true, // 自动播放
);
10. 示例项目
你可以在 GitHub 上找到 flutter_vlc_player_vconnex
的示例项目,查看更多详细用法。
注意事项
flutter_vlc_player_vconnex
依赖于libVLC
,因此在使用时需要确保目标平台支持libVLC
。- 在 Android 平台上,你可能需要在
AndroidManifest.xml
中添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
- 在 iOS 平台上,确保在
Info.plist
中添加以下内容以允许网络请求:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>