自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
XComponent({
id: 'xcomponent',
type: 'surface',
controller: this.componentController
})
.height(`${this.xComponentHeight}px`)
.width(`${this.xComponentWidth}px`)
.onLoad(() => {
// 设置XComponent持有Surface的宽度和高度
this.componentController.setXComponentSurfaceSize({
surfaceWidth: SURFACE_WIDTH,
surfaceHeight: SURFACE_HEIGHT
});
this.surfaceId = this.componentController.getXComponentSurfaceId();
// 创建音视频播放实例
AvPlayManager.getInstance()
.initPlayer(getContext(this) as common.UIAbilityContext, this.surfaceId, (avPlayer: media.AVPlayer) => {
avPlayer.on('timeUpdate', (time: number) => {
this.currentTime = time;
});
this.videoDuration = handleTime(avPlayer.duration);
this.total = avPlayer.duration;
})
})
- 初始化代理服务器,页面一进来需要使用setServer方法来初始化代理服务器,以便后续调用此服务器处理url。源码参考GlobalProxyServer.ets
import common from '@ohos.app.ability.common';
import { HttpProxyCacheServer } from '@ohos/video-cache';
const CONTEXT_STR: string = 'context';
const SERVER_STR: string = 'server';
export default class GlobalProxyServer {
private static instance: GlobalProxyServer | null = null;
private objects: Map<string, Object | null> = new Map<string, Object | null>();
public static getInstance(): GlobalProxyServer {
if (!GlobalProxyServer.instance) {
GlobalProxyServer.instance = new GlobalProxyServer();
}
return GlobalProxyServer.instance;
}
/**
* 获取上下文信息
* @returns
*/
getContext(): common.UIAbilityContext {
return this.objects.get(CONTEXT_STR) as common.UIAbilityContext;
}
/**
* 设置上下文信息
* @param context
*/
setContext(context: common.UIAbilityContext): void {
this.objects.set(CONTEXT_STR, context);
}
/**
* 获取服务器
* @returns
*/
getServer(): HttpProxyCacheServer {
return this.objects.get(SERVER_STR) as HttpProxyCacheServer;
}
/**
* 设置服务器
* @param objectClass
*/
setServer(objectClass: HttpProxyCacheServer): void {
try {
const currentServer: HttpProxyCacheServer = this.getServer();
currentServer.shutdown();
} catch (err) {
}
this.objects.set(SERVER_STR, objectClass);
}
}
- media.createAVPlayer()创建播放管理类,用于管理和播放媒体资源。源码参考VideoPlayerManager.ets
async initPlayer(context: common.UIAbilityContext, surfaceId: string,
callback: (avPlayer: media.AVPlayer) => void): Promise<void> {
logger.info(TAG, `initPlayer==initCamera surfaceId== ${surfaceId}`);
this.surfaceID = surfaceId;
try {
// 创建avPlayer实例对象
this.avPlayer = await media.createAVPlayer();
// 创建状态机变化回调函数
await this.setAVPlayerCallback(callback);
// 边缓存边播放
this.cacheAndPlayVideo(context);
} catch (err) {
logger.error(TAG, `initPlayer initPlayer err:${JSON.stringify(err)}`);
}
}
- 边播放边缓存,MyCacheListener监听缓存进度,getProxyUrl(ORIGIN_URL)获取视频播放地址并设置给播放器。源码参考VideoPlayerManager.ets
/**
* 边缓存边监听函数
* @param context 上下文信息
* @returns
*/
async cacheAndPlayVideo(context: common.UIAbilityContext): Promise<void> {
logger.info(TAG, `cacheAndPlayVideo start`);
// TODO:知识点:监听缓存进度
class MyCacheListener implements CacheListener {
onCacheAvailable(cacheFilePath: string, url: string, percentsAvailable: number): void {
AppStorage.setOrCreate('currentCachePercent', percentsAvailable);
}
}
GlobalProxyServer?.getInstance()?.getServer()?.registerCacheListener(new MyCacheListener(), ORIGIN_URL);
// TODO:知识点:将原始的音视频url交给OhosVideoCache
let proxyUrl: string | undefined = await GlobalProxyServer?.getInstance()?.getServer()?.getProxyUrl(ORIGIN_URL);
// 由于avplayer不支持直接加载本地文件路径 这里需要转化为fd的路径
if (proxyUrl.startsWith(context.cacheDir)) {
const file = fs.openSync(proxyUrl, fs.OpenMode.READ_ONLY);
proxyUrl = `fd://${file.fd}`;
}
logger.info(TAG, `proxyUrl ${proxyUrl}`);
// 将处理之后的url设置给播放器
this.avPlayer.url = proxyUrl;
}
高性能知识点
不涉及。
工程结构&模块类型
videocache // har类型
|---model
| |---GlobalProxyServer.ets // 模型层-服务器管理
| |---VideoPlayerManager.ets // 模型层-音视频管理
|---utils
| |---utils.ets // 工具
|---view
| |---VideoCacheView.ets // 视图层-应用主页面
模块依赖
本实例依赖common模块来实现日志的打印、资源 的调用、动态路由模块来实现页面的动态加载以及video-cache,版本为1.0.0。
最后
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(**ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony****多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)**技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料
获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料****
鸿蒙(HarmonyOS NEXT)最新学习路线
- HarmonOS基础技能
- HarmonOS就业必备技能
- HarmonOS多媒体技术
be1f983b5a4ff6.png)
- HarmonOS就业必备技能
- HarmonOS多媒体技术