TTMusic播放流程分析.md 15 KB

TTMusic APP 播放流程详细分析

1. 架构概览

TTMusic采用了分层架构设计,主要包含以下核心组件:

  • UnifiedPlayerService: 统一播放器服务,提供高级播放控制接口
  • PlayerManager: 播放器管理器,负责ijkPlayer实例的管理和音频会话
  • PlayerStateModel: 播放状态模型,管理播放状态并提供状态验证
  • PlaylistModel: 播放列表模型,管理播放列表和播放导航逻辑
  • IjkMediaPlayer: 基于ijkplayer的播放器核心实现
  • AvSessionController: 系统媒体会话控制,实现系统级媒体控制
  • VideoItem: 媒体数据模型,表示音频/视频文件

2. 播放流程详细分析

2.1 初始化流程

  1. 应用启动时

  2. 播放器初始化

  3. AVSession初始化

2.2 播放控制流程

2.2.1 点击播放/恢复播放

  1. 用户触发播放

  2. 服务就绪检查

  3. 获取当前歌曲

  4. 播放器状态检查

  5. 设置播放器

  6. 准备播放

  7. 开始播放

  8. 状态更新

2.2.2 点击暂停

  1. 用户触发暂停

  2. 保存播放位置

  3. 暂停播放器

  4. 更新状态

2.2.3 点击下一首

  1. 用户触发下一首

  2. 服务就绪检查

  3. 播放列表导航

  4. 更新状态模型

  5. 停止当前播放

  6. 播放新歌曲

2.2.4 点击上一首

  1. 用户触发上一首

  2. 流程与下一首类似

2.3 播放器状态管理

2.3.1 状态回调机制

  1. PlayerManager回调

  2. PlayerStateModel状态更新

  3. 状态监听通知

2.3.2 进度更新机制

  1. 进度定时器

  2. 进度获取

  3. 进度保存

2.4 系统媒体会话控制

2.4.1 AVSession初始化

  1. 创建会话

  2. 设置元数据

  3. 设置播放状态

2.4.2 系统控制命令处理

  1. 命令监听

    • setAvSessionListener() 设置系统控制监听器
    • 监听播放、暂停、停止、下一首、上一首、拖动等命令
  2. 命令处理

2.5 播放列表管理

2.5.1 播放列表操作

  1. 添加歌曲

  2. 移除歌曲

  3. 替换播放列表

2.5.2 播放模式

  1. 播放模式类型

  2. 播放模式切换

2.6 数据持久化

2.6.1 状态保存

  1. 播放状态保存

    • saveCurrentState() 保存当前播放状态
    • 使用DataPersistenceService保存到持久化存储
  2. 播放位置保存

2.6.2 状态恢复

  1. 从内存恢复

  2. 从持久化存储恢复

  3. 播放位置恢复

3. 错误处理机制

3.1 错误类型

3.2 错误恢复策略

  1. 错误处理

  2. 恢复动作

4. 总结

TTMusic的播放流程采用了分层架构设计,通过UnifiedPlayerService提供统一的播放控制接口,底层使用ijkplayer进行实际的音频解码和播放。整个播放流程包括初始化、播放控制、状态管理、系统媒体会话控制、播放列表管理、数据持久化和错误处理等环节,形成了一个完整的音乐播放器系统。

系统通过状态模型、播放列表模型和播放器管理器的协同工作,实现了复杂的播放控制逻辑,同时通过AVSessionController与系统媒体控制进行集成,提供了系统级的媒体控制体验。