omni_player 0.1.18 copy "omni_player: ^0.1.18" to clipboard
omni_player: ^0.1.18 copied to clipboard

Flutter媒体播放器插件,在Android/iOS上支持视频和音频播放和后台播放。支持MKV、MP4、HLS等.

0.1.18 #

  • 删除残留的旧 IJKPlayer 引擎文件(OmniIJKPlayerEngine.swift

0.1.17 #

重大变更

  • iOS:底层播放引擎从 MobileVLCKit 替换为 iOS 原生 AVPlayer
    • 修复暂停→seek→播放 后 seek 位置不准确(回落到关键帧)的问题
    • 修复暂停→seek→播放 后残留 seek 前尾音的问题
    • seek 精度大幅提升,toleranceBefore/After: .zero 精确到帧,暂停态和播放态行为一致
    • 移除 BIJKPlayer / FFmpeg 依赖,ipa 包体显著减小
    • 支持后台音频播放(进后台自动断开 AVPlayerLayer,回前台自动恢复视频渲染)

注意

  • iOS 不再支持 MKV、AVI、RMVB、FLV、RTMP 等 AVPlayer 不原生支持的格式,主流格式(MP4、MOV、MP3、AAC、HLS 等)不受影响

0.1.16 #

调试

  • iOS:增加调试日志

0.1.15 #

BUG修复

  • iOS:真机 iOS 14~16 上视频 open 改为连续两轮 main.asyncattach(与 iOS 17+ 单轮区分),降低 UiKitView 晚于 open 创建导致无 drawable 起播、长期 buffering 与 vout 卡死后换片仍黑屏的概率
  • iOS:新增 scheduleDrawableRecoverNudgeIfNeeded,在 opening/buffering/playing 下延迟 pause/play(旧逻辑仅在 isPlaying 时 nudge,无法覆盖 buffering);setVideoDrawable 晚到场景亦调度,便于 PlatformView 创建晚于 attach 时恢复出画

调试

  • iOS:新增 OmniPlayerLifecycleLog(控制台过滤 [OmniPlayer][lifecycle]),记录 open/attach/setVideoDrawable/refreshDrawable/nudge/VLC 状态等;Debug 默认开启,Release 需在 Scheme → Environment 设置 OMNI_PLAYER_LIFECYCLE_LOG = 1

0.1.14 #

BUG修复

  • iOS:修复IOS 14可能出现的闪退问题

0.1.13 #

BUG修复

  • iOS:修复IOS 16可能出现的黑屏、持续加载中问题

0.1.12 #

优化

  • Android / iOS:修复暂停状态 seek 后点击播放,进度短暂闪回 seek 前位置的问题
    • 根本原因:VLC / ExoPlayer 的 seek 在暂停状态下是异步的,调用 play() 后播放器内部 seek 尚未完成,第一次进度回调仍返回 seek 前的旧位置
    • 修复方案:seek 时记录旧位置作为「指纹」,进度轮询检测到返回值与旧位置完全吻合时,判定为 stale 数据并以 seek 目标值替代上报;旧位置消失后自动还原正常逻辑,无任何魔法数字

0.1.9 #

优化

  • Android / iOS:新增 seek 进度地板机制,解决精确 seek 后帧边界对齐导致进度短暂回跳问题
    • seek 后记录目标时间为进度地板值,若后续进度回调低于该值则保持地板值上报,超过后自动清除
    • 彻底解决字幕场景下 seek 到下一句起始时间后,播放进度短暂落在上一句范围内导致字幕闪缩的问题
    • stop()open()、播放完成时自动重置地板值,不影响正常播放流程

0.1.8 #

优化

  • Android / iOS:seek() 改为精确模式,跳转到指定时间点而非最近关键帧

0.1.7 #

Bug 修复

  • iOS:修复页面切换返回后可能短暂显示上一段画面的问题
  • Android:修复页面切换返回后可能短暂显示上一段画面的问题

0.1.6 #

新功能

  • 非循环模式下播放完成后再次调用 play(),自动从头重播当前资源,无需业务层手动调用 open() 重新打开

0.1.5 #

Bug 修复

  • iOS:修复 dispose() 后再次调用 initialize() 时播放器状态和事件回调异常 —— dispose() 会清空 VLC delegate、移除远程命令目标和通知观察者,但 initialize() 是空操作未重新恢复;现新增 reinitialize() 方法重新绑定 delegate、音频会话、远程命令和视频尺寸监听

0.1.4 #

新功能

  • 新增磁盘缓存系统:首次播放走远端并在后台静默下载,再次播放命中缓存直接读本地文件(秒开)
  • 新增 CacheConfig:支持配置最大缓存空间(默认 500 MB)、自定义缓存目录、启用/禁用开关
  • 新增缓存管理 API:getCacheSize()getCacheSizeString()clearCache()clearCacheItem(url),方便业务层展示和清理缓存
  • VideoWidget 新增视频加载中动画:白色圆形进度条,显示在右上角,release 包自动隐藏
  • initialize() 新增 cacheConfig 参数,不传则不启用缓存,零侵入

Bug 修复

  • Android:修复首次启动必现不播放问题 —— bindService() 异步绑定期间 initialize() 立即返回,导致 open()playerService 为 null 时被静默丢弃;现改为等待 onServiceConnected 后才回调 Dart
  • Android:修复缓存命中后播放本地文件失败 —— DefaultHttpDataSource 不支持 file:// 协议,改用 DefaultDataSource 自动路由 HTTP 与本地文件
  • 缓存:修复 HttpClient 无超时设置,极端网络环境下后台下载任务可能永久挂起;新增连接超时 15s、下载兜底超时 30min
  • 缓存:修复每次访问缓存都立即写元数据文件,连续播放时产生大量冗余磁盘 I/O;改为防抖写入(500ms 合并),用户主动清除时仍立即落盘
  • 缓存:修复元数据损坏时 catch 块静默吞掉异常,无法定位问题;改为打印错误日志后重置
  • Dart:修复 _onEvent catch 块静默丢弃原生事件解析错误,改为 debugPrint 输出原始数据方便排查

0.1.3 #

Bug 修复

  • Android:增加点击通知栏唤醒 App
  • Android:修复后台偶发性不稳定问题

0.1.2 #

Bug 修复

  • Android:修复Seek错误

0.1.1 #

Bug 修复

  • Android:修复Seek问题
  • iOS:修复通知栏问题

0.1.0 #

Bug 修复

  • iOS:修复循环播放时 .ended.stopped 双触发导致重复循环的问题
  • iOS:修复 dispose() 未清空 VLC delegate,stop 后仍触发回调
  • iOS:封面加载从同步 Data(contentsOf:) 改为 URLSession 异步加载,避免阻塞线程
  • iOS:修复 autoPlay: false 时无法获取视频总时长
  • iOS:修复视频/音频类型切换后视频黑屏不显示(VLC drawable 重新初始化)
  • Android:修复 autoPlay: false 时无法获取视频总时长
  • Android:修复 onPlaybackStateChangedonIsPlayingChanged 重复发送播放状态事件
  • Android:修复 seek 接口 position 参数使用 Int 接收可能溢出,改为 Long
  • Dart:修复 dispose() 重复调用时抛出 StateError
  • Dart:修复原生层发送格式异常事件时导致崩溃
  • VideoWidget:修复 BoxFit 参数传入后实际未生效

变更

  • Android 包名更新为 com.sirli.omni_player
  • 移除 macOS 和 Windows 平台支持

0.0.1 #

  • 首次发布
  • 支持 iOS(MobileVLCKit)和 Android(ExoPlayer/Media3)
  • 支持 MP4、MKV、HLS、DASH、RTSP、MP3 等格式
  • 支持视频渲染、后台音频、锁屏/通知栏媒体控制
  • 支持自定义 HTTP 请求头、循环播放、倍速播放
  • 支持上一首/下一首事件回调
2
likes
135
points
482
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Flutter媒体播放器插件,在Android/iOS上支持视频和音频播放和后台播放。支持MKV、MP4、HLS等.

Homepage

License

MIT (license)

Dependencies

crypto, flutter, path_provider, plugin_platform_interface

More

Packages that depend on omni_player

Packages that implement omni_player