Flutter视频播放插件vlc_flutter的使用
Flutter视频播放插件vlc_flutter的使用
这是libvlc的Flutter包装插件。更多详细信息请访问他们的网站。
Todo:
- ✅ Android
- ✅ iOS
使用方法
在pubspec.yaml
文件中添加依赖:
dependencies:
vlc_flutter: ^0.0.2
导入包:
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> {
VLCController _controller = VLCController();
[@override](/user/override)
void initState() {
super.initState();
_controller.onEvent.listen((event) {
if (event.type == EventType.PositionChanged) {
debugPrint("==[${event.positionChanged}]==");
}
});
}
[@override](/user/override)
void dispose() {
_controller.dispose();
super.dispose();
}
[@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: [
ElevatedButton(
child: Text("播放"),
onPressed: () async {
await _controller.setDataSource(
uri: "rtmp://58.200.131.2:1935/livetv/natlgeo");
_controller.play();
},
),
ElevatedButton(
child: Text("暂停"),
onPressed: () {
_controller.pause();
},
),
ElevatedButton(
child: Text("停止"),
onPressed: () {
_controller.stop();
},
),
ElevatedButton(
child: Text("开始录制"),
onPressed: () {
_controller.startRecord("/sdcard/test/");
},
),
ElevatedButton(
child: Text("停止录制"),
onPressed: () {
_controller.stopRecord();
},
),
],
),
],
),
),
);
}
}
更多关于Flutter视频播放插件vlc_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter视频播放插件vlc_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用vlc_flutter
插件来播放视频的示例代码。vlc_flutter
是一个强大的插件,它基于VLC媒体播放器库,可以在Flutter应用中实现跨平台的视频播放功能。
首先,确保你已经在pubspec.yaml
文件中添加了vlc_flutter
依赖:
dependencies:
flutter:
sdk: flutter
vlc_flutter: ^4.0.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,我们创建一个简单的Flutter应用来演示如何使用vlc_flutter
播放视频。
主应用代码 (main.dart)
import 'package:flutter/material.dart';
import 'package:vlc_flutter/vlc_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'VLC Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: VideoPlayerScreen(),
);
}
}
class VideoPlayerScreen extends StatefulWidget {
@override
_VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}
class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
final VlcPlayerController _controller = VlcPlayerController.network(
'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_20mb.mp4',
);
@override
void initState() {
super.initState();
_controller.initialize().then((_) {
// Optional: Set the video to start playing automatically.
setState(() {
_controller.play();
});
});
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('VLC Flutter Video Player'),
),
body: Center(
child: _controller.value.isInitialized
? AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VlcPlayer(
controller: _controller,
),
)
: Container(
child: CircularProgressIndicator(),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
if (_controller.value.isPlaying) {
_controller.pause();
} else {
_controller.play();
}
});
},
tooltip: 'Play/Pause',
child: Icon(
_controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
),
),
);
}
}
解释
-
依赖添加:在
pubspec.yaml
中添加vlc_flutter
依赖。 -
VlcPlayerController:创建一个
VlcPlayerController
实例,用于控制视频的播放。在这个例子中,我们使用VlcPlayerController.network
来加载一个网络视频。你也可以使用VlcPlayerController.file
来加载本地视频文件。 -
初始化:在
initState
方法中,调用_controller.initialize()
来初始化VLC播放器。初始化完成后,可以选择自动播放视频。 -
UI构建:使用
AspectRatio
和VlcPlayer
组件来显示视频。在视频未初始化完成时,显示一个CircularProgressIndicator
作为加载指示器。 -
播放/暂停控制:使用
FloatingActionButton
来控制视频的播放和暂停。根据_controller.value.isPlaying
的状态来决定是播放还是暂停。 -
资源释放:在
dispose
方法中释放VlcPlayerController
资源,以避免内存泄漏。
这个示例展示了如何使用vlc_flutter
插件在Flutter应用中播放视频,并提供了基本的播放/暂停控制。你可以根据需要进一步扩展这个示例,比如添加音量控制、进度条、全屏模式等功能。