Ver Fonte

更新了readme

Caijinglong há 6 anos atrás
pai
commit
33a4280f88
2 ficheiros alterados com 60 adições e 5 exclusões
  1. 50 5
      README.md
  2. 10 0
      example/lib/page/screen_shot_page.dart

+ 50 - 5
README.md

@@ -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

+ 10 - 0
example/lib/page/screen_shot_page.dart

@@ -19,9 +19,19 @@ class _ScreenShotPageState extends State<ScreenShotPage> {
   @override
   void initState() {
     super.initState();
+    mediaController.setIjkPlayerOptions(
+      [
+        TargetPlatform.android,
+        TargetPlatform.iOS,
+      ],
+      [
+        IjkOption(IjkOptionCategory.player, "mediacodec", 0),
+      ],
+    );
     mediaController.setDataSource(
         DataSource.network(
             "http://img.ksbbs.com/asset/Mon_1703/05cacb4e02f9d9e.mp4"),
+        // "rtmp://58.200.131.2:1935/livetv/hunantv"),
         autoPlay: true);
   }