Flutter VLC 播放器插件
Flutter video_player 的 VLC 驱动的替代方案,支持 iOS 和 Android。


安装
iOS
如果您无法查看从外部源加载的媒体,您还应该添加以下内容
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
有关更多信息,或要更精细地控制您的应用传输安全(ATS)限制,您应该
阅读 Apple 的文档.
确保 <project root>/ios/Podfile 中的以下行已取消注释
platform :ios, '9.0'
注意:虽然 Flutter 的
video_player在 iOS 模拟器上无法运行,但此包(flutter_vlc_player)在 iOS 模拟器上可以
完全运行。
要为外部显示器(Chromecast)启用 VLC 投射功能,您还应该添加以下内容
<key>NSLocalNetworkUsageDescription</key>
<string>Used to search for chromecast devices</string>
<key>NSBonjourServices</key>
<array>
<string>_googlecast._tcp</string>
</array>
Android
要从互联网源加载媒体/字幕,您的应用程序将需要 INTERNET 权限。
这是通过确保您的 <project root>/android/app/src/main/AndroidManifest.xml 文件包含一个 uses-permission
声明 android.permission.INTERNET
<uses-permission android:name="android.permission.INTERNET" />
由于 Flutter 默认包含此权限,因此该权限很可能已在该文件中声明。
请注意,如果您收到“Cleartext HTTP 流量到 * 是不允许的”
您需要在 AndroidManifest.xml 文件中添加 android:usesCleartextTraffic="true" 标志,或定义一个新的“网络安全配置”文件。有关更多信息,请查看 https://developer.android.com.cn/training/articles/security-config
为了从内部设备存储加载媒体/字幕,您应该按以下方式放置存储权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在某些情况下,您还需要将 android:requestLegacyExternalStorage="true" 标志添加到 AndroidManifest.xml 文件中的 Application 标签,以避免访问被拒绝错误。没有此标志,Android 10 应用无法访问存储。 参考
之后,您可以通过以下方式访问媒体/字幕文件
"/storage/emulated/0/{FilePath}"
"/sdcard/{FilePath}"
Android 构建配置
- 在
android/app/build.gradle中
android {
packagingOptions {
// Fixes duplicate libraries build issue,
// when your project uses more than one plugin that depend on C++ libs.
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.** { *; }
快速入门
要开始使用该插件,请复制此代码或遵循 'flutter_vlc_player/example' 中的示例项目
import 'package:flutter/material.dart';
import 'package:flutter_vlc_player/flutter_vlc_player.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@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;
@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()),
),
),
);
}
}
升级说明
版本 5.0 现有应用升级
要升级到 5.0 版本,您首先需要将现有项目迁移到 Swift。
-
清理仓库
git clean -xdf -
删除 Flutter 项目根目录中现有的 ios 文件夹。如果您对 iOS 应用进行了一些自定义更改 - 请重命名它或将其复制到项目之外。
-
重新创建 iOS 应用:此命令将仅创建支持 Swift 的 ios 目录。请参阅 https://stackoverflow.com/questions/52244346/how-to-enable-swift-support-for-existing-project-in-flutter
flutter create -i swift . -
请务必根据 flutter 工具显示的警告更新项目。(更新 Info.plist、Podfile)。
如果您对 iOS 应用进行了某些更改,请使用上述方法重新创建应用,并将已更改的文件复制进去。
请务必在之后遵循以上说明