【鸿蒙优选三方库】@ohos/ijkplayer:B 站同源播放器,啥格式都能播

【鸿蒙优选三方库】@ohos/ijkplayer:B 站同源播放器,啥格式都能播

系统 AVPlayer 播不了的 FLV、拉不动的 RTMP、给不出的无级倍速------@ohos/ijkplayer 全都有。它是 B 站开源播放器 ijkplayer 在鸿蒙上的官方移植,底层 FFmpeg 内核,格式兼容性是天花板级别。
📦 仓库地址 | ohpm install @ohos/ijkplayer | v2.0.10-rc.0 | LGPLv2.1+


它解决什么问题

鸿蒙上做视频播放,系统 AVPlayer 够用但不够全能:

  • 格式受限:FLV、MKV 这类容器支持不全,老课程视频播不了
  • 直播协议缺:RTMP 基本不支持,RTSP/HLS 覆盖有限
  • 倍速档位少:教育场景要 0.5x~2x 无级变速
  • 没有录制和截图:想边播边录、抓个板书都做不到

ijkplayer 在 B 站亿级 DAU 产品里打磨多年,这些能力全都是标配。@ohos/ijkplayer 把它移植到鸿蒙,用 XComponent 接入 ArkUI 渲染管线。


核心能力

能力 说明
FFmpeg 内核 H.264 / H.265 / AV1 等主流编码
点播格式 MP4 / MKV / FLV / MOV / TS
直播协议 HLS / RTSP / RTMP
软硬解码 自动选择,10bit 需 API 22+
倍速播放 0.5x ~ 2x+ 无级变速(API 12+)
视频录制 边播边录,存相册
截屏 单帧抓取
音量控制 API 12+
音频中断监听 API 22+,来电/其他 App 抢焦点时响应
纯音频模式 不需要 XComponent

30 秒上手

bash 复制代码
ohpm install @ohos/ijkplayer

权限:播放网络视频要 ohos.permission.INTERNET;录制/截图存相册还要 ohos.permission.WRITE_IMAGEVIDEO。

typescript 复制代码
import { IjkMediaPlayer } from '@ohos/ijkplayer'

@Entry
@Component
struct PlayerPage {
  private player = IjkMediaPlayer.getInstance()

  build() {
    XComponent({
      id: 'player-surface',
      type: 'SURFACE',
      libraryname: 'ijkplayer_napi',
      controller: this.player.getSurfaceController(),
    })
      .onLoad(() => {
        this.player.setOnPreparedListener(() => this.player.start())
        this.player.setOnErrorListener((what, extra) => console.error(`${what}/${extra}`))
        this.player.setDataSource('https://example.com/video.mp4')
        this.player.prepareAsync()
      })
      .width('100%').aspectRatio(16 / 9)
  }
}

常用控制:

typescript 复制代码
this.player.pause()
this.player.start()
this.player.seekTo(30_000)        // 跳到 30 秒
this.player.setSpeed(1.5)         // 1.5 倍速
this.player.setVolume(0.8)
this.player.capture((path) => console.info('截图: ' + path))

社区已解决的典型问题

并发调用 stopRecord 导致崩溃 (#412 / #413)

并发调 stopRecord() 时 pthread_join 崩溃,master 和 iot 分支都出现了。根因是录制线程已被 join 过一次,第二次 join 就崩。已修复。业务侧仍建议加状态锁保证串行调用,别让用户狂点按钮触发并发。

auto_mediacodec 硬解选项引入后回退 (#404 / #406)

#404 新增了自动启用硬件解码的选项,但因为在某些设备/编码组合下有问题,#406 做了 Revert 回退。结论是别依赖未稳定的硬解开关,让播放器自动选择解码器,等它正式稳定后再用。

版本迭代密集 (#405 ~ #416)

2.0.10 → 2.0.11-rc.0 → 2.0.12-rc.0 → 2.0.12 迭代很快。遇到问题先翻 Issue 列表,很可能已经有人踩过并修好了。生产环境优先用正式版而非 rc。


排查硬解问题的通用手法

遇到花屏、绿屏、崩溃时,显式切软解验证:

typescript 复制代码
this.player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, 'mediacodec', 0)  // 关硬解
this.player.setDataSource(url)
this.player.prepareAsync()

软解正常 + 硬解异常 → 是该机型/该编码的硬解码器兼容性问题。应对:对该机型降级软解,或服务端转码成更通用的编码。


适合谁用

  • 短视频 / 中视频:点播 + 滑动切换 + 倍速
  • 直播应用:RTMP / RTSP / HLS 拉流
  • 在线教育:多格式课程视频 + 倍速 + 录制重点
  • 车载 / 工业终端:受限环境下仍要稳定播放多种格式
  • 4K / HDR 高清:硬解码省电降发热

387 个 Issue 已关闭,是鸿蒙三方库里活跃度最高的之一。播放器的问题往往和设备强相关,翻 Issue 常常比看文档更快找到答案。

相关推荐
传奇开心果编程1 小时前
组合优先开发范式:从汉字造字原理到声明式UI组件组合思想
android·flutter·ios·swiftui·移动开发·harmonyos·android jetpack
网络豆1 小时前
开源鸿蒙平台 CMP 三方库「kmp-onboarding」适配全流程
华为·开源·harmonyos
网络豆2 小时前
开源鸿蒙平台 CMP 三方库「dotsindicator」适配全流程
华为·开源·harmonyos
resh_people2 小时前
开源鸿蒙平台 CMP 三方库「kmp-wheel-picker」适配全流程
华为·开源·harmonyos
腾讯端服务2 小时前
一码Duo端-Kuikly-iOS折叠屏新UI适配实践
android·ui·ios·kotlin·鸿蒙
2501_944521592 小时前
开源鸿蒙平台 KMP 三方库「BottomSheetNavigator3KMP」适配全流程
华为·开源·harmonyos
2501_944521592 小时前
开源鸿蒙平台 CMP 三方库「scroll-effects」适配全流程
华为·开源·harmonyos
Dovis(誓平步青云)2 小时前
切换语言后按钮被截断,本地化审计怎样发现长度风险
开发语言·前端·javascript·人工智能·机器学习·华为·harmonyos
kiros_wang2 小时前
折叠屏状态监听:横竖屏、折叠态差异化布局开发
华为·harmonyos