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与系统媒体控制进行集成,提供了系统级的媒体控制体验。