hm_video_player 0.7.0 copy "hm_video_player: ^0.7.0" to clipboard
hm_video_player: ^0.7.0 copied to clipboard

跨平台视频播放器插件,支持全屏、画中画、投屏、倍速等功能。

0.7.0 #

  • 新增插件级预加载 API HmVideoPreload(MethodChannel hm_video_player/preload),与播放器实例解耦,可在短剧切集、推荐 Feed、离线缓存等场景后台预热加密源
  • 支持 preload / cancel / cancelExcept / configure / queryHlsCache / exportHlsCache / pinCacheKeys / unpinCacheKeys / shutdownAllPlayers
  • 新增 PreloadRequestHlsCacheQuery 模型;HmVideoPreload.businessCacheKey(videoId, epNo, clarity) 生成稳定业务缓存键(videoId|epNo|clarity
  • playEncrypted 新增可选参数 cacheKey:与预加载共用同一本地 HLS 目录,CDN 签名 URL 变化时仍可命中缓存;未传时回退 legacy MD5(url|key|version)
  • Android:HmHlsPreloadManager(串行 HLS remux 预热)+ HmEncPreloadManager(legacy .enc 预热);替换原 ILook* 预加载实现
  • iOS:新增 HmHlsPreloadManager / HmVideoPreloadChannel,与播放会话共享 HmHlsCachePaths
  • 主播放与预热互相让路:markInUse / beginMainPlaybackIO 避免预热删掉正在播放的目录;cancelExcept 窗口清理时保留 pinCacheKeys 钉住的离线 remux 任务
  • Android:加密切源 / dispose 时将 awaitShutdownComplete 挪到后台线程,避免卡主线程导致 PlatformView 合成饥饿;ExoPlayer.release 延后到下一 looper 消息

0.6.3 #

  • 新增媒体信息就绪事件 MediaInfoLoadedEvent(Pigeon type mediaInfoLoaded):原生解析到有效的视频宽度、高度与总时长后向应用层发送一次,PlayerEventMessage 新增 width / height 字段

0.6.2 #

  • 新增 HmVideoPlayerController.setCover(bool),支持播放过程中动态切换视频缩放模式
  • true 使用 cover 模式(铺满播放器区域,画面可能被裁剪),false 使用 fit 模式(完整显示画面,可能留黑边)
  • Android / iOS 小屏与全屏均立即生效;Android 独立全屏 Activity 会同步最新状态,退出全屏后不会恢复旧值

0.6.1 #

  • 修复加密视频(playEncrypted)首帧后总时长先显示为几秒、随后才跳变为完整时长的问题:本地 HLS 为增量写入,播放器时间线时长初期偏小;改为使用原生解密会话探测到的完整时长上报(Android DFEncryptedPlayer / iOS EncryptedPlaybackSession),首帧起即为正确总时长。加密会话结束后自动清除,不影响普通播放

0.6.0 #

  • 新增 playEncrypted(url, {decryptionKey, position}):播放 CENC 加密 MP4。原生侧使用 FFmpeg 解密并 remux 为本地 HLS,再交由现有 ExoPlayer / AVPlayer 播放;decryptionKey 为 32 位 hex 的 AES-128 密钥
  • Android:接入 NDK / CMake 构建 FFmpeg 解密核心(ffmpeg_decrypt);DFEncryptedPlayer 负责下载 / 解密 / remux / 播放编排,含首帧看门狗与 legacy MP4 回退(HLS 起播失败时自动降级,不再抛致命错误)
  • iOS:新增 EncryptedPlaybackSession + DFDecryptRemuxProducer + 本地 HLS server;FFmpeg 符号复用 MobileVLCKit

0.5.6 #

  • 原生播放失败时上报 ErrorEvent(code: playback_failed):Android 监听 ExoPlayer onPlayerError,iOS 监听 AVPlayerItem 失败状态与 AVPlayerItemFailedToPlayToEndTime

0.5.5 #

  • 新增 setCurrentQualityIndex / setCurrentEpisodeIndex:运行时仅同步原生 UI 索引(清晰度按钮、副标题、面板选中态),不换源、不触发选集/清晰度事件

0.5.4 #

  • 新增 setFullscreenLabels({title, subtitle}):运行时更新全屏控制栏标题/副标题;title/subtitle 可选,传 null 不修改对应字段;selectEpisode 后副标题自动同步

0.5.3 #

  • 全屏倍速按钮实时显示当前倍速(1.0X 显示「倍速」,其他显示如 2.0X
  • 倍速持久变更时通过 SpeedChangedEvent 回传 Flutter(面板选择、长按锁定、setSpeed());长按临时加速不触发事件
  • 全屏锁定后精简 UI:仅保留锁按钮与底部进度条
  • 选集面板支持点击空白区域关闭(Android / iOS)
  • iOS 倍速/清晰度/选集面板打开时隔离底层手势,避免与亮度/音量/控制栏冲突
  • 手势交互:播放画面任意区域长按临时倍速;左右区域上下滑动调亮度/音量(无需长按)
  • 退出全屏后若手机仍横持,不会立即再次传感器自动全屏;需先物理旋转至竖屏解除锁定(Android / iOS)

0.5.2 #

  • 修复安卓编译错误

0.5.1 #

  • connectCast 新增可选参数 url / title / position,连接时可指定投屏专用播放地址,无需先 setSource 替换本机播放源

0.5.0 #

  • Breaking: 投屏控制 API connectCast / disconnectCast / castPlay / castPause / castSeekTo / castSetMedia / castSetVolume 返回值从 Future<void> 调整为 Future<CastCommandResult>
  • 新增投屏命令事件 CastCommandResultEventcastCommandResult),用于反馈命令成功/失败与错误码
  • 重写 Android/iOS Cast 核心编排:CastManager 收敛为纯编排层,移除协议推断状态机逻辑
  • 重写 Android/iOS Chromecast 控制链路,改为基于 SDK 状态流直连控制
  • 重写 Android/iOS DLNA 发现与控制链路,补充持续设备重扫与过期设备清理

0.4.17 #

  • 新增投屏远端状态事件:CastProgressEvent / CastPlayingChangedEvent(connected 期间自动推送进度与播放状态)
  • DLNA / Chromecast / iOS AirPlay 在连接成功后由原生层轮询或监听并推送事件

0.4.16 #

  • 修复 iOS 编译错误:getCastPositionMs / isCastPlaying 误用 requireConnected(返回 Void)导致无法编译

0.4.14 #

  • 新增投屏状态查询 API:getCastPosition / isCastPlaying(读取远端播放位置与播放状态)
  • 新增投屏会话遥控 API:castPlay / castPause / castSeekTo / castSetMedia / castSetVolume(Android / iOS DLNA & Chromecast)
  • 修复 Android HLS(m3u8)无法播放:补充 media3-exoplayer-hls 依赖
  • 修复 Android Chromecast 设备发现失败
  • 修复 iOS 投屏遥控音量无效

0.4.12 #

  • 增强视频播放器功能,支持本地文件播放(file://、绝对路径;Android 另支持 content://)

0.4.11 #

  • 新增腾讯视频风格滑动手势:横向快进快退、左侧亮度、右侧系统音量;中间区域长按倍速快进(可上滑锁定)
  • 新增 enableInlineDragGestures 参数(默认 true):仅控制小屏滑动手势;全屏始终支持
  • 手势 UI 提示:快进快退居中显示时长与进度条;亮度/音量顶部居中显示胶囊进度条
  • 修复 iOS 右侧滑动手势调节系统音量无效的问题(常驻 MPVolumeView)

0.4.10 #

  • 新增 inline 模式双击播放/暂停功能

0.4.9 #

  • 修复Chromecast重复选择同一设备无法投屏问题
  • 新增旋转自动全屏开关API
  • 优化文档和示例代码

0.4.8 #

  • 修复 Android 进入画中画时整页 Activity 被截进小窗、而非仅视频画面的问题(改回 PipOverlay + onUserLeaveHint 路径,禁用 setAutoEnterEnabled(true)

0.4.7 #

  • 新增运行时旋转自动全屏开关 API:setAutoRotateFullscreen,便于应用层按业务逻辑动态控制
  • example 增加「旋转自动全屏」开关演示

0.4.6 #

  • 修复关闭「自动画中画」后回桌面仍会进入 PiP(iOS 按需创建/销毁 PiP 控制器;Android 12+ 同步 setAutoEnterEnabled
  • 补充画中画运行时开关的行为说明与接入示例(docs/API.md、example)

0.4.5 #

  • 同步 iOS podspec 与 Android gradle 版本号

0.4.4 #

  • 新增运行时画中画开关 API:setPictureInPictureEnabledsetAutoEnterPictureInPicture,便于应用层按业务逻辑动态控制 PiP

0.4.3 #

  • 修复 iOS 编译错误:AVURLAssetHTTPHeaderFieldsKey 改用字符串 key,兼容新版 Xcode SDK

0.4.2 #

  • 新增自定义 HTTP Headers 支持:Widget 级默认、setSource 换源、每集独立 headers
  • Android 通过 ExoPlayer DefaultHttpDataSource 注入请求头
  • iOS 通过 AVURLAssetHTTPHeaderFieldsKey 注入请求头

0.4.1 #

  • 更新版本号至 0.4.1,移除不必要的控制按钮,简化控制栏配置,添加 API 文档和 README 文件

0.4.0 #

  • 初始发布
  • 原生 PlatformView 视频播放器(ExoPlayer / AVPlayer)
  • 全屏切换、画中画(PiP)、倍速、音量控制
  • 投屏支持:DLNA、Chromecast(Android/iOS)、AirPlay(iOS)
  • Flutter 自定义投屏页模式(HmCastUiMode.flutter)与原生面板降级
  • Pigeon 类型安全通信
  • 清晰度切换、选集、试看时长等能力
1
likes
135
points
180
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

跨平台视频播放器插件,支持全屏、画中画、投屏、倍速等功能。

Repository (GitHub)
View/report issues

Topics

#video-player #video #cast #picture-in-picture #fullscreen

License

MIT (license)

Dependencies

flutter

More

Packages that depend on hm_video_player

Packages that implement hm_video_player