在 Flutter 项目中实现音视频播放,开发者过去主要依赖如 video_player
、just_audio
等第三方库,但这些库或多或少存在一些局限性,比如平台兼容性差、定制能力不足、播放格式有限等问题。
而 media_kit
是近年崛起的一款全平台音视频播放解决方案,由 Dart 层驱动,底层基于强大的 FFmpeg 和 libmpv,提供了更高性能、更高可定制性、更一致的跨平台播放体验。
一、什么是 media_kit
?
media_kit
是一套跨平台的音视频播放解决方案,支持以下平台:
- ✅ Android
- ✅ iOS
- ✅ macOS
- ✅ Windows
- ✅ Linux
- ✅ Web(通过
media_kit_libs_html
)
它具有以下特性:
- 🎬 支持播放本地和网络音视频文件(mp4、mp3、mkv、flv、HLS、DASH 等)
- 🔁 多平台统一 API 接口
- 🎨 可自定义视频渲染控件
- ⚡ 支持硬件加速、字幕、音轨、画中画、后台播放等高级功能
- 🧠 完善的缓存机制和播放控制
- 🧩 完整 Dart 实现,逻辑清晰,易于调试和扩展
二、依赖添加
在项目的 pubspec.yaml
中加入以下依赖:
dependencies:
media_kit: ^1.1.8
media_kit_video: ^1.1.8
# Android / iOS 原生平台预编译库
media_kit_libs_android_video: ^1.1.8
media_kit_libs_ios_video: ^1.1.8
# 可选:Web 平台支持
media_kit_libs_html: ^1.1.8
然后运行:
flutter pub get
三、快速上手示例
1. 初始化播放器
import 'package:media_kit/media_kit.dart';
import 'package:media_kit_video/media_kit_video.dart';
final player = Player();
final videoController = VideoController(player);
// 播放一个网络视频
player.open(Media('https://www.example.com/sample.mp4'));
2. 视频渲染控件
import 'package:media_kit_video/media_kit_video.dart';
Video(
controller: videoController,
fit: BoxFit.contain,
)
3. 播放控制
player.play(); // 播放
player.pause(); // 暂停
player.seek(Duration(seconds: 30)); // 跳转
player.setVolume(0.5); // 设置音量
player.setRate(1.25); // 设置播放速度
4. 播放状态监听
player.stream.position.listen((position) {
print('当前播放位置: $position');
});
player.stream.completed.listen((completed) {
if (completed) {
print('播放完成');
}
});
四、常用功能扩展
✅ 播放本地文件
player.open(Media('file:///storage/emulated/0/Movies/sample.mp4'));
✅ 切换清晰度或播放源
await player.open(Media('https://example.com/720p.mp4'), play: false);
await player.open(Media('https://example.com/1080p.mp4'), play: true);
✅ 设置硬件加速和字幕
player.setHardwareAcceleration(true);
player.setSubtitleTrack(1); // 选择字幕轨道
五、使用场景拓展
🎥 短视频竖屏上下滑(抖音风格)
结合 PageView.builder 和 media_kit 实现滑动切换并播放视频:
• 多个 Player 实例缓存控制
• 预加载下一页视频
• 页面切换自动播放/暂停
🧠 视频预加载与缓存优化
可结合:
• flutter_cache_manager
• CDN 视频分片预加载
• 暂停/恢复缓存策略
让播放更加丝滑流畅。
🎨 自定义控制 UI
通过 Stack 组合自定义:
• 播放/暂停按钮
• 自定义进度条
• 弹幕层
• 全屏切换/倍速切换面板
六、注意事项
✅ Android 权限配置
AndroidManifest.xml 中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
✅ iOS 配置
Info.plist 添加:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
并执行:
cd ios
pod install
七、总结
media_kit 是 Flutter 音视频播放领域的新宠,凭借其:
• 跨平台一致性
• 播放格式丰富
• 自定义渲染能力
• 高性能播放体验
它非常适合用于:
• 视频播放器 App
• 音乐播放器
• 课程教育系统
• 短视频平台
📚 参考资源
• GitHub 项目地址:https://github.com/media-kit/media-kit
• 官方文档说明:https://pub.dev/packages/media_kit
• 示例项目地址:示例 Demo
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、评论支持我 🙌
后续我还会分享更多 Flutter 播放器相关进阶技巧,比如缓存优化、自定义控制面板、竖向视频滑动播放实现等,敬请期待!