# baiyang520/allmusic_netapi architecture

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

- Interactive diagram: https://gitdiagram.com/baiyang520/allmusic_netapi
- Repository: https://github.com/baiyang520/allmusic_netapi

## Overview

netapi-bilibili is an AllMusic music-source adapter: AllMusic requests search results or resolves a BV/av ID into video metadata and a playable URL. Playback retrieves the best available audio stream, remuxes it to M4A, caches it, and exposes it over a local HTTP server for the client. The graph reflects sampled call paths and documented playback behavior; some stream-server internals were only partially sampled.

Main entry points: [`src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliStreamServer.java`](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliStreamServer.java) (Stream Server), [`src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliApi.java`](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliApi.java) (Bilibili API), [`src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliHttpClient.java`](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliHttpClient.java) (HTTP Client), [`src/main/java/io/github/Baiyang521/netapi/BiliApiMain.java`](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/BiliApiMain.java) (Music API Adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_adapter["AllMusic Adapter"]
  node_main["Music API Adapter<br/>[BiliApiMain.java]"]
end

subgraph group_bili["Bilibili API"]
  node_api["Bilibili API<br/>[BilibiliApi.java]"]
  node_video["Video Metadata<br/>[VideoInfo.java]"]
  node_session["Session and WBI"]
  node_signer["WBI Signer"]
  node_http["HTTP Client"]
end

subgraph group_playback["Playback Serving"]
  node_stream["Stream Server"]
  node_remuxer["M4A Remuxer"]
  node_cache[("M4A Cache")]
end

node_allmusic(("AllMusic Server"))
node_bilibili{{"Bilibili APIs"}}
node_client(("AllMusic Client"))

node_allmusic -->|"calls API"| node_main
node_main -->|"searches / resolves"| node_api
node_api -->|"gets signing key"| node_session
node_session -->|"derives key"| node_signer
node_session -->|"fetches session data"| node_http
node_api -->|"signs search"| node_signer
node_api -->|"requests metadata / audio"| node_http
node_http -->|"sends requests"| node_bilibili
node_api -->|"builds metadata"| node_video
node_main -->|"creates stream URL"| node_stream
node_stream -->|"downloads audio"| node_http
node_stream -->|"remuxes audio"| node_remuxer
node_stream -->|"reads / writes M4A"| node_cache
node_client -->|"requests playback"| node_stream
node_stream -->|"serves M4A"| node_client

click node_main "https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/BiliApiMain.java"
click node_api "https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliApi.java"
click node_video "https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/VideoInfo.java"
click node_session "https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliSession.java"
click node_signer "https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliWbiSigner.java"
click node_http "https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliHttpClient.java"
click node_stream "https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliStreamServer.java"
click node_remuxer "https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliRemuxer.java"
click node_cache "https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliStreamServer.java"

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_main,node_client toneBlue
class node_api,node_video,node_session,node_signer,node_http toneAmber
class node_stream,node_remuxer,node_cache,node_allmusic,node_bilibili toneMint
```

## Components

### AllMusic Adapter

- [Music API Adapter](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/BiliApiMain.java): `src/main/java/io/github/Baiyang521/netapi/BiliApiMain.java`

### Bilibili API

- [Bilibili API](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliApi.java): `src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliApi.java`
- [Video Metadata](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/VideoInfo.java): `src/main/java/io/github/Baiyang521/netapi/bilibili/VideoInfo.java`
- [Session and WBI](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliSession.java): `src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliSession.java`
- [WBI Signer](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliWbiSigner.java): `src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliWbiSigner.java`
- [HTTP Client](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliHttpClient.java): `src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliHttpClient.java`

### Playback Serving

- [Stream Server](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliStreamServer.java): `src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliStreamServer.java`
- [M4A Remuxer](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliRemuxer.java): `src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliRemuxer.java`
- [M4A Cache](https://github.com/baiyang520/allmusic_netapi/blob/main/src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliStreamServer.java): `src/main/java/io/github/Baiyang521/netapi/bilibili/BilibiliStreamServer.java`

### Other components

- **AllMusic Server**
- **Bilibili APIs**
- **AllMusic Client**

## Connections

- AllMusic Server → Music API Adapter: calls API
- Music API Adapter → Bilibili API: searches / resolves
- Bilibili API → Session and WBI: gets signing key
- Session and WBI → WBI Signer: derives key
- Session and WBI → HTTP Client: fetches session data
- Bilibili API → WBI Signer: signs search
- Bilibili API → HTTP Client: requests metadata / audio
- HTTP Client → Bilibili APIs: sends requests
- Bilibili API → Video Metadata: builds metadata
- Music API Adapter → Stream Server: creates stream URL
- Stream Server → HTTP Client: downloads audio
- Stream Server → M4A Remuxer: remuxes audio
- Stream Server → M4A Cache: reads / writes M4A
- AllMusic Client → Stream Server: requests playback
- Stream Server → AllMusic Client: serves M4A
