Browse Source

Record validated desktop call encoder and remaining integration boundaries

master
evgeny 5 days ago
parent
commit
2a22d625e1
  1. 47
      doc/call_video.txt
  2. 6
      doc/tasks.md

47
doc/call_video.txt

@ -62,7 +62,8 @@ producer запрашивает следующий IDR по существующ
[+] История первых ACK 500мс/50мс и снимок payload send_q/inflight отдельного сервиса.
[+] Unit счётчиков: повторные ACK, reset, отдельные сервисы; UDP/STCP регрессии пройдены.
[+] Дрейф feed/tempo устранён картой фактических участков SoundTouch; см. ниже.
[ ] H.265 bitrate: замена encoder перед ближайшим плановым IDR, с непрерывными PTS.
[+] ChatGUI codec component: замена H.264/H.265 encoder на IDR, с непрерывными PTS; ещё без camera/bridge.
[ ] Android MediaCodec: применение bitrate на ближайшем IDR и проверка фактического выхода.
[+] Общий регулятор с детерминированными сценариями и подключением к router/encoder-командам.
[+] Видеофрагменты, ограниченная сборка, обмен возможностями с подтверждением.
[ ] Дополнить возможности ограничениями profile/level/tier и диапазоном битрейта.
@ -318,3 +319,47 @@ ffprobe подтверждает Main/level 3.1, B=0 и 360 кадров.
Это проверка 640x360@30 на синтетической сложной сцене, не готовый тракт звонка:
worker/camera/decoder UI и Android MediaCodec ещё предстоит подключить и проверить.
Патч x265 остаётся диагностическим материалом и не требуется выбранному способу.
Компонент кодирования ChatGUI, 14.10.2026
StreamVideoEncoder переименован в LiveVideoEncoder и выделен в chatgui_live_video;
трансляции используют тот же код, без дублирования захвата/конвертации/FFmpeg.
Явный профиль H.264 Constrained Baseline / H.265 Main задаёт level, reference=1,
VBV и 8-bit 4:2:0. Для этого режима пока проверены software libx264/libx265.
Открытие проверяет независимый IDR настоящим decoder: profile, level, Main tier,
pixel format, отсутствие B-кадров и размер. Проверка принятого option не заменяет
эту проверку bitstream. Automatic-профили трансляций сохраняют прежний выбор GPU/SW.
Опции encoder сверены с https://ffmpeg.org/ffmpeg-codecs.html#libx265 и разделом libx264.
CallVideoEncoder принадлежит будущему video worker. Он хранит единственную pending
команду generation/request/bitrate, отклоняет replay, чужой generation и выход за
согласованный maximumBitrate. На ближайшем IDR по capture PTS создаётся кандидат;
старый encoder сохраняется до получения полного KEY с точным исходным PTS.
При отказе кандидата возвращается completion с bitrate=0 и используется прежний
контекст. Неизменный target также подтверждается на KEY без пересоздания.
Completion отделён от отправки кадра: даже при закрытом admission его нужно
передать в call_video_rate_applied. Периодический IDR задаётся по capture PTS,
поэтому пропуски кадров/закрытая сеть не сдвигают применение на дополнительные GOP.
Физический захват камеры, audio origin и сетевые frame_id компонентом не меняются.
test_call_video_encoder прошёл: 5 QtTest cases (включая init/cleanup), без skip.
Для обоих codecs: 640x360@30, level 3.1, VBV 1 Мбит, шумовая сцена;
запрос на кадре 7, переход на кадре 30, один decoder на все 360 кадров.
Проверены PTS каждого decoded frame, профиль/level/размер/B=0 и средний bitrate:
H.264: 3996916 / 296904 / 3989748 бит/с;
H.265: 3993720 / 302956 / 3999788 бит/с.
Отдельно проверены отказ новой конфигурации с сохранением старого encoder,
предел bitrate, pending/replay/generation, force-key и разрыв capture PTS вперёд.
Логи: /tmp/call-live-video-test-final.log, /tmp/call-live-video-build-final.log.
test_stream_publish: 11 passed, 1 skip (capture под Xvfb), 0 failed;
/tmp/call-live-stream-regression.log. После уточнения VBV профильная проверка
liveSoftwareBitrateKeepsDecoder повторена успешно, /tmp/call-live-stream-bitrate-final.log.
ChatGUI собран; ./check.sh: 154/154, proxy 9/9, burst/load PASS за 118с;
/tmp/call-live-core-check.log. Android в этом этапе не менялся.
Граница готовности: это рабочий codec component, ещё не камера/worker/видеозвонок.
В CAPS пока нет согласования level/tier/bitrate/VBV: до его реализации компонент
не объявляется доступным в реальном звонке. Владелец обязан проверять соответствие
размера/FPS согласованному envelope, а не считать маркировку level доказательством
всех ограничений стандарта. Другие режимы, hardware codecs и Android требуют
отдельных проверок. Следующий этап — CAPS envelope и подключение capture/bridge,
затем decoder/render по audio clock и UI на обеих платформах.

6
doc/tasks.md

@ -30,6 +30,12 @@
4.01 -> 0.310 -> 4.02 Мбит/с, 360/360 кадров декодируются с сохранёнными PTS кодера.
Обычный reconfigure на IDR не помогает. В плане уточнены ожидание <= одного GOP, pending ACK,
backpressure и сохранение аудиошкалы; подключение к платформенным workers ещё предстоит.
Реализован ChatGUI CallVideoEncoder поверх выделенного общего LiveVideoEncoder:
проверка фактического профиля декодером, pending-команда, новый контекст на IDR,
сохранение PTS/старого контекста при отказе, предел bitrate и защита generation/request.
Реальная проверка H.264/H.265: 360 кадров на codec, 4M -> 300k -> 4M, один decoder, 5/5 cases PASS.
Трансляции: 11 PASS, 1 skip (Xvfb); ChatGUI собран; check.sh 154/154 + proxy 9/9 + burst/load PASS.
Codec component ещё не подключён к звонку: нужны CAPS envelope, capture/bridge/render и Android backend.
Контракты, этапы и проверки: `doc/call_video.txt`.
[+] **Android live: увеличение и перемещение видео как в просмотрщике файлов** — 14.10.2026:

Loading…
Cancel
Save