📦 Где это реально используется:
Камеры с SoC Goke GM8136, GM8137, GM8135S
Бюджетные китайские модели:
Jooan, INQMEGA, SDETER, Escam, Tuya, V380 Pro, iCSee
Протоколы: XMeye, CloudSEE, Gwell, Goke P2P, иногда — UCloud SDK
🔐 Почему это закрыто:
Производители получают SDK от Goke под NDA
Нет публичного доступа ни к SDK, ни к документации
Открытая разработка невозможна без реверса или утечек
Цель | Как сделать |
Получить поток | Через RTSP (если включён в прошивке) |
Анализ трафика | Wireshark + фильтр по порту камеры |
Захват Annex-B | Снифить поток, сохранить .h265 и декодировать через FFmpeg |
Альтернатива | Использовать ONVIF-поток и трансмодерировать |
Камеры, подключённые к iCSee или YooSee, передают видеопоток с кодеком H.265 не по стандартному RTSP, а через закрытый облачный протокол, основанный на P2P или прямом NAT-соединении. Приложение на телефоне принимает этот поток по собственному протоколу (например, Xmeye, Goke, Gwell, UCloud) и аппаратно декодирует H.265 на устройстве.
Свойство | Детали |
📍 Производитель | Goke Microelectronics (Shenzhen, China) |
🎥 Аппаратная платформа | Чипы GM8136, GM8135, GM8137, и др. |
📡 Сетевые возможности | RTSP, P2P (облачный), ONVIF, HTTP API |
📹 Видеокодеки | H.264, H.265 (в большинстве — HEVC Main Profile) |
⚙️ SDK включает | Камерный RTOS, потоковое API, управление событиями, PTZ и др. |
📼 Хранилище | Работа с TF-картами, SD-картами, облачное хранилище |
🔒 Почему это важно:
Большинство камер iCSee, YooSee, Tuya, V380 и клонов используют Goke SDK или его производные
- Протоколы передачи данных — частично закрыты, нестандартны и не всегда совместимы с VLC/FFmpeg
- Внутренний видеопоток передаётся в виде сырых NAL-блоков (Annex-B) по UDP/TCP/P2P
🔍 Что такое Annex-B NAL Units?NAL (Network Abstraction Layer) Units — это фундаментальный способ упаковки видеоданных в кодеках
H.264 и H.265.
📚
Annex-B — это один из
двух форматов представления NAL-блоков, описанный в приложении B стандарта H.264/265.
🔹 Annex-B структура Видео разбито на
NAL-блоки (кадры, SPS, PPS, IDR и др.)
Каждый блок начинается с
start code:
00 00 01 или 00 00 00 01
Пример:00 00 00 01 67 ... → SPS (Sequence Parameter Set)
00 00 00 01 68 ... → PPS (Picture Parameter Set)
00 00 00 01 65 ... → IDR (ключевой кадр)
🔹 Альтернатива: AVC/HEVC in MP4 (AVCC)- В контейнере MP4, HLS и других стримах часто используется не Annex-B, а формат AVCC (length-prefixed): [length][NAL Unit]
- FFmpeg, HTML5 <video>, HLS и т.д. не всегда работают с Annex-B напрямую — приходится декодировать или трансмультиплексировать.
📡 Как Annex-B NAL units передаются с камеры? 📱 В мобильные приложения (iCSee, YooSee):Камера передаёт H.265 поток в виде:
Annex-B NAL-блоков обернутых в бинарные сообщения облачного протокола (P2P или socket)
Приложение на телефоне (через MediaCodec, AVFoundation) напрямую читает поток и отдает его на GPU-декодер
🧪 Если ты снифишь трафик:
Там будет что-то вроде: ...00 00 00 01 42 01 01 01... (типичный NAL start code)
🔧 Как работать с такими потоками?📦 Если получаешь такой поток на сервере — его нужно
подавать в FFmpeg как сырой вход (rawvideo) или через pipe:
ffmpeg -f hevc -i stream.hevc -c:v libx264 output.mp4
🔁 Или
мультиплексировать его в MP4/TS:
ffmpeg -f hevc -i raw_annexb.h265 -c copy output.mp4
📲 В мобильном приложении — просто отправляется массив NAL’ов в аппаратный декодер (MediaCodec.decode(), и он магически справляется)
Вопрос | Ответ |
Что такое Goke SDK? | SDK для камер на чипах Goke — включает обработку видео, сетей и облака |
Что такое Annex-B NAL Units? | Это структура H.264/265 потока с разделителями 00 00 00 01 |
Где это используется? | В дешёвых китайских IP-камерах, приложениях iCSee/YooSee |
Можно ли использовать напрямую? | Да, но нужен ручной парсинг или трансмультиплексирование в MP4/TS |