# azxcvn/xiaomiao-player architecture

> Architecture diagram of the GitHub repository azxcvn/xiaomiao-player, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/azxcvn/xiaomiao-player
- Repository: https://github.com/azxcvn/xiaomiao-player

## Overview

小喵 Player is an Android Flutter media player centered on browsing a local video library and playing selected media. The main workflow is library scan and browse → open media in the player → load playback enhancements and save playback state. The README also documents distinct Bilibili, network-storage, subtitle/danmaku, download, and casting capabilities. Paths identify the relevant product areas; sampled native code confirms Android support for filesystem scanning, media metadata, and background playback. Other subsystem wiring is represented only where documented.

Main entry points: [`lib/pages/player/player_page.dart`](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/player/player_page.dart) (Video player), [`lib/pages/home/home_page.dart`](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/home/home_page.dart) (Library browsing), [`lib/pages/bilibili/bili_index_page.dart`](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/bilibili/bili_index_page.dart) (Bilibili pages), [`android/app/src/main/kotlin/com/azxcvn/moumou/MainActivity.kt`](https://github.com/azxcvn/xiaomiao-player/blob/main/android/app/src/main/kotlin/com/azxcvn/moumou/MainActivity.kt) (Android activity)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_library["Media library"]
  node_home["Library browsing<br/>[home_page.dart]"]
  node_scanner["Video scanning<br/>[video_scanner.dart]"]
end

subgraph group_playback["Playback"]
  node_player["Video player<br/>[player_page.dart]"]
  node_audio["Audio playback"]
  node_media_engine["Playback engine<br/>[media_kit.dart]"]
  node_history["Playback history"]
  node_progress["Playback progress"]
  node_danmaku["Danmaku service"]
  node_subtitle["Subtitle service"]
end

subgraph group_online["Online media"]
  node_bili_ui["Bilibili pages"]
  node_bili_video["Bilibili video"]
  node_bili_auth["Bilibili auth"]
end

subgraph group_transfer["Transfer and cast"]
  node_network_ui["Network browser"]
  node_network_repo["Network repository"]
  node_network_proxy["Network stream proxy"]
  node_downloads["Download manager"]
  node_download_ui["Download page"]
  node_cast["Casting service<br/>[cast_service.dart]"]
  node_lan_server["LAN media server"]
end

subgraph group_platform["Android support"]
  node_fswalker["Filesystem walker<br/>[VideoFsWalker.kt]"]
  node_media_info["Media metadata<br/>[MediaInfoHelper.kt]"]
  node_android_activity["Android activity<br/>[MainActivity.kt]"]
  node_background["Background playback"]
end

node_user(("User"))
node_media_store[("Android media store")]
node_bili_service(("Bilibili"))
node_dan_service(("弹弹Play"))
node_subtitle_sources(("Subtitle providers"))
node_tv(("DLNA television"))

node_user -->|"opens"| node_home
node_home -->|"requests scan"| node_scanner
node_scanner -->|"scans files"| node_fswalker
node_fswalker -->|"enumerates media"| node_media_store
node_home -->|"opens media"| node_player
node_player -->|"plays media"| node_media_engine
node_player -->|"records history"| node_history
node_player -->|"saves progress"| node_progress
node_player -->|"loads danmaku"| node_danmaku
node_danmaku -->|"fetches comments"| node_dan_service
node_player -->|"loads subtitles"| node_subtitle
node_subtitle -->|"searches subtitles"| node_subtitle_sources
node_user -->|"browses"| node_bili_ui
node_bili_ui -->|"manages login"| node_bili_auth
node_bili_ui -->|"requests video"| node_bili_video
node_bili_video -->|"fetches streams"| node_bili_service
node_user -->|"browses storage"| node_network_ui
node_network_ui -->|"requests listings"| node_network_repo
node_network_repo -->|"provides streams"| node_network_proxy
node_network_proxy -->|"serves media"| node_player
node_user -->|"manages downloads"| node_download_ui
node_download_ui -->|"controls tasks"| node_downloads
node_user -->|"starts casting"| node_cast
node_cast -->|"serves media"| node_lan_server
node_lan_server -->|"streams media"| node_tv
node_player -->|"requests background playback"| node_android_activity
node_android_activity -->|"starts service"| node_background
node_android_activity -->|"requests metadata"| node_media_info

click node_home "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/home/home_page.dart"
click node_scanner "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/video_scanner.dart"
click node_fswalker "https://github.com/azxcvn/xiaomiao-player/blob/main/android/app/src/main/kotlin/com/azxcvn/moumou/VideoFsWalker.kt"
click node_media_info "https://github.com/azxcvn/xiaomiao-player/blob/main/android/app/src/main/kotlin/com/azxcvn/moumou/MediaInfoHelper.kt"
click node_player "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/player/player_page.dart"
click node_audio "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/player/audio_player_page.dart"
click node_media_engine "https://github.com/azxcvn/xiaomiao-player/blob/main/third_party/media_kit/lib/media_kit.dart"
click node_history "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/playback_history_service.dart"
click node_progress "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/playback_progress_service.dart"
click node_danmaku "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/danmaku_service.dart"
click node_subtitle "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/subtitle_service.dart"
click node_bili_ui "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/bilibili/bili_index_page.dart"
click node_bili_video "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/bilibili/bili_video_service.dart"
click node_bili_auth "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/bilibili/bili_auth_service.dart"
click node_network_ui "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/network/network_browser_page.dart"
click node_network_repo "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/network/network_repository.dart"
click node_network_proxy "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/network/network_streaming_proxy.dart"
click node_downloads "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/download/download_manager.dart"
click node_download_ui "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/download/download_manager_page.dart"
click node_cast "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/cast/cast_service.dart"
click node_lan_server "https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/cast/lan_media_server.dart"
click node_android_activity "https://github.com/azxcvn/xiaomiao-player/blob/main/android/app/src/main/kotlin/com/azxcvn/moumou/MainActivity.kt"
click node_background "https://github.com/azxcvn/xiaomiao-player/blob/main/android/app/src/main/kotlin/com/azxcvn/moumou/BackgroundPlaybackService.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_home,node_scanner,node_user toneBlue
class node_player,node_audio,node_media_engine,node_history,node_progress,node_danmaku,node_subtitle,node_media_store toneAmber
class node_bili_ui,node_bili_video,node_bili_auth toneMint
class node_network_ui,node_network_repo,node_network_proxy,node_downloads,node_download_ui,node_cast,node_lan_server toneRose
class node_fswalker,node_media_info,node_android_activity,node_background,node_bili_service,node_dan_service,node_subtitle_sources,node_tv toneIndigo
```

## Components

### Media library

- [Library browsing](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/home/home_page.dart): `lib/pages/home/home_page.dart`
- [Video scanning](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/video_scanner.dart): `lib/services/video_scanner.dart`

### Playback

- [Video player](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/player/player_page.dart): `lib/pages/player/player_page.dart`
- [Audio playback](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/player/audio_player_page.dart): `lib/pages/player/audio_player_page.dart`
- [Playback engine](https://github.com/azxcvn/xiaomiao-player/blob/main/third_party/media_kit/lib/media_kit.dart): `third_party/media_kit/lib/media_kit.dart`
- [Playback history](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/playback_history_service.dart): `lib/services/playback_history_service.dart`
- [Playback progress](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/playback_progress_service.dart): `lib/services/playback_progress_service.dart`
- [Danmaku service](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/danmaku_service.dart): `lib/services/danmaku_service.dart`
- [Subtitle service](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/subtitle_service.dart): `lib/services/subtitle_service.dart`

### Online media

- [Bilibili pages](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/bilibili/bili_index_page.dart): `lib/pages/bilibili/bili_index_page.dart`
- [Bilibili video](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/bilibili/bili_video_service.dart): `lib/services/bilibili/bili_video_service.dart`
- [Bilibili auth](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/bilibili/bili_auth_service.dart): `lib/services/bilibili/bili_auth_service.dart`

### Transfer and cast

- [Network browser](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/network/network_browser_page.dart): `lib/pages/network/network_browser_page.dart`
- [Network repository](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/network/network_repository.dart): `lib/services/network/network_repository.dart`
- [Network stream proxy](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/network/network_streaming_proxy.dart): `lib/services/network/network_streaming_proxy.dart`
- [Download manager](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/download/download_manager.dart): `lib/services/download/download_manager.dart`
- [Download page](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/pages/download/download_manager_page.dart): `lib/pages/download/download_manager_page.dart`
- [Casting service](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/cast/cast_service.dart): `lib/services/cast/cast_service.dart`
- [LAN media server](https://github.com/azxcvn/xiaomiao-player/blob/main/lib/services/cast/lan_media_server.dart): `lib/services/cast/lan_media_server.dart`

### Android support

- [Filesystem walker](https://github.com/azxcvn/xiaomiao-player/blob/main/android/app/src/main/kotlin/com/azxcvn/moumou/VideoFsWalker.kt): `android/app/src/main/kotlin/com/azxcvn/moumou/VideoFsWalker.kt`
- [Media metadata](https://github.com/azxcvn/xiaomiao-player/blob/main/android/app/src/main/kotlin/com/azxcvn/moumou/MediaInfoHelper.kt): `android/app/src/main/kotlin/com/azxcvn/moumou/MediaInfoHelper.kt`
- [Android activity](https://github.com/azxcvn/xiaomiao-player/blob/main/android/app/src/main/kotlin/com/azxcvn/moumou/MainActivity.kt): `android/app/src/main/kotlin/com/azxcvn/moumou/MainActivity.kt`
- [Background playback](https://github.com/azxcvn/xiaomiao-player/blob/main/android/app/src/main/kotlin/com/azxcvn/moumou/BackgroundPlaybackService.kt): `android/app/src/main/kotlin/com/azxcvn/moumou/BackgroundPlaybackService.kt`

### Other components

- **User**
- **Android media store**
- **Bilibili**
- **弹弹Play**
- **Subtitle providers**
- **DLNA television**

## Connections

- User → Library browsing: opens
- Library browsing → Video scanning: requests scan
- Video scanning → Filesystem walker: scans files
- Filesystem walker → Android media store: enumerates media
- Library browsing → Video player: opens media
- Video player → Playback engine: plays media
- Video player → Playback history: records history
- Video player → Playback progress: saves progress
- Video player → Danmaku service: loads danmaku
- Danmaku service → 弹弹Play: fetches comments
- Video player → Subtitle service: loads subtitles
- Subtitle service → Subtitle providers: searches subtitles
- User → Bilibili pages: browses
- Bilibili pages → Bilibili auth: manages login
- Bilibili pages → Bilibili video: requests video
- Bilibili video → Bilibili: fetches streams
- User → Network browser: browses storage
- Network browser → Network repository: requests listings
- Network repository → Network stream proxy: provides streams
- Network stream proxy → Video player: serves media
- User → Download page: manages downloads
- Download page → Download manager: controls tasks
- User → Casting service: starts casting
- Casting service → LAN media server: serves media
- LAN media server → DLNA television: streams media
- Video player → Android activity: requests background playback
- Android activity → Background playback: starts service
- Android activity → Media metadata: requests metadata
