【鸿蒙优选三方库】@ohos/ijkplayer:在鸿蒙上像 B 站一样流畅播视频
·
【鸿蒙优选三方库】@ohos/ijkplayer:在鸿蒙上像 B 站一样流畅播视频> 想在鸿蒙应用里像抖音/B站那样流畅播视频?@ohos/ijkplayer 是 B站 ijkplayer 在 OpenHarmony 上的官方移植——基于 FFmpeg 内核,封装出 ArkTS 友好的播放器 API,支持视频/音频播放、倍速、硬解码、录制、截图,以及 HLS/RTSP/RTMP 直播流。- 包名:@ohos/ijkplayer- 当前版本:v2.0.10-rc.0- 协议:LGPLv2.1 or later- 安装:ohpm install @ohos/ijkplayer- 仓库:https://gitcode.com/CPF-ApplicationTPC/ohos_ijkplayer—## 一、它解决了什么问题?在 HarmonyOS 上做视频播放,常见痛点:- 系统 AVPlayer 对某些编码/封装格式支持不全,特别是直播流(RTSP/RTMP)、冷门编码;- 想精细控制倍速、缓冲策略、硬解码、滤镜,要么做不到,要么得自己造轮子;- 想边播边录/截图,没有现成方案。ijkplayer 是 B 站开源的、基于 FFmpeg 的播放器,久经海量直播/点播业务考验。@ohos/ijkplayer 把它移植到 OpenHarmony,ArkTS 一行初始化,开箱即播。—## 二、核心特点| 特性 | 说明 ||------|------|| 基于 FFmpeg 内核 | 解码能力覆盖 H.264/H.265/AV1 等主流编码 || 多格式支持 | MP4 / MKV / FLV / MOV / TS 等点播;HLS / RTSP / RTMP 等直播 || 软解 + 硬解 | 自动选择硬解码器,10bit 视频需 API 22+ || 倍速播放 | 0.5x ~ 2x+ 无级变速 || 音频播放 | 支持纯音频模式(无需 XComponent) || 视频录制 | 边播边录,保存到相册 || 截屏 | 一帧画面抓取 || Surface 渲染 | 通过 XComponent 接入 ArkUI 渲染管线 || 音量控制 | API 12+ 支持音量调节 || 音频中断监听 | API 22+ 支持系统音频焦点变化 |—## 三、适用场景- 短视频 / 中视频应用:点播、滑动切换、倍速观看。- 直播应用:RTSP/RTMP/HLS 拉流,低延迟播放。- 在线教育:课件视频播放,支持倍速与进度记忆。- 音视频通话外延:本地音视频文件的播放与录制。- 车载 / 工业终端:在受限环境下仍能稳定播放多种格式。- 需要硬解码的高清场景:4K / HDR / 高码率视频。—## 四、快速上手### 1. 安装与权限bashohpm install @ohos/ijkplayer在 module.json5 中声明:json"requestPermissions": [ { "name": "ohos.permission.INTERNET", "reason": "$string:NET_REQUEST_PERMISSION" }, { "name": "ohos.permission.WRITE_IMAGEVIDEO", "reason": "$string:IMAGEVIDEO_REQUEST_PERMISSION", "usedScene": { "when": "always" } }]### 2. 在页面里集成 XComponent 与播放器typescriptimport { IjkMediaPlayer, OnPreparedListener, OnErrorListener } from '@ohos/ijkplayer'@Entry@Componentstruct VideoPage { @State aspRatio: number = 16 / 9 private mIjkMediaPlayer = IjkMediaPlayer.getInstance() private videoUrl: string = 'https://example.com/sample.mp4' build() { Stack({ alignContent: Alignment.Center }) { // XComponent 作为视频渲染的"画布" XComponent({ id: 'player-surface', type: 'SURFACE', libraryname: 'ijkplayer_napi', controller: this.mIjkMediaPlayer.getSurfaceController() }) .onLoad(() => { this.preparePlayer() }) .aspectRatio(this.aspRatio) } .width('100%').height('100%') } private preparePlayer() { this.mIjkMediaPlayer.setOnPreparedListener(() => { this.mIjkMediaPlayer.start() // 准备完成,开始播放 }) this.mIjkMediaPlayer.setOnErrorListener((what, extra) => { console.error(`播放错误 what=${what} extra=${extra}`) }) this.mIjkMediaPlayer.setDataSource(this.videoUrl) this.mIjkMediaPlayer.prepareAsync() }}### 3. 常用控制typescript// 暂停 / 继续 / 跳转this.mIjkMediaPlayer.pause()this.mIjkMediaPlayer.start()this.mIjkMediaPlayer.seekTo(30_000) // 跳转到 30 秒// 设置倍速(API 12+)this.mIjkMediaPlayer.setSpeed(1.5)// 设置音量(API 12+)this.mIjkMediaPlayer.setVolume(0.8)// 截图this.mIjkMediaPlayer.capture(async (path) => { console.info('截图已保存: ' + path)})—## 五、亮点能力速览- 直播流覆盖:HLS / RTSP / RTMP 拉流直接可用,无需额外解码器。- 纯音频播放:不需要 XComponent 也能播音频,节省渲染资源。- 硬解码自动启用:在支持的设备上自动走硬解,省电且降低发热。- 细粒度状态回调:OnPreparedListener / OnErrorListener / OnCompletionListener 等,UI 同步不愁。- FFmpeg 内核:编码/格式兼容性天花板级别,几乎无惧冷门媒体。—## 六、为什么值得选它?1. 久经考验:ijkplayer 已在 B 站亿级 DAU 产品中打磨多年。2. 格式全:直播流、冷门编码,FFmpeg 内核给你最大覆盖。3. ArkTS 友好:API 设计贴合 HarmonyOS 开发习惯,XComponent 集成自然。4. 可深可浅:基本播放在线就能跑,进阶控制(倍速/截屏/录制)一应俱全。5. 持续演进:版本持续迭代,跟随 OpenHarmony 新 API 升级(如音频中断、10bit 硬解等)。如果你的应用要"播视频",尤其是涉及直播或非主流编码,@ohos/ijkplayer 应该是你清单上的第一选择。
更多推荐




所有评论(0)