【鸿蒙优选三方库】@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 秒上手
ohpm install @ohos/ijkplayer
权限:播放网络视频要 ohos.permission.INTERNET;录制/截图存相册还要 ohos.permission.WRITE_IMAGEVIDEO。
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)
}
}
常用控制:
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。
排查硬解问题的通用手法
遇到花屏、绿屏、崩溃时,显式切软解验证:
this.player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, 'mediacodec', 0) // 关硬解
this.player.setDataSource(url)
this.player.prepareAsync()
软解正常 + 硬解异常 → 是该机型/该编码的硬解码器兼容性问题。应对:对该机型降级软解,或服务端转码成更通用的编码。
适合谁用
- 短视频 / 中视频:点播 + 滑动切换 + 倍速
- 直播应用:RTMP / RTSP / HLS 拉流
- 在线教育:多格式课程视频 + 倍速 + 录制重点
- 车载 / 工业终端:受限环境下仍要稳定播放多种格式
- 4K / HDR 高清:硬解码省电降发热
387 个 Issue 已关闭,是鸿蒙三方库里活跃度最高的之一。播放器的问题往往和设备强相关,翻 Issue 常常比看文档更快找到答案。
更多推荐


所有评论(0)