Flutter视频播放插件vlc_flutter_compat的使用
Flutter视频播放插件vlc_flutter_compat的使用
这是libvlc的Flutter包装插件。详情请访问其网站。
使用说明
依赖项
在pubspec.yaml
文件中添加依赖项:
dependencies:
vlc_flutter: ^0.0.2
导入包
在你的Dart文件中导入以下包:
import 'package:vlc_flutter/vlcplayer.dart';
创建控制器
创建一个VLCController
实例:
// "-vvv"选项用于详细日志记录,便于调试
VLCController _controller = VLCController(args: ["-vvv"]);
创建播放视图
创建一个用于播放的视图:
AspectRatio(
aspectRatio: 16 / 9,
child: VLCVideoWidget(
controller: _controller,
),
)
播放网络视频
根据uri
播放视频:
ElevatedButton(
child: Text("播放"),
onPressed: () async {
await _controller.setDataSource(uri: "rtmp://58.200.131.2:1935/livetv/natlgeo");
_controller.play();
},
)
你也可以直接使用play
方法:
_controller.play(uri: "rtmp://58.200.131.2:1935/livetv/natlgeo");
播放本地资源
播放本地资源:
_controller.play(path: "/sdcard/test/test.mp4");
监听播放状态
监听播放器的状态变化:
_controller.onPlayerState.listen((event) {
debugPrint("=*= $event =*=");
});
监听播放事件
监听播放事件:
_controller.onEvent.listen((event) {
if (event.type == EventType.PositionChanged) {
debugPrint("==[${event.positionChanged}]==");
}
});
添加字幕
加载本地字幕并设置显示位置:
// 加载本地字幕
await _controller.addSlave(path: "/sdcard/test/Test.srt");
// 设置字幕显示位置
_controller.setVideoTitleDisplay(Position.Bottom, 1000);
录制视频
指定目录并开始录制:
// 指定目录并开始录制
_controller.startRecord("/sdcard/test/");
// 停止录制
_controller.stopRecord();
添加网络权限
为了播放网络资源,不要忘记在AndroidManifest.xml
中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
如果需要录制视频,可能还需要以下权限(这些是Android 6.0及以上版本的危险权限,因此你可能还需要flutter_easy_permission
插件):
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
示例代码
以下是一个完整的示例代码:
class _MyAppState extends State<MyApp> {
final VLCController _controller = VLCController(args: [
"-vvv",
'--network-caching=300',
'--live-caching=300',
'--clock-jitter=10',
'--clock-synchro=10',
'--avcodec-hurry-up',
'--avcodec-fast',
'--avcodec-dr',
'--rtsp-mcast',
'--rtsp-tcp',
]);
[@override](/user/override)
void initState() {
super.initState();
_controller.onEvent.listen((event) {
if (event.type == EventType.TimeChanged) {
debugPrint("==[${event.timeChanged}]==");
}
});
_controller.onPlayerState.listen((state) {
debugPrint("--[$state]--");
});
load();
}
[@override](/user/override)
void dispose() {
_controller.dispose();
super.dispose();
}
load() async {
await _controller.setDataSource(uri: "rtsp://192.168.68.103:1935");
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('VLCPlayer插件示例'),
),
body: Column(
mainAxisSize: MainAxisSize.min,
children: [
AspectRatio(
aspectRatio: 16 / 9,
child: VLCVideoWidget(
controller: _controller,
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
TextButton(
child: const Text("播放"),
onPressed: () async {
_controller.play();
},
),
TextButton(
child: const Text("暂停"),
onPressed: () {
_controller.pause();
},
),
TextButton(
child: const Text("停止"),
onPressed: () {
_controller.stop();
},
),
TextButton(
child: const Text("开始录制"),
onPressed: () {
_controller.startRecord("/sdcard/test");
},
),
TextButton(
child: const Text("停止录制"),
onPressed: () {
_controller.stopRecord();
},
),
],
),
],
),
),
);
}
}
更多关于Flutter视频播放插件vlc_flutter_compat的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter视频播放插件vlc_flutter_compat的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
vlc_flutter_compat
是一个基于 VLC 引擎的 Flutter 插件,用于在 Flutter 应用中播放视频。它提供了丰富的功能,包括支持多种视频格式、网络流媒体播放、字幕、音轨切换等。以下是如何在 Flutter 项目中使用 vlc_flutter_compat
插件的详细步骤。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 vlc_flutter_compat
插件的依赖:
dependencies:
flutter:
sdk: flutter
vlc_flutter_compat: ^0.0.1 # 请检查最新版本
然后运行 flutter pub get
来获取依赖。
2. 配置 Android 和 iOS 项目
Android 配置
在 android/app/build.gradle
文件中,确保 minSdkVersion
至少为 21:
defaultConfig {
minSdkVersion 21
targetSdkVersion 30
...
}
iOS 配置
在 ios/Podfile
文件中,确保 platform
设置为 10.0
或更高版本:
platform :ios, '10.0'
然后运行 flutter pub get
和 flutter build ios
来确保所有依赖项都已正确配置。
3. 使用 vlc_flutter_compat
播放视频
以下是一个简单的示例,展示如何在 Flutter 应用中使用 vlc_flutter_compat
播放视频。
import 'package:flutter/material.dart';
import 'package:vlc_flutter_compat/vlc_player_controller.dart';
import 'package:vlc_flutter_compat/vlc_player.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'VLC Flutter Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: VideoPlayerScreen(),
);
}
}
class VideoPlayerScreen extends StatefulWidget {
[@override](/user/override)
_VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}
class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
late VlcPlayerController _vlcPlayerController;
[@override](/user/override)
void initState() {
super.initState();
_vlcPlayerController = VlcPlayerController.network(
'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4',
autoPlay: true,
options: VlcPlayerOptions(),
);
}
[@override](/user/override)
void dispose() {
_vlcPlayerController.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('VLC Flutter Player'),
),
body: Center(
child: VlcPlayer(
controller: _vlcPlayerController,
aspectRatio: 16 / 9,
placeholder: Center(child: CircularProgressIndicator()),
),
),
);
}
}