Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,16 @@ outgoing:

`/api/v1/outgoing.json` on the camera shows whether the destination is live. Majestic can also send to a multicast group (`udp://239.1.2.3:5600`), so several devices can watch one camera. On Wi‑Fi the app holds a multicast lock while it is in a group.

## Debug page (port 8085)

While the app runs it serves its debug information over HTTP on port **8085**, for a browser or `curl` on the same network:

- `http://<device>:8085/` — a page that refreshes itself: device, app version, mode and every cell (resolution, codec, decoded/received fps, pauses);
- `http://<device>:8085/stats.json` — the same as JSON, for scripts;
- `http://<device>:8085/log` — the last 500 lines of the app's log.

Only clients on the local network are answered (loopback, 10/8, 172.16/12, 192.168/16, link-local, IPv6 fc00::/7); others get 403. Logins and passwords are never shown.

## Known limitations

> [!IMPORTANT]
Expand Down Expand Up @@ -185,6 +195,7 @@ Debug and release builds are signed with different keys. To switch from one to t
| `CredentialStore`, `KeystoreCipher` | Encrypted storage of camera URLs (Android Keystore) |
| `FramePool`, `Frame` | Buffer pool that reduces garbage-collector load |
| `App`, `Crash` | Uncaught-exception handler and crash report screen |
| `DebugServer`, `NetInfo` | Debug page on port 8085 (LAN clients only), device addresses |

Network, video decoding and audio run on separate threads, so a slow decoder never blocks the socket.

