# ijkplayer
## 简介
> ijkplayer是OpenHarmony环境下可用的一款基于FFmpeg的视频播放器。
## 演示
<img src="screenshot/ijkplayer-zh.gif" width="100%"/>
## 编译运行
1、通过IDE工具下载依赖SDK,Tools->SDK Manager->OpenHarmony SDK 把native选项勾上下载,API版本>=9
2、开发板选择RK3568,[ROM下载地址](http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist). 选择开发板类型是rk3568,请使用最新的版本
3、使用git clone下载源码,不要直接通过gitee网页的方式下载
## 下载安装
```shell
ohpm install @ohos/ijkplayer
```
## 使用说明
```
import { IjkMediaPlayer } from "@ohos/ijkplayer";
import type { OnPreparedListener } from "@ohos/ijkplayer";
import type { OnVideoSizeChangedListener } from "@ohos/ijkplayer";
import type { OnCompletionListener } from "@ohos/ijkplayer";
import type { OnBufferingUpdateListener } from "@ohos/ijkplayer";
import type { OnErrorListener } from "@ohos/ijkplayer";
import type { OnInfoListener } from "@ohos/ijkplayer";
import type { OnSeekCompleteListener } from "@ohos/ijkplayer";
import { LogUtils } from "@ohos/ijkplayer";
```
### 在UI中配置XComponent控件
```
XComponent({
id: 'xcomponentId',
type: 'surface',
libraryname: 'ijkplayer_napi'
})
.onLoad((context) => {
this.initDelayPlay(context);
})
.onDestroy(() => {
})
.width('100%')
.aspectRatio(this.aspRatio)
```
### 播放
```
let mIjkMediaPlayer = IjkMediaPlayer.getInstance();
// 设置XComponent回调的context
mIjkMediaPlayer.setContext(this.mContext);
// 设置debug模式
mIjkMediaPlayer.setDebug(true);
// 初始化配置
mIjkMediaPlayer.native_setup();
// 设置视频源
mIjkMediaPlayer.setDataSource(url);
// 设置视频源http请求头
let headers = new Map([
["user_agent", "Mozilla/5.0 BiliDroid/7.30.0 (bbcallen@gmail.com)"],
["referer", "https://www.bilibili.com"]
]);
mIjkMediaPlayer.setDataSourceHeader(headers);
// 使用精确寻帧 例如,拖动播放后,会寻找最近的关键帧进行播放,很有可能关键帧的位置不是拖动后的位置,而是较前的位置.可以设置这个参数来解决问题
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", "1");
// 预读数据的缓冲区大小
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-buffer-size", "102400");
// 停止预读的最小帧数
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "min-frames", "100");
// 启动预加载
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", "1");
// 设置无缓冲,这是播放器的缓冲区,有数据就播放
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", "0");
// 跳帧处理,放CPU处理较慢时,进行跳帧处理,保证播放流程,画面和声音同步
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", "5");
// 最大缓冲cache是3s, 有时候网络波动,会突然在短时间内收到好几秒的数据
// 因此需要播放器丢包,才不会累积延时
// 这个和第三个参数packet-buffering无关。
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max_cached_duration", "3000");
// 无限制收流
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "infbuf", "1");
// 屏幕常亮
mIjkMediaPlayer.setScreenOnWhilePlaying(true);
// 设置超时
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "timeout", "10000000");
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "connect_timeout", "10000000");
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "listen_timeout", "10000000");
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "addrinfo_timeout", "10000000");
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_timeout", "10000000");
let mOnVideoSizeChangedListener: OnVideoSizeChangedListener = {
onVideoSizeChanged(width: number, height: number, sar_num: number, sar_den: number) {
that.aspRatio = width / height;
LogUtils.getInstance()
.LOGI("setOnVideoSizeChangedListener-->go:" + width + "," + height + "," + sar_num + "," + sar_den)
that.hideLoadIng();
}
}
mIjkMediaPlayer.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);
let mOnPreparedListener: OnPreparedListener = {
onPrepared() {
LogUtils.getInstance().LOGI("setOnPreparedListener-->go");
}
}
mIjkMediaPlayer.setOnPreparedListener(mOnPreparedListener);
let mOnCompletionListener: OnCompletionListener = {
onCompletion() {
LogUtils.getInstance().LOGI("OnCompletionListener-->go")
that.currentTime = that.stringForTime(mIjkMediaPlayer.getDuration());
that.progressValue = PROGRESS_MAX_VALUE;
that.stop();
}
}
mIjkMediaPlayer.setOnCompletionListener(mOnCompletionListener);
let mOnBufferingUpdateListener: OnBufferingUpdateListener = {
onBufferingUpdate(percent: number) {
LogUtils.getInstance().LOGI("OnBufferingUpdateListener-->go:" + percent)
}
}
mIjkMediaPlayer.setOnBufferingUpdateListener(mOnBufferingUpdateListener);
let mOnSeekCompleteListener: OnSeekCompleteListener = {
onSeekComplete() {
LogUtils.getInstance().LOGI("OnSeekCompleteListener-->go")
that.startPlayOrResumePlay();
}
}
mIjkMediaPlayer.setOnSeekCompleteListener(mOnSeekCompleteListener);
let mOnInfoListener: OnInfoListener = {
onInfo(what: number, extra: number) {
LogUtils.getInstance().LOGI("OnInfoListener-->go:" + what + "===" + extra)
}
}
mIjkMediaPlayer.setOnInfoListener(mOnInfoListener);
let mOnErrorListener: OnErrorListener = {
onError(what: number, extra: number) {
LogUtils.getInstance().LOGI("OnErrorListener-->go:" + what + "===" + extra)
that.hideLoadIng();
prompt.showToast({
message:"亲,视频播放异常,系统开小差咯"
});
}
}
mIjkMediaPlayer.setOnErrorListener(mOnErrorListener);
mIjkMediaPlayer.setMessageListener();
mIjkMediaPlayer.prepareAsync();
mIjkMediaPlayer.start();
```
### 暂停
```
mIjkMediaPlayer.pause();
```
### 停止
```
mIjkMediaPlayer.stop();
```
### 重置
```
mIjkMediaPlayer.reset();
```
### 释放
```
mIjkMediaPlayer.release();
```
### 快进、后退
```
mIjkMediaPlayer.seekTo(msec);
```
### 倍数播放
```
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", "1");
mIjkMediaPlayer.setSpeed("2f");
```
### 屏幕常亮
```
mIjkMediaPlayer.setScreenOnWhilePlaying(true);
```
### 循环播放
```
mIjkMediaPlayer.setLoopCount(true);
```
### 设置音量
```
mIjkMediaPlayer.setVolume(leftVolume, rightVolume);
```
## 接口说明
### IjkMediaPlayer.getInstance()
| 接口名 | 参数 | 返回值 | 说明 |
| ---------------------------| --------------------------- | ----------------- | ----------------------------------------- |
| setContext | context: object | void | 设置XComponent回调的context |
| setDebug | open: boolean | void | 设置日志开关 |
| native_setup | 无 | void | 初始化配置 |
| setDataSource | url: string | void | 设置视频源地址 |
| setDataSourceHeader | headers: Map<string, str
鸿蒙系统ijk开源播放器
需积分: 0 91 浏览量
更新于2024-06-12
收藏 14.81MB ZIP 举报
【鸿蒙系统ijk开源播放器】是针对OpenHarmony操作系统设计的一款高效、可定制的视频播放解决方案。ijkplayer源于FFmpeg项目,它在FFmpeg的基础上进行了优化和扩展,以适应移动设备和嵌入式系统的使用需求,特别是在OpenHarmony这样的新型分布式操作系统中。
FFmpeg是一个著名的跨平台多媒体处理框架,它包含了一系列的库和工具,用于处理音频、视频以及流媒体数据。ijkplayer作为FFmpeg的衍生产品,其主要功能包括视频解码、音频解码、视频渲染和音频播放。ijkplayer的优势在于其轻量级和高度可配置性,可以有效地支持多种视频格式和编码标准,如H.264、H.265、VP9等,并且能够处理不同分辨率的视频内容,从标清到4K乃至更高的超高清视频。
在OpenHarmony系统中,ijkplayer扮演着至关重要的角色。OpenHarmony是由华为公司主导开发的开源操作系统,旨在提供一种分布式、全场景的智能互联体验。ijkplayer的集成使得OpenHarmony设备能够流畅地播放本地和网络视频,满足用户在娱乐、教育、办公等多个场景下的需求。
ijkplayer的特性包括:
1. **多平台兼容**:ijkplayer不仅支持OpenHarmony,还兼容其他多种操作系统,如Android、iOS等,这得益于其良好的跨平台设计。
2. **高效解码**:ijkplayer通过优化的解码器库,能快速解析和播放各种视频编码格式,提高播放性能。
3. **网络流支持**:ijkplayer可以播放HTTP、RTSP、RTMP等多种网络协议的流媒体内容,适应互联网时代的多媒体需求。
4. **低内存占用**:优化的内存管理策略使得ijkplayer在保持高性能的同时,降低了对系统资源的消耗。
5. **自定义功能**:ijkplayer提供了丰富的API接口,开发者可以根据具体需求进行二次开发,实现个性化播放功能。
6. **硬件加速**:ijkplayer利用设备的硬件加速能力,如GPU解码,提升播放效率并减少电池消耗。
7. **多语言支持**:ijkplayer能够处理多语言音轨,为用户提供更丰富的观看体验。
在项目`ohos_ijkplayer-master`中,包含了ijkplayer在OpenHarmony上的源代码和构建文件,开发者可以通过编译这个项目来获取适用于OpenHarmony系统的ijkplayer播放器。这为开发者提供了自定义和优化ijkplayer的可能,以更好地适应OpenHarmony的生态环境和特定设备的需求。
总而言之,ijkplayer作为OpenHarmony上的开源视频播放器,结合了FFmpeg的强大功能和OpenHarmony的分布式特性,为用户带来了稳定、高效的视频播放体验,同时为开发者提供了丰富的开发选项,推动了OpenHarmony生态系统的繁荣发展。
ConneyWu
- 粉丝: 602
- 资源: 15
最新资源
- 西门子PLC博途3种自动流程程序写法 本案例介绍3种不同的方法去写自动流程程序 第一种是用scl case语录,另外的两种使用梯形图的模式去写 使用此类方法去写,清晰明了,非常使用 并且针对程序
- LabVIEW串口通讯Delta台达PLC,Modbus 官方协议,报文读取,安全稳定 程序代开发,代写程序 通讯配置,辅助测试 PLC无需编写程序 1.命令帧读写 2.支持 I16 I32
- 西门子SMART200 PLC梯形图,昆仑通态触摸屏组态程序,燃气燃油蒸汽锅炉平衡容器差压变送器连续给水程序,程序CAD原理图图纸全套打包
- MATLAB基于肤色分割的静态手势识别,带源码带gui面板,程序运行和图上一致,能用指定图片识别出12345,程序注释全 关键字 MATLAB 手势识别 静态 源码 程序 GUI
- Comsol BIC拓扑远场偏振计算 本征模式偏振态计算 此为复杂分解算法,有文献 通用算法见架另一案例,有意私 (两种算法暂无法甄选对错)
- 基于matlab的rbf神经网络对 excel中的数据进行预测,粒子群优化神经网络,遗传算法优化rbf神经网络,鲸鱼优化rbf神经网络 基于混沌映射改进的自适应权重的鲸鱼算法优化rbf神经网络
- 龙格库塔优化算法优化最小二乘支持向量机 龙格库塔优化算法 (RUN-LSSVM)用于分类,分类,回归预测最新代码
- 三菱FX1s与东元Teco N310变频器通讯实战程序 直接拿来实用了,三菱FX PLC与东元N310变频器modbus RTU通讯 采用器件:三菱FX1s 30MR PLC,1个FX1N 4
- PMSM永磁同步电机复合控制,MATLAB SIMULINK仿真软件,MRAS和HF的高低速复合控制,模型参考自适应和高频注入法的复合控制,无速度传感器矢量控制,波形正常,可教学,图二为转速曲线图,图
- 单相全桥PWM整流双闭环控制 电压环采用PI控制器,电流环采用PR控制器;可以实现整流器交流侧单位功率因数,直流侧电压恒定 额定:交流侧电压60V,电流10A,直流侧电压150V 图为电阻1秒
- 考虑蓄电池,市场购电电约束,功率平衡约束,以总费用最低为目标函数,适合新手学习参考 电网程序matlab,有参考文档 标价即卖价,不议价,不,程序是可以运行的 仿真平台:MATLAB+CPLE
- 特征选择算法 基于麻雀搜索算法的同步优化特征选择 特征选择 优化 麻雀搜索算法 同步优化 基于阿基米德算法的同步优化特征选择 基于鲸鱼优化算法的同步优化特征选择 基于狼群优化算法的同步优化特征选择 基
- 基于51单片机烘干机设计 程序、仿真、原文(另算) 功能: 1.系统可以通过按键选择操作方式,一键式操作自主解决想要的吹冷风,还是吹热风; 2.本系统可以对烘干机的进行节能控制,具体就是在使用时,红外
- 新能源汽车车载双向OBC,PFC,LLC,V2G 双向 充电桩 电动汽车 车载充电机 充放电机 MATLAB仿真模型 (1)基于V2G技术的双向AC DC、DC DC充放电机MATLAB仿真模型; (
- 三菱FX3U底层源码,PLSR源码 总体功能和指令可能支持在RUN中下载程序,支持注释的写入和读取,有脉冲输出与定位指令(包括PLSY PWM PLSR PLSV DRVI DRVA 等指令)
- 程序名称:汽车平顺性仿真与评价 开发平台:基于matlab平台 计算内容:建立simulink平顺性仿真模型(单轮),构建随机路面谱模型,RMS计算与评价,按国标对各测点的倍频程和加权加速度均方根值运