第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/7/30 8:47:35 阅读更多 →
告别PDF依赖:构建高效Python学习体系的四步实践

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

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

2026/7/30 8:47:35 阅读更多 →
电子楼书:从纸质楼书到沉浸式数字营销工具

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

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

2026/7/30 8:47:35 阅读更多 →

最新新闻

如何用VASP计算拉曼活性:材料光谱模拟的终极指南

如何用VASP计算拉曼活性:材料光谱模拟的终极指南

如何用VASP计算拉曼活性:材料光谱模拟的终极指南 【免费下载链接】VASP Python program to evaluate off-resonance Raman activity using VASP code as the backend. 项目地址: https://gitcode.com/gh_mirrors/va/VASP 在材料科学研究中,拉曼光…

2026/7/30 8:55:38 阅读更多 →
彻底搞懂MB与Mb区别:网络带宽与下载速度换算指南

彻底搞懂MB与Mb区别:网络带宽与下载速度换算指南

1. 从一次“网速翻车”说起:为什么你的下载速度总对不上? 前阵子帮一个朋友远程处理问题,他刚升级了家里的宽带套餐,运营商宣传是“千兆宽带,下载速度可达125MB/s”。他兴冲冲地跑去下载一个大型游戏,结果一…

2026/7/30 8:55:38 阅读更多 →
Unity游戏翻译终极指南:XUnity.AutoTranslator完全配置手册

Unity游戏翻译终极指南:XUnity.AutoTranslator完全配置手册

Unity游戏翻译终极指南:XUnity.AutoTranslator完全配置手册 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏中的对话和菜单而烦恼吗?XUnity.AutoTranslator是一款专…

2026/7/30 8:55:38 阅读更多 →
软件易用性测试实战指南:从核心维度到完整流程

软件易用性测试实战指南:从核心维度到完整流程

1. 项目概述:为什么“易用性”是软件成败的隐形战场 干了十几年软件开发和测试,我越来越觉得,一个软件能不能活下来、能不能火起来,很多时候不是看它功能有多强大,而是看它用起来有多“顺”。这个“顺”,就…

2026/7/30 8:55:38 阅读更多 →
2026全网AI论文工具排行榜[特殊字符]真实实测排名,第一名实至名归

2026全网AI论文工具排行榜[特殊字符]真实实测排名,第一名实至名归

2026双检新规落地!市面上AI论文工具五花八门、翻车率爆表😭 很多工具看着热度高,实则AI痕迹爆炸、降重生硬、查重不准、论文泄露! 耗时一周全平台实测对比,从双检通过率、改写质感、功能全面性、隐私安全性、性价比五…

2026/7/30 8:55:38 阅读更多 →
从指令大全到自动化工作流:提升效率的脚本编写与思维跃迁

从指令大全到自动化工作流:提升效率的脚本编写与思维跃迁

1. 项目概述:从“指令”到“高效工作流”的思维跃迁在数字时代,“指令”这个词几乎无处不在。从我们每天在命令行里敲下的ls、cd,到游戏里输入的控制台代码,再到智能设备中那些神秘的AT指令,它们本质上都是一套与系统或…

2026/7/30 8:54:37 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