Expand All @@ -193,6 +204,7 @@ Network, video decoding and audio run on separate threads, so a slow decoder nev
- Credentials are taken from the URL and sent in the `Authorization` header: Basic first, Digest when the camera asks for it. They are not included in the RTSP request line.
- RTSP, RTP over UDP and HTTP are not encrypted, and RTSPS is not supported. Credentials that a camera expects inside the URL path or query (for example `user=…_password=…`) are sent with every request. Use the app only on trusted networks, see [#16](https://github.com/OpenIPC/decoder/issues/16).
- Camera URLs, including passwords, are stored encrypted (AES-256-GCM with a key kept in the Android Keystore, Android 6.0+) in the app's private storage. On Android 5.x, or if the Keystore is unavailable, they are stored in plain text. Backup is disabled (`allowBackup="false"`).
- The debug page on port 8085 is not encrypted and has no password; it answers only local-network clients and never shows logins or passwords.

## Device compatibility

Expand Down
12 changes: 12 additions & 0 deletions README.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,16 @@ outgoing:

`/api/v1/outgoing.json` на камере показывает, идёт ли отправка. Majestic умеет слать и в multicast-группу (`udp://239.1.2.3:5600`), тогда одну камеру могут смотреть несколько устройств. В Wi‑Fi приложение держит multicast lock, пока состоит в группе.

## Отладочная страница (порт 8085)

Пока приложение работает, оно отдаёт отладочную информацию по HTTP на порту **8085** — для браузера или `curl` из той же сети:

- `http://<приставка>:8085/` — страница с автообновлением: устройство, версия, режим и каждая ячейка (разрешение, кодек, fps декодированных/принятых кадров, паузы);
- `http://<приставка>:8085/stats.json` — то же в JSON, для скриптов;
- `http://<приставка>:8085/log` — последние 500 строк лога приложения.

Отвечает только клиентам из локальной сети (loopback, 10/8, 172.16/12, 192.168/16, link-local, IPv6 fc00::/7), остальным — 403. Логины и пароли не показываются.

## Известные ограничения

> [!IMPORTANT]
Expand Down Expand Up @@ -185,6 +195,7 @@ export KEY_PASS=your_key_password
| `CredentialStore`, `KeystoreCipher` | Зашифрованное хранение адресов камер (Android Keystore) |
| `FramePool`, `Frame` | Пул буферов, снижает нагрузку на сборщик мусора |
| `App`, `Crash` | Обработчик необработанных исключений и экран отчёта о сбое |
| `DebugServer`, `NetInfo` | Отладочная страница на порту 8085 (только локальная сеть), адреса устройства |

Сеть, декодирование видео и звук работают в отдельных потоках, поэтому медленный декодер не блокирует сокет.

Expand All @@ -193,6 +204,7 @@ export KEY_PASS=your_key_password
- Логин и пароль берутся из адреса и передаются в заголовке `Authorization`: сначала Basic, Digest — если камера его запросит. В строку RTSP-запроса они не попадают.
- RTSP, RTP по UDP и HTTP без шифрования, RTSPS не поддерживается. Если камера ждёт логин и пароль прямо в пути или параметрах адреса (например, `user=…_password=…`), они уходят с каждым запросом. Используйте приложение только в доверенных сетях, см. [#16](https://github.com/OpenIPC/decoder/issues/16).
- Адреса камер вместе с паролями хранятся в закрытом хранилище приложения в зашифрованном виде (AES-256-GCM, ключ в Android Keystore, Android 6.0+). На Android 5.x или если Keystore недоступен — в открытом виде. Резервное копирование отключено (`allowBackup="false"`).
- Отладочная страница на порту 8085 без шифрования и пароля; она отвечает только клиентам из локальной сети и не показывает логины и пароли.

## Совместимость с устройствами

Expand Down
12 changes: 12 additions & 0 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,16 @@ outgoing:

摄像机上的 `/api/v1/outgoing.json` 可查看推流是否正常。Majestic 也可以推送到组播组(`udp://239.1.2.3:5600`),这样多台设备可以同时观看同一台摄像机。在 Wi‑Fi 下,应用加入组播组期间会持有 multicast lock。

## 调试页面(端口 8085)

应用运行时会在 **8085** 端口通过 HTTP 提供调试信息,可在同一网络中用浏览器或 `curl` 访问:

- `http://<设备>:8085/` — 自动刷新的页面:设备、应用版本、模式以及每个画面(分辨率、编码、已解码/已接收帧率、暂停);
- `http://<设备>:8085/stats.json` — 相同内容的 JSON,便于脚本使用;
- `http://<设备>:8085/log` — 应用日志的最后 500 行。

仅响应本地网络中的客户端(loopback、10/8、172.16/12、192.168/16、链路本地地址、IPv6 fc00::/7),其他地址返回 403。不会显示用户名和密码。

## 已知限制

> [!IMPORTANT]
Expand Down Expand Up @@ -185,6 +195,7 @@ export KEY_PASS=your_key_password
| `CredentialStore`、`KeystoreCipher` | 摄像机地址加密存储(Android Keystore) |
| `FramePool`、`Frame` | 缓冲区池,减轻垃圾回收压力 |
| `App`、`Crash` | 未捕获异常处理与崩溃报告界面 |
| `DebugServer`、`NetInfo` | 8085 端口调试页面(仅本地网络)、设备地址 |

网络、视频解码和音频分别运行在独立线程中,解码器较慢时也不会阻塞网络读取。

Expand All @@ -193,6 +204,7 @@ export KEY_PASS=your_key_password
- 用户名和密码从地址中提取,通过 `Authorization` 头发送:默认使用 Basic,摄像机要求时改用 Digest。不会出现在 RTSP 请求行中。
- RTSP、UDP 上的 RTP 和 HTTP 均未加密,不支持 RTSPS。若摄像机要求将用户名和密码写在地址路径或参数中(例如 `user=…_password=…`),它们会随每个请求发送。请仅在可信网络中使用,参见 [#16](https://github.com/OpenIPC/decoder/issues/16)。
- 摄像机地址(含密码)加密保存在应用私有存储中(AES-256-GCM,密钥保存在 Android Keystore,Android 6.0 及以上),在 Android 5.x 或 Keystore 不可用时以明文保存,并已禁用备份(`allowBackup="false"`)。
- 8085 端口上的调试页面未加密、无密码;仅响应本地网络客户端,且不会显示用户名和密码。

## 设备兼容性

Expand Down
Loading
Loading