How devices, channels, and streams differ
Think of an NVR as a building: the device is the whole building, channels are the rooms, and a stream is the picture leaving one room right now. Once these three objects are clear, most status messages become much easier to understand.
Compare the three objects
| Name | What it is | What the page uses it for | Common misunderstanding |
|---|---|---|---|
| Device | A camera, NVR, GB device, or downstream platform | Stores protocol address, account, capabilities, and online state | An online device does not mean every channel has video |
| Channel | One video view that users actually watch | Playback, recording, video wall, permissions, and external mapping | An existing channel does not mean video is being transferred |
| Stream | Live audio/video currently received by MediaServer | Produces HLS, HTTP-FLV, WebRTC, and other playback outputs | A successful start request does not mean the stream already exists |
How they connect
flowchart LR
D["Device: one NVR"] --> C1["Channel 1: front gate"]
D --> C2["Channel 2: warehouse"]
C1 --> S1["Online stream"]
C2 -. "No stream while device is offline" .-> S2["No stream"]
S1 --> P["Live preview"]
S1 --> R["Recording file"]
MediaServer is the media service that receives, converts, forwards, and records video. AKStream.Next manages devices and channels and tells MediaServer when to pull, play, or record a stream.
Why a channel may exist without video
This is common and does not necessarily mean corrupted data:
- The platform has saved the device and channel, so they appear in Asset details.
- The camera is offline, the password is wrong, or preview has not been opened, so MediaServer has not received a stream.
- Without a stream, the browser cannot show video.
Check in this order: channel enabled → stream exists on MediaServer → playback address is reachable. See No video or playback failed for detailed steps.
Recording is not one status either
flowchart LR
A["Schedule matches"] --> B["Recording session runs"]
B --> C["File is written to disk"]
C --> D["Database index is created"]
D --> E["Recording Center can find and play it"]
“Recording started” only means the first steps may have happened. Completion requires a disk file that Recording Center can find and play.
Quick diagnosis table
| What you see | Check first |
|---|---|
| Device online, channel offline | Whether the channel is enabled and Profile/catalog synchronization completed |
| Channel online, no playback address | MediaServer node, stream identity, and whether the stream really exists |
| Stream exists, browser has no video | HTTPS, playback protocol, proxy, codec, and browser console |
| Recording session succeeded, recording is missing | Whether a file was written and Webhook/scanning created the index |
Next step
After understanding these objects, follow Connect the first video. Seeing the device, channel, stream, and player states in the real UI is more useful than memorizing field names.