hm_video_player 0.7.0
hm_video_player: ^0.7.0 copied to clipboard
跨平台视频播放器插件,支持全屏、画中画、投屏、倍速等功能。
0.7.0 #
- 新增插件级预加载 API
HmVideoPreload(MethodChannelhm_video_player/preload),与播放器实例解耦,可在短剧切集、推荐 Feed、离线缓存等场景后台预热加密源 - 支持
preload/cancel/cancelExcept/configure/queryHlsCache/exportHlsCache/pinCacheKeys/unpinCacheKeys/shutdownAllPlayers - 新增
PreloadRequest、HlsCacheQuery模型;HmVideoPreload.businessCacheKey(videoId, epNo, clarity)生成稳定业务缓存键(videoId|epNo|clarity) playEncrypted新增可选参数cacheKey:与预加载共用同一本地 HLS 目录,CDN 签名 URL 变化时仍可命中缓存;未传时回退 legacyMD5(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 typemediaInfoLoaded):原生解析到有效的视频宽度、高度与总时长后向应用层发送一次,PlayerEventMessage新增width/height字段
0.6.2 #
- 新增
HmVideoPlayerController.setCover(bool),支持播放过程中动态切换视频缩放模式 true使用 cover 模式(铺满播放器区域,画面可能被裁剪),false使用 fit 模式(完整显示画面,可能留黑边)- Android / iOS 小屏与全屏均立即生效;Android 独立全屏 Activity 会同步最新状态,退出全屏后不会恢复旧值
0.6.1 #
- 修复加密视频(
playEncrypted)首帧后总时长先显示为几秒、随后才跳变为完整时长的问题:本地 HLS 为增量写入,播放器时间线时长初期偏小;改为使用原生解密会话探测到的完整时长上报(AndroidDFEncryptedPlayer/ iOSEncryptedPlaybackSession),首帧起即为正确总时长。加密会话结束后自动清除,不影响普通播放
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 监听 ExoPlayeronPlayerError,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> - 新增投屏命令事件
CastCommandResultEvent(castCommandResult),用于反馈命令成功/失败与错误码 - 重写 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:
setPictureInPictureEnabled、setAutoEnterPictureInPicture,便于应用层按业务逻辑动态控制 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 类型安全通信
- 清晰度切换、选集、试看时长等能力