|
|
|
|
@ -789,11 +789,12 @@ Android:
|
|
|
|
|
скоростные 120/240fps требуют фиксированного диапазона getHighSpeedVideoFpsRangesFor, скоростной сессии, |
|
|
|
|
createHighSpeedRequestList и setRepeatingBurst. Битрейт зависит от размера/FPS, ограничен 16Mbit/s и codec caps. |
|
|
|
|
I-frame interval=1s. Выход нормализуется в Annex B; |
|
|
|
|
partial output собирается в access unit. Codec config передаётся с каждым IDR. |
|
|
|
|
partial output собирается в access unit. Codec config передаётся с каждым KEY. |
|
|
|
|
- Битрейт выбирается отдельно: Авто по разрешению/FPS либо пресет в диапазоне encoder. |
|
|
|
|
На LIVE применяется PARAMETER_KEY_VIDEO_BITRATE; при отказе используется штатная смена конфигурации/rollback. |
|
|
|
|
Смена кодека/камеры/режима создаёт revision и принимается вместе с KEY, без смены source_epoch и перезапуска звука. |
|
|
|
|
Encoder configuration из отдельных NAL callbacks объединяется без дублирования parameter sets. |
|
|
|
|
Разделённые CODEC_CONFIG buffers собираются отдельно с пределом 64KiB до разбора конфигурации. |
|
|
|
|
- Camera MediaCodec Surface timestamps и AudioTimestamp.TIMEBASE_MONOTONIC приводятся к общему |
|
|
|
|
origin System.nanoTime; время callback/получения блока не заменяет capture PTS. |
|
|
|
|
- Микрофон трансляции использует AudioRecord.CAMCORDER, 48kHz stereo. Перед Opus AUDIO/128kbps |
|
|
|
|
@ -908,6 +909,28 @@ late/pressure drops, число и байты кадров, PTS границ о
|
|
|
|
|
test_stream_service также проверяет общий каталог двух независимых источников одного канала, |
|
|
|
|
шестисекундную паузу readers при живом сетевом приёме без restart и полное локальное/удалённое дочитывание FIN. |
|
|
|
|
|
|
|
|
|
Статистика отправки на экране публикации: |
|
|
|
|
- Отдельный uasync timer publisher каждые 100ms делает согласованный TX snapshot и передаёт его через JNI. |
|
|
|
|
Kotlin обновляет отдельный StateFlow, без пересоздания preview. После close/detach timer отменяется. |
|
|
|
|
- video_queue_bytes — оставшиеся байты с вычитанием offset частично упакованного головного кадра. |
|
|
|
|
audio_queue_bytes — целые ожидающие Opus-пакеты. stream_pending_bytes — RS-части всех выдач текущей эпохи, |
|
|
|
|
ещё не принятые ETCP. Это логическая очередь, исходные части продолжают храниться только в кольце. |
|
|
|
|
- transport_queued_bytes — send_input_q, input_queue и остаток packer normalizer. |
|
|
|
|
inflight_bytes — сумма unacked_bytes всех ETCP_CONN общего instance->connections, включая TCP-only/pending. |
|
|
|
|
TCP registry/физические links не обходятся повторно. input_send_q уже включена в unacked_bytes. |
|
|
|
|
- total_bytes = video_queue_bytes + audio_queue_bytes + stream_pending_bytes + transport_queued_bytes + inflight_bytes. |
|
|
|
|
История RS-кольца не является исходящей очередью. Общие ETCP-показатели включают другой трафик узла; |
|
|
|
|
сумма описывает незавершённую отправку в текущем представлении данных, не резерв памяти или полный объём IP-пакетов. |
|
|
|
|
- ACK — байты найденных подтверждённых ETCP-пакетов, не размер пакета ACK. Повтор ACK ничего не добавляет. |
|
|
|
|
Общая per-instance история живёт до destroy ядра, сохраняется при REINIT/close пира и не зависит от наличия BBR link. |
|
|
|
|
Хранится 11 buckets по 100ms: текущий и десять завершённых. ACK_1s — сумма десяти завершённых интервалов; |
|
|
|
|
окно движется каждые 100ms, отсутствующие интервалы равны нулю. Скорость Mbit/s = ACK_1s * 8 / 1000000. |
|
|
|
|
- На экране: остаток видео, общий inflight, total send buffer, ACK_1s в KiB и Mbit/s. |
|
|
|
|
DEBUG stream раз в секунду показывает каждый компонент суммы, ACK и число соединений. |
|
|
|
|
test_stream_tx_stats проверяет границы окна, повторные ACK, закрытие соединений и разделение queued/inflight. |
|
|
|
|
test_android_stream проверяет остаток большого частично упакованного кадра, кодек в JNI и смену revision/epoch. |
|
|
|
|
test_stream_view воспроизводит настоящие H.264/H.265/VP9/AV1, отдельную decoder configuration и FIN. |
|
|
|
|
|
|
|
|
|
Общий запас и адаптация воспроизведения: |
|
|
|
|
- Кодированный поток хранится один раз, в stream_buffer (RS-кольцо 32MiB по умолчанию). |
|
|
|
|
stream_media_store хранит только диапазоны seq, PTS готового видео/аудио и позиции KEY. |
|
|
|
|
|