Flutter视频播放器插件fijkplayer_ijkfix的使用
Flutter视频播放器插件fijkplayer_ijkfix的使用
版本说明
请使用0.0.11或者往上的版本,0.0.9也可以。
- 0.0.11支持了flutter stable 3.10.6。
- 0.0.9支持了iOS下的动态更换播放源url的功能。
此项目是依赖于fijkplayer的插件的衍生产物,修复了fijkplayer的不支持wav,s48等音频格式等问题。
项目介绍
fijkplayer_ijkfix -> fijkplayer -> ijkplayer(befovy:https://github.com/befovy/ijkplayer.git) -> ijkplayer
-> 代表依赖于
若想自己去编译ijkplayer(befovy),需要去按照他的action去编译:
https://github.com/befovy/ijkplayer/actions/runs/156246096/workflow
编译ijkplayer的流程
cd 自己喜欢的文件夹。。。
git clone https://github.com/befovy/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
修改 ios
文件夹下的 module.sh
,在里面添加自己需要新增的编解码格式
例如,如果需要支持s48音频格式:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mpeg4"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mp2*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=ac3"
再执行以下命令
bash init-ios-openssl.sh
bash init-ios.sh
cd ios
再执行以下命令
bash compile-openssl.sh all
bash compile-ffmpeg.sh all
最后在IJKMediaDemo中去查询IJKMediaPlayer.framework 的产物,丢到fijkplayer_ijkfix -> ios -> Frameworks中去
插件支持
顺便说一句:这个插件依旧支持fijkplayer_skin。
发布
-
检查包:
flutter packages pub publish --dry-run
-
指定服务器发布:
flutter packages pub publish --server=https://pub.dartlang.org
-
普通的发布:
flutter packages pub publish
完整示例代码
以下是完整的示例代码,用于创建一个简单的视频播放器页面:
import 'package:flutter/material.dart';
import 'fijk_video_page.dart'; // 假设这是你的视频播放组件
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
Widget build(BuildContext context) {
// FijkLog.setLevel(FijkLogLevel.Debug);
return MaterialApp(
theme: ThemeData(
primaryColor: Color(0xFFffd54f),
primaryColorDark: Color(0xFFffc107),
primaryColorLight: Color(0xFFffecb3),
dividerColor: Color(0xFFBDBDBD),
),
home: FijkVideoPage(), // 使用FijkVideoPage作为主页
);
}
}
更多关于Flutter视频播放器插件fijkplayer_ijkfix的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter视频播放器插件fijkplayer_ijkfix的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
fijkplayer_ijkfix
是一个基于 ijkplayer
的 Flutter 视频播放器插件,支持 Android 和 iOS 平台。它提供了丰富的功能和自定义选项,适用于需要复杂视频播放功能的应用程序。
以下是使用 fijkplayer_ijkfix
的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 fijkplayer_ijkfix
依赖:
dependencies:
flutter:
sdk: flutter
fijkplayer_ijkfix: ^0.10.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在需要使用播放器的 Dart 文件中导入 fijkplayer_ijkfix
包:
import 'package:fijkplayer_ijkfix/fijkplayer_ijkfix.dart';
3. 初始化播放器
在 initState
方法中初始化播放器,并在 dispose
方法中释放资源:
class VideoPlayerScreen extends StatefulWidget {
@override
_VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}
class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
final FijkPlayer player = FijkPlayer();
@override
void initState() {
super.initState();
// 设置播放源
player.setDataSource("https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4", autoPlay: true);
}
@override
void dispose() {
super.dispose();
player.release();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Video Player"),
),
body: Center(
child: FijkView(
player: player,
),
),
);
}
}
4. 播放控制
你可以通过 player
对象来控制视频的播放、暂停、快进、快退等操作。例如:
player.start(); // 开始播放
player.pause(); // 暂停播放
player.seekTo(Duration(seconds: 30)); // 跳转到指定时间
5. 自定义UI
FijkView
提供了一个默认的播放器界面,但你可以通过自定义 UI 来满足特定需求。例如,你可以使用 FijkPlayer
的状态和事件来构建自己的播放控制界面。
FijkView(
player: player,
panelBuilder: fijkPanel2Builder(
// 自定义面板
(FijkPlayer player, BuildContext context, Size viewSize, Rect texturePos) {
return CustomControlPanel(player, context, viewSize, texturePos);
},
),
)
6. 处理播放器事件
你可以监听播放器的事件来处理播放状态、错误等信息。例如:
player.addListener(() {
if (player.state == FijkState.completed) {
// 播放完成
}
});
7. 配置ijkplayer
fijkplayer_ijkfix
允许你配置 ijkplayer
的选项。你可以在初始化播放器时设置这些选项:
player.setOption(FijkOption.hostCategory, "request-screen-on", 1);
player.setOption(FijkOption.playerCategory, "mediacodec", 1);
8. 处理全屏播放
FijkView
支持全屏播放。你可以通过监听全屏事件来处理全屏模式下的 UI 变化。
player.onFullScreenChange.listen((bool isFullScreen) {
if (isFullScreen) {
// 进入全屏模式
} else {
// 退出全屏模式
}
});
9. 处理错误
你可以通过监听错误事件来处理播放过程中的错误:
player.onError.listen((event) {
// 处理错误
});