|
|
@@ -22,6 +22,7 @@ android 模拟器 mac android sdk 自带的 emulator(API28 android9)可用,其
|
|
|
- [原生部分说明](#%e5%8e%9f%e7%94%9f%e9%83%a8%e5%88%86%e8%af%b4%e6%98%8e)
|
|
|
- [自定义编译和原生部分源码](#%e8%87%aa%e5%ae%9a%e4%b9%89%e7%bc%96%e8%af%91%e5%92%8c%e5%8e%9f%e7%94%9f%e9%83%a8%e5%88%86%e6%ba%90%e7%a0%81)
|
|
|
- [iOS](#ios)
|
|
|
+ - [运行慢的问题](#%e8%bf%90%e8%a1%8c%e6%85%a2%e7%9a%84%e9%97%ae%e9%a2%98)
|
|
|
- [Android](#android)
|
|
|
- [入门示例](#%e5%85%a5%e9%97%a8%e7%a4%ba%e4%be%8b)
|
|
|
- [使用](#%e4%bd%bf%e7%94%a8)
|
|
|
@@ -37,6 +38,7 @@ android 模拟器 mac android sdk 自带的 emulator(API28 android9)可用,其
|
|
|
- [IjkStatus 说明](#ijkstatus-%e8%af%b4%e6%98%8e)
|
|
|
- [自定义 Option](#%e8%87%aa%e5%ae%9a%e4%b9%89-option)
|
|
|
- [IjkOptionCategory](#ijkoptioncategory)
|
|
|
+ - [设置软解码](#%e8%ae%be%e7%bd%ae%e8%bd%af%e8%a7%a3%e7%a0%81)
|
|
|
- [释放资源](#%e9%87%8a%e6%94%be%e8%b5%84%e6%ba%90)
|
|
|
- [自定义控制器 UI](#%e8%87%aa%e5%ae%9a%e4%b9%89%e6%8e%a7%e5%88%b6%e5%99%a8-ui)
|
|
|
- [自定义纹理界面](#%e8%87%aa%e5%ae%9a%e4%b9%89%e7%ba%b9%e7%90%86%e7%95%8c%e9%9d%a2)
|
|
|
@@ -73,14 +75,20 @@ dependencies:
|
|
|
|
|
|
### iOS
|
|
|
|
|
|
-因为 iOS 部分代码的库文件比较大,为了方便管理版本, 所以创建了一个 pod 依赖托管 iOS 的 ijkplayer 库
|
|
|
-pod 库托管在 github 仓库内 https://github.com/CaiJingLong/flutter_ijkplayer_pod
|
|
|
+因为 iOS 部分代码的库文件比较大,为了方便管理版本, 所以创建了一个 pod 依赖托管 iOS 的 ijkplayer 库
|
|
|
+pod 库托管在 github 仓库内 ,因为网速原因,源码托管在 [azure](https://dev.azure.com/cjlspy/_git/flutter_ijkplayer_pod)
|
|
|
|
|
|
因为 framework 文件的大小超过了 100M,所以采用了压缩的方式储存
|
|
|
没有采用通用的 tar.gz 或 zip,而是使用 tar.xz 的方式压缩,这个压缩格式压缩率高,但是压缩和解压缩的的速度慢,综合考虑使用高压缩率的方式来快速获取源文件并解压缩
|
|
|
如果有朋友愿意提供 cdn 加速,可以联系我 😁
|
|
|
|
|
|
-iOS 的原始代码来自于 https://github.com/jadennn/flutter_ijk 中提供的 iOS 代码, 但在这基础上有了修改, 不能直接使用这个仓库的源码, 具体的源码[在这里](https://gitee.com/kikt/ijkplayer_thrid_party)
|
|
|
+iOS 的原始代码来自于 https://github.com/jadennn/flutter_ijk 中提供的 iOS 代码, 但在这基础上有了修改, 不能直接使用这个仓库的源码, 修改后的项目源码托管在[gitee](https://gitee.com/kikt/ijkplayer_thrid_party)
|
|
|
+
|
|
|
+#### 运行慢的问题
|
|
|
+
|
|
|
+最新的 0.3.3 版本的 pod 库(版本号 0.1.0)库文件托管在 [azure](https://dev.azure.com/cjlspy/_git/flutter_ijkplayer_pod), 在美西下载速度可以达到 4~5M/s 只需要 20 秒左右就可以下载完, 10 多秒解压缩, 国内则会慢很多, 下载速度 1.5M/s 左右, 所以请耐心等待
|
|
|
+
|
|
|
+0.3.2 以前的 pod 源码托管在 github, 国外下载速度能达到 5~6M/s, 国内速度则不足 100k, 所以可能需要 20 分钟, 建议没有用过这个库的人使用最新版本(0.3.3+)或使用代理
|
|
|
|
|
|
### Android
|
|
|
|
|
|
@@ -268,8 +276,12 @@ var provider = MemoryImage(uint8List);
|
|
|
Widget image = Image(image:provider);
|
|
|
```
|
|
|
|
|
|
-这个和显示中的视频不总完全一样, 这个是因为截取的是解码后的完整视频帧, 可能比当前播放的**略快 1~2 帧**.
|
|
|
-如果你不能接受这种不同步,请不要使用这个功能,或提交可行的 PR
|
|
|
+但是有 2 个问题:
|
|
|
+
|
|
|
+1. 这个和显示中的视频不总完全一样, 这个是因为截取的是解码后的完整视频帧, 可能比当前播放的**略快 1~2 帧**. 如果你不能接受这种不同步,请不要使用这个功能,或提交可行的 PR
|
|
|
+2. 硬解的情况下不支持截图, 因为只有软解码才有视频帧(这个问题我会在后面尝试解决, 但不保证实现时间)
|
|
|
+
|
|
|
+**在设置播放资源前[设置软解码](#%e8%ae%be%e7%bd%ae%e8%bd%af%e8%a7%a3%e7%a0%81)**
|
|
|
|
|
|
#### 资源监听
|
|
|
|
|
|
@@ -355,8 +367,12 @@ void initIjkController() async {
|
|
|
|
|
|
第二个参数是一个`Set<IjkOption>`,代表了 Option 的集合,因为 category 和 key 均相同的情况下会覆盖,所以这里使用了 set
|
|
|
|
|
|
+与`setIjkPlayerOptions`对应的,还有一个`addIjkPlayerOptions`方法,区别在于 set 是会清空以前所有的配置选项, add 是添加, 只覆盖 category 和 key 均相同的配置选项
|
|
|
+
|
|
|
##### IjkOptionCategory
|
|
|
|
|
|
+含义请查看 bilibili/ijkplayer 的说明或自行搜索
|
|
|
+
|
|
|
| name |
|
|
|
| ------ |
|
|
|
| format |
|
|
|
@@ -364,6 +380,35 @@ void initIjkController() async {
|
|
|
| sws |
|
|
|
| player |
|
|
|
|
|
|
+##### 设置软解码
|
|
|
+
|
|
|
+android 软解码的开启方式:
|
|
|
+通过设置分类为 player, key 为 mediacodec, 值为 0
|
|
|
+
|
|
|
+```dart
|
|
|
+mediaController.setIjkPlayerOptions(
|
|
|
+ [
|
|
|
+ TargetPlatform.android,
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ IjkOption(IjkOptionCategory.player, "mediacodec", 0),
|
|
|
+ ],
|
|
|
+);
|
|
|
+```
|
|
|
+
|
|
|
+ios 对应的 key 则是 videotoolbox
|
|
|
+
|
|
|
+```dart
|
|
|
+mediaController.setIjkPlayerOptions(
|
|
|
+ [
|
|
|
+ TargetPlatform.ios,
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ IjkOption(IjkOptionCategory.player, "videotoolbox", 0),
|
|
|
+ ],
|
|
|
+);
|
|
|
+```
|
|
|
+
|
|
|
#### 释放资源
|
|
|
|
|
|
```dart
|