第17章_HarmonyOs开发图解之 媒体会话管理
第17章 HarmonyOs开发图解之 媒体会话管理HarmonyOS 学习系统 | 阶段三高级深耕期学习目标序号能力1理解 AVSession 四大核心类Browser/Controller/BrowserService/Session的分工2能够实现客户端与服务端的媒体会话连接与控制3掌握播放列表的订阅与媒体数据的获取核心图解内容讲解17.1 媒体会话管理概述AVSession 框架是 HarmonyOS 提供的标准化媒体控制协议它将媒体播放的控制方和播放方解耦。控制方如系统媒体栏、蓝牙耳机、语音助手不需要知道播放方的内部实现只需通过 AVSession 定义的标准接口即可控制播放。生活化类比AVSession 就像遥控器 电视的约定想象你有一个万能遥控器AVController/AVBrowser可以控制任何品牌的电视AVBrowserService。但遥控器和电视之间需要一套约定——按 1 号键是什么功能按 2 号键是什么功能。AVSession 就是这套约定它定义了播放/暂停/上一曲/下一曲等标准控制指令。而 AVElement 就像电视节目单告诉遥控器有哪些节目可以看。17.2 AVSession 四大核心类类名角色使用位置说明AVBrowser媒体浏览器客户端用于浏览和发现媒体内容AVController媒体控制器客户端用于控制播放播放/暂停/上下曲AVBrowserService媒体浏览器服务服务端提供媒体内容给客户端浏览AVSession媒体会话服务端管理播放状态接收控制指令17.3 客户端连接与控制客户端通过 AVBrowser 连接到服务端的 AVBrowserService连接成功后创建 AVController 来控制播放。// 创建 AVBrowser 连接服务AVBrowseravBrowsernewAVBrowser(context,newElementName(com.example,AVService),newAVConnectionCallback(){OverridepublicvoidonConnected(){// 连接成功创建控制器AVControllercontrollernewAVController(context,avBrowser.getAVToken());controller.setAVControllerCallback(myCallback);// 订阅媒体数据获取播放列表avBrowser.subscribeByParentMediaId(root,newAVSubscriptionCallback(){OverridepublicvoidonAVElementListLoaded(ListAVElementlist){// 获取播放列表更新 UIfor(AVElementelement:list){HiLog.info(TAG,媒体: element.getTitle());}}});}OverridepublicvoidonDisconnected(){HiLog.info(TAG,与服务端断开连接);}},null);avBrowser.connect();// 发起连接// 控制播放controller.getPlayControls().play();controller.getPlayControls().pause();controller.getPlayControls().skipToNext();controller.getPlayControls().skipToPrevious();17.4 服务端提供媒体内容服务端通过继承 AVBrowserService 并配合 AVSession 来提供媒体内容publicclassAVServiceextendsAVBrowserService{OverridepublicvoidonGetRoot(ElementNamecaller,inttransportId,BundlerootHints){// 返回根媒体ID客户端通过此ID订阅内容setSessionToken(session.getSessionToken());}OverridepublicvoidonLoadChildren(StringparentMediaId,ResultListAVElementresult){// 根据 parentMediaId 返回对应的媒体列表ListAVElementelementsqueryMediaList(parentMediaId);result.sendResult(elements);}}代码速查卡API功能示例new AVBrowser(ctx, name, cb, opts)创建媒体浏览器new AVBrowser(context, elementName, callback, null)avBrowser.connect()连接服务端avBrowser.connect()new AVController(ctx, token)创建媒体控制器new AVController(context, avBrowser.getAVToken())getPlayControls().play()播放controller.getPlayControls().play()getPlayControls().pause()暂停controller.getPlayControls().pause()subscribeByParentMediaId()订阅媒体列表avBrowser.subscribeByParentMediaId(root, cb)setSessionToken(token)设置会话令牌setSessionToken(session.getSessionToken())与 Android/iOS 对比特性HarmonyOSAndroidiOS会话框架AVSessionMediaSessionMPNowPlayingInfoCenter浏览器AVBrowser / AVBrowserServiceMediaBrowser / MediaBrowserService不提供需自建控制器AVControllerMediaControllerMPRemoteCommandCenter系统媒体栏自动集成自动集成自动集成通知栏控制通过 AVSession通过 MediaSession通过 MPNowPlayingInfoCenter⚠️ 踩坑回忆录为什么 AVBrowser 连不上 AVBrowserServiceAVBrowser 和 AVBrowserService 是一对 CP必须在 config.json 中正确配置 Ability 的 type 和 name。我犯过一个低级错误Service 的 BundleName 写错了导致连接回调永远不会触发——整个下午都在排查代码逻辑最后发现是配置文件里的一个字母写错了。另一个坑subscribeByParentMediaId前必须先调用unsubscribeByParentMediaId否则会重复订阅导致回调被多次触发。这个先退后进的设计让人防不胜防建议在 onConnected 里先统一 unsubscribe 一次。必做实操任务序号任务难度1实现一个简单的音乐播放服务端提供播放列表高2实现客户端连接服务端并控制播放/暂停高3在客户端展示播放列表通过 subscribeByParentMediaId中4实现上一曲/下一曲切换功能中5配合系统通知栏实现锁屏状态下的媒体控制高学习检查清单能说出 AVBrowser、AVController、AVBrowserService、AVSession 四者的关系能实现客户端连接服务端的完整流程能使用 AVController 控制播放/暂停/上下曲能通过 subscribeByParentMediaId 获取播放列表知道为什么 subscribe 前需要先 unsubscribe能在 config.json 中正确配置 AVBrowserService理解 AVElement 的作用媒体元数据载体理解客户端与服务端分离的设计思想进阶方向实现完整的音乐播放器 App包含服务端和客户端学习 AVMetadata媒体元数据的设置与获取探索蓝牙耳机按键如何通过 AVSession 控制播放vice理解 AVElement 的作用媒体元数据载体理解客户端与服务端分离的设计思想进阶方向实现完整的音乐播放器 App包含服务端和客户端学习 AVMetadata媒体元数据的设置与获取探索蓝牙耳机按键如何通过 AVSession 控制播放

