0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在HarmonyOS中使用AVPlayer实现外挂字幕

HarmonyOS开发者 来源:HarmonyOS开发者 2025-10-15 11:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言:为什么需要“外挂字幕”?

在视频播放场景中,用户常需要外挂字幕(如 SRT、VTT 等格式)来提升观看体验,尤其是在外语教学、影视解说、直播回放等场景中。

HarmonyOS 通过 ArkTS + AVPlayer 的 subtitleUpdate 事件机制,我们可以实现视频播放前预加载字幕,并动态显示字幕内容,真正实现“外挂字幕”功能!

一、核心能力:AVPlayer 支持 subtitleUpdate 事件

HarmonyOS 的 AVPlayer 提供了以下关键接口,用于实现外挂字幕:

// 注册字幕更新事件
 avPlayer.on('subtitleUpdate',async(info: media.SubtitleInfo) => {
 // 获取当前播放帧对应的字幕信息
 if(info) {
  lettext = (!info.text) ?'': info.text
  letstartTime = (!info.startTime) ?0: info.startTime
  letduration = (!info.duration) ?0: info.duration
  console.info('subtitleUpdate info: text='+ text +' startTime='+ startTime +' duration='+ duration);
  }else{
  console.info('subtitleUpdate info is null');
  }
 });
}

SubtitleInfo 结构如下:

interfaceSubtitleInfo{
text:string;  // 字幕文本
startTime:number;// 字幕开始显示的时间(毫秒),以视频播放开始的时刻为 0 点
endTime:number; // 字幕结束显示的时间(毫秒)
}

二、实现方案:外挂字幕

字幕文件格式(SRT 示例)

1
0001,000 --> 0004,000
这是第一行字幕。
2
0005,000 --> 0008,000
这是第二行字幕。

步骤 1:调用addSubtitleFromFd,使用视频播放的AVPlayer实例设置外挂字幕资源。

import{ media }from'@kit.MediaKit';
import{ common }from'@kit.AbilityKit';
// 类成员定义avPlayer和context。
privateavPlayer: media.AVPlayer|null=null;
privatecontext: common.UIAbilityContext|undefined=undefined;

// 在业务函数中(示例工程函数名为avSetupVideoAndSubtitle):
// 创建avPlayer实例对象。
this.avPlayer=awaitmedia.createAVPlayer();
this.context=this.getUIContext().getHostContext()ascommon.UIAbilityContext;
// 设定视频源(此处省略)。
// 设定字幕。
letfileDescriptorSub =awaitthis.context?.resourceManager.getRawFd('xxx.srt');
this.avPlayer.addSubtitleFromFd(fileDescriptorSub.fd, fileDescriptorSub.offset, fileDescriptorSub.length);

步骤 2:调用on('subtitleUpdate')接口,注册字幕回调函数。

import{ media }from'@kit.MediaKit';
// 类成员定义用来显示的字幕字符串。
@Statesubtitle:string='subtitleUpdate info';
privateavPlayer: media.AVPlayer|null=null;
privatetag:string='';
// 创建avPlayer实例对象。
this.avPlayer=awaitmedia.createAVPlayer();
// 字幕回调函数。
this.avPlayer.on('subtitleUpdate',(info: media.SubtitleInfo) =>{
 if(!!info) {
  lettext = (!info.text) ?'': info.text;
  letstartTime = (!info.startTime) ?0: info.startTime;
  letduration = (!info.duration) ?0: info.duration;
  console.info(`${this.tag}: text=${text}startTime=${startTime}duration=${duration}`);
  this.subtitle= text;
 }else{
  console.info(`${this.tag}: subtitleUpdate info is null`);
 }
});

步骤 3:(可选)当需要不显示字幕的时候,使用视频播放的AVPlayer实例注销字幕回调函数。

import{ media }from'@kit.MediaKit';
// 类成员定义avPlayer和context。
privateavPlayer: media.AVPlayer|null=null;
// 创建avPlayer实例对象。
this.avPlayer=awaitmedia.createAVPlayer();
this.avPlayer?.off('subtitleUpdate');

三、关键说明:当前仅支持“播放前设置字幕”

重要限制:

当前 HarmonyOS 的 AVPlayer 不支持动态切换字幕源(如切换不同语言字幕)

仅支持在播放前完成字幕文件加载与解析

但优势在于:

字幕与视频播放时间精准同步

支持自定义字幕样式、位置、动画效果

适合离线视频、教学课件、本地字幕场景

四、结语

借助 subtitleUpdate 事件与 timeUpdate 的联动机制实现外挂字母的自动加载:

实现精准时间同步

支持 SRT/VTT 等格式解析

构建可自定义、可扩展的字幕系统

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 视频
    +关注

    关注

    6

    文章

    1999

    浏览量

    74649
  • avplayer
    +关注

    关注

    0

    文章

    5

    浏览量

    1035
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35589

原文标题:【HarmonyOS-媒体技术-AVPlayer】手把手教你用 AVPlayer 实现外挂字幕(ArkTS 详解)

文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于开源鸿蒙的AVPlayer视频播控开发样例

    开源鸿蒙生态建设中,多媒体能力是构建丰富用户体验的核心要素。本开发样例基于AVPlayer实现AvPlayer支持流媒体和本地资源解析、媒体资源解封装、视频解码和渲染功能,适用于对
    的头像 发表于 08-21 10:22 2366次阅读
    基于开源鸿蒙的<b class='flag-5'>AVPlayer</b>视频播控开发样例

    HarmonyOS中使AVPlayer播放流媒体

    HarmonyOS 中,使用 AVPlayer 播放流媒体,不是“能播就行”,而是要“稳、准、快、可控”。
    的头像 发表于 10-15 11:45 1386次阅读
    <b class='flag-5'>在</b><b class='flag-5'>HarmonyOS</b><b class='flag-5'>中使</b>用<b class='flag-5'>AVPlayer</b>播放流媒体

    基于SaaS模式的数字电视字幕控制系统

    【作者】:巫江;杨峰;唐继勇;管金称;【来源】:《电视技术》2010年02期【摘要】:介绍了基于SaaS模式的字幕控制系统,实现分散编辑集中管理。通过使用XML作为中间标准数据传输格式,采用全新
    发表于 04-23 11:21

    蓝光电影完美支持 ,海美迪HD300A高清播放器跌至底线

    外挂字幕调整菜单提供众多可调整选项字幕轨切换字幕编码字幕大小字幕颜色字幕轮廓颜色
    发表于 05-14 13:58

    海美迪 800B蓝光硬盘播放机率先支持蓝光原版独家外挂字幕

    多条字幕(简繁字幕、导评等可以同时一起挂上,或连续剧等同时挂多条字幕,按字幕键分别选择),而且按字幕键选用时
    发表于 11-11 10:37

    海美迪HD800B高清播放机蓝光测试篇!

    源的介质就是蓝光ISO文件。影片封面预览蓝光菜单很火爆有电子风格,像是游戏界面。场景选单,可选择你喜欢的段落播放。这里可以选择音轨和字幕语言,先选择DTS-HD吧,播放影片时还可以随时更改。同样支持外挂字幕
    发表于 11-30 12:37

    《Visual C# 2008程序设计经典案例设计与实现》---滚动字幕屏幕保护程序

    《Visual C# 2008程序设计经典案例设计与实现》---滚动字幕屏幕保护程序.zip
    发表于 06-17 23:03

    《Visual C# 2008程序设计经典案例设计与实现》---滚动字幕动画窗体

    《Visual C# 2008程序设计经典案例设计与实现》---滚动字幕动画窗体.zip
    发表于 06-20 22:07

    HarmonyOS音频开发指导:使用AVPlayer开发音频播放功能

    应用使用。 ● 音频播放中,应用时常需要用到一些急促简短的音效,如相机快门音效、按键音效、游戏射击音效等,当前只能使用AVPlayer播放音频文件替代实现
    发表于 10-19 14:26

    LCD广告字幕机的设计与实现

    LCD广告字幕机的设计与实现一、实验目的 1.了解12864点阵型液晶显示器的显示原理。 2.掌握12864点阵型液晶显示器的接口设计。 3.利用12864点阵型液晶显
    发表于 05-03 01:19 59次下载

    MPlayer字幕问题解决方法

    MPlayer支持挂载.utf .idx .sub .srt .smi .rt .txt .ssa .aq .jss .js .ass等格式文件。通过工具-外挂字幕或者右键菜单可以方便的添加字幕
    发表于 02-23 10:20 6518次阅读
    MPlayer<b class='flag-5'>字幕</b>问题解决方法

    YouTube测试谷歌字幕自动生成技术

    YouTube测试谷歌字幕自动生成技术 现在,YouTube针对数百万段视频推出字幕自动生成技术,最开始是为语音清晰的英语视频提供自动生成的字幕,这一举措深受有听力障
    发表于 03-05 09:59 1391次阅读

    基于MAX7456的视频字幕模块的设计与实现

    本文介绍了OSD系统的基本构成,并从硬件和软件两方面阐述了使用MAX7456搭建模拟电视字幕随屏显示系统的技术要点。
    发表于 05-10 14:14 8629次阅读
    基于MAX7456的视频<b class='flag-5'>字幕</b>模块的设计与<b class='flag-5'>实现</b>

    爱情洗牌字幕源代码

    爱情洗牌字幕源代码
    发表于 06-21 16:04 11次下载

    Eros Now利用Google Cloud实现AI驱动的字幕功能

    “通过使用AI框架和大量预先存在的数据,Eros Now的内部数据科学团队模拟,培训和开发了一种先进的模型,该模型的性能相当于人类,并且能够生成所需的字幕电影和原著中使用的语言”,该公司一份新闻稿中说。
    的头像 发表于 03-15 13:44 2689次阅读