相关新闻

Qt应用实现自定义URL协议唤醒:从系统注册到单实例通信完整指南

Qt应用实现自定义URL协议唤醒:从系统注册到单实例通信完整指南

1. 项目概述与核心价值 最近在做一个桌面应用项目时,遇到了一个挺有意思的需求:用户点击一个网页上的特定链接,比如 http://myapp://open?filereport.pdf ,就能直接唤醒并打开我本地用 Qt 写的那个应用程序,并且还能…

2026/10/11 13:10:05 阅读更多 →
告别PDF依赖:构建高效Python学习体系的四步实践

告别PDF依赖:构建高效Python学习体系的四步实践

1. 从“找资源”到“建体系”:为什么我不再推荐直接下载PDF最近在技术社区和社群里,经常看到有朋友在问:“有没有《Python从入门到精通》的PDF?求一个百度云或者微盘的链接。” 作为一个写了十几年代码、也带过不少新人的老程序员…

2026/10/11 13:57:23 阅读更多 →
电子楼书:从纸质楼书到沉浸式数字营销工具

电子楼书:从纸质楼书到沉浸式数字营销工具

流光溢彩:电子楼书与VR看房标杆服务商 北京流光溢彩数字文化传媒有限公司深耕房地产数字展示领域近二十年,是国内首批完成UE5引擎全面切换的数字内容服务商之一。公司拥有约200人专业团队和100余项技术专利,累计服务案例超过4950个&#xff…

2026/10/11 13:57:22 阅读更多 →

最新新闻

基于SSM+Vue的流浪动物领养助养系统毕业设计全流程解析

基于SSM+Vue的流浪动物领养助养系统毕业设计全流程解析

去年秋招失败后的那段时间,我每天从学校回出租屋都要绕路经过一家流浪动物救助站。救助站的负责人是个四十多岁的大姐,她给我看了三本厚得像字典的纸质登记册,里面密密麻麻写着编号、转账记录、领养人电话。她说他们最缺的不是爱心&#xff0…

2026/10/12 15:03:44 阅读更多 →
微信官方 Bot API 开放后,ClawBot 插件如何用 TaoToken 统一 Key 接入 AI 能力

微信官方 Bot API 开放后,ClawBot 插件如何用 TaoToken 统一 Key 接入 AI 能力

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 15:03:44 阅读更多 →
OpenClaw 正在重塑我的数字生活:从 SaaS 退订到 Mac Mini 本地推理的 TaoToken 实践

OpenClaw 正在重塑我的数字生活:从 SaaS 退订到 Mac Mini 本地推理的 TaoToken 实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 15:03:44 阅读更多 →
HyperFrames 爆火但别神化:确定性渲染救不了没创意,HTML 视频框架的边界到底在哪

HyperFrames 爆火但别神化:确定性渲染救不了没创意,HTML 视频框架的边界到底在哪

HyperFrames 爆火但别神化:确定性渲染救不了没创意,HTML 视频框架的边界到底在哪 【免费下载链接】hyperframes Write HTML. Render video. Built for agents. 项目地址: https://gitcode.com/GitHub_Trending/hy/hyperframes HyperFrames 火了。…

2026/10/12 15:03:44 阅读更多 →
Azkaban solo-server 0.1.0-SNAPSHOT 部署与工作流调度实战

Azkaban solo-server 0.1.0-SNAPSHOT 部署与工作流调度实战

简介:本资源为Azkaban单服务器版(Solo Server)0.1.0-SNAPSHOT的已编译tar.gz包,面向需要快速搭建工作流调度环境的小型团队、个人开发者及大数据初学者。Azkaban由LinkedIn开源,用于简化Hadoop作业调度,提供…

2026/10/12 15:03:44 阅读更多 →
编译原理实验一词法分析器:从状态图到Token识别的全解析

编译原理实验一词法分析器:从状态图到Token识别的全解析

简介:北邮编译原理课程词法分析器实验的完整源码包,面向正在学习编译原理的本科生,以编译器前端的关键环节为切入点,帮助理解扫描器如何将源代码字符流拆分为记号,并识别关键字、标识符、常量、运算符等词素。包内共4个…

2026/10/12 15:02:42 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →