Lab034. Ограничение возраста видеоданных и отбрасывание устаревших кадров 1. Исходное состояние - Commit Lab033: 21751f41dd0af022fc1f935c67e795e3ae4257c5. - Перед Lab034 рабочее дерево было чистым; main опережала origin/main на один commit. - Lab028-Lab033 и их результаты не изменяются. 2. Формирование FEC-блоков layout | source | parity | blocks | partial | cross-frame | frames/block mean/max | before/after Lab033 kbps Непрерывные | 862 | 216 | 72 | 1 | 58 | 1.806/2 | 226.951/240.240 По кадрам | 862 | 251 | 125 | 62 | 0 | 1.000/1 | 232.926/246.647 - Дополнительная избыточность выравнивания: 5.975 кбит/с (2.633%). - Средняя эквивалентная группа кадра: непрерывные 17.111 пакета / 263.968 мс; выровненные 17.667 пакета / 271.007 мс при 300 кбит/с. 3. Пятнадцать сочетаний speed | policy | offered/capacity | published/drop/partial | update fps | age P95 ms | control P95 ms | emergency ms | queue max/end | drain s | wasted bytes 300 | Непрерывные, без отбрасывания | 0.8607 | 63/0/0 | 2.986 | 593.333 | 17.466 | 1.707 | 22/15 | 0.231867 | 0 300 | По кадрам, без отбрасывания | 0.8821 | 63/0/0 | 2.986 | 590.000 | 17.466 | 1.707 | 21/13 | 0.199440 | 0 300 | По кадрам, 1500 мс | 0.8821 | 63/0/0 | 2.986 | 590.000 | 17.466 | 1.707 | 21/13 | 0.199440 | 0 300 | По кадрам, 1000 мс | 0.8821 | 63/0/0 | 2.986 | 590.000 | 17.466 | 1.707 | 21/13 | 0.199440 | 0 300 | По кадрам, 500 мс | 0.8821 | 63/0/0 | 2.986 | 590.000 | 17.466 | 1.707 | 21/13 | 0.199440 | 0 260 | Непрерывные, без отбрасывания | 0.9931 | 63/0/0 | 2.937 | 690.000 | 18.754 | 1.969 | 28/23 | 0.399200 | 0 260 | По кадрам, без отбрасывания | 1.0178 | 63/0/0 | 2.937 | 773.833 | 18.908 | 1.969 | 37/30 | 0.539293 | 0 260 | По кадрам, 1500 мс | 1.0178 | 63/0/0 | 2.937 | 773.833 | 18.908 | 1.969 | 37/30 | 0.539293 | 0 260 | По кадрам, 1000 мс | 1.0178 | 63/0/0 | 2.937 | 773.833 | 18.908 | 1.969 | 37/30 | 0.539293 | 0 260 | По кадрам, 500 мс | 1.0178 | 56/7/7 | 2.648 | 1053.833 | 18.908 | 1.969 | 31/24 | 0.403939 | 69597 230 | Непрерывные, без отбрасывания | 1.1227 | 63/0/0 | 2.697 | 2443.833 | 21.848 | 11.548 | 132/127 | 2.547420 | 0 230 | По кадрам, без отбрасывания | 1.1505 | 63/0/0 | 2.600 | 2913.333 | 22.500 | 22.330 | 160/155 | 3.125855 | 0 230 | По кадрам, 1500 мс | 1.1505 | 27/36/36 | 1.300 | 11064.833 | 22.461 | 22.330 | 87/81 | 1.418064 | 321929 230 | По кадрам, 1000 мс | 1.1505 | 14/49/49 | 0.674 | 11731.500 | 22.578 | 11.652 | 63/53 | 0.904881 | 434885 230 | По кадрам, 500 мс | 1.1505 | 3/60/60 | 0.144 | 11731.500 | 22.230 | 3.687 | 32/27 | 0.419072 | 532167 4. Практический смысл ограничений возраста - При 300 кбит/с очередь обслуживается достаточно быстро: ограничения 500, 1000 и 1500 мс не срабатывают и не дают выигрыша. - При 260 кбит/с пределы 1000 и 1500 мс также не срабатывают; предел 500 мс публикует 56 из 63 кадров и отбрасывает 7, поэтому он уже чрезмерно жёсткий для части кадров. - При 230 кбит/с предел 1500 мс сохраняет 27 кадров, 1000 мс — 14, 500 мс — только 3; более строгий предел лучше ограничивает очередь, но резко уменьшает частоту обновления. - В исследованной перегрузке 1500 мс является наиболее мягким из конечных ограничений; 1000 мс сильнее улучшает свежесть ценой обновлений, а 500 мс чрезмерно жёсток. 5. Интерпретация - Произвольное удаление символа из непрерывного FEC-блока опасно: блок может содержать соседние кадры, и нехватка символов затрагивает их совместное декодирование. - Выравнивание изолирует кадр в собственных блоках, поэтому все ожидающие символы устаревшего кадра можно удалить без повреждения соседей. - Цена изоляции — 5.975 кбит/с дополнительного внешнего потока из-за большего числа неполных блоков. - Полная доставка после освобождения очереди не является целью операторского видео: поздний полный кадр уже не описывает текущее состояние ровера. - При перегрузке отбрасывание старого кадра освобождает ресурс для более свежего изображения и не затрагивает команды. - При 230 кбит/с выравнивание меняет фазу активного видеопакета около 10,0 с; фактическая задержка аварийной команды может отличаться от Lab033, но отбрасывание её не увеличивает, а непереключаемая верхняя граница остаётся прежней, поскольку максимальный размер пакета не изменён. - Слишком малый возраст может отменять кадры быстрее их полной передачи и снижать фактическую частоту обновления. - Поэтому возраст изображения оценивается вместе с частотой обновления: хорошее значение одного показателя не гарантирует полезный видеопоток. - Замена команд допустима только для текущего состояния (скорость, поворот, торможение, телеметрия). Дискретные события заменять нельзя; в Lab034 они не моделируются. 6. Допущения - Один общий абстрактный ресурс, одна скорость для обоих направлений, без времени переключения и без выбора физического duplex/TDD/FDD. - Ошибки и помехи отсутствуют; начатый пакет не прерывается; форматы Lab028, Lab030 и Lab033 неизменны. - Возраст считается от формирования составного кадра по generation_time_us; служебные frame_id и состояние отмены не сериализуются. - Видеокадр с удалёнными пакетами очищается в приёмнике и никогда не публикуется. - Допустимые возраста 500, 1000 и 1500 мс заданы явно и автоматически не выбираются. 7. Функциональные проверки - PASS 01_continuous_matches_lab033: PASS - PASS 02_aligned_blocks_one_frame: PASS - PASS 03_aligned_no_drop_recovers_all: PASS - PASS 04_whole_frame_drop_isolated: PASS - PASS 05_only_waiting_video_removed: PASS - PASS 06_active_packet_not_preempted: PASS - PASS 07_partial_cancel_not_published: PASS - PASS 08_age_uses_frame_generation: PASS - PASS 09_receiver_cleans_stale_state: PASS - PASS 10_emergency_never_deleted: PASS - PASS 11_high_priority_before_video: PASS - PASS 12_230kbps_finite_age_bounds_queue: PASS - PASS 13_packet_accounting: PASS - PASS 14_byte_accounting: PASS - PASS 15_all_crc_layers_pass: PASS - PASS 16_incomplete_frame_never_published: PASS - PASS 17_reproducible: PASS - PASS 18_drop_does_not_worsen_emergency: PASS 8. Созданные файлы - protocol/video_age_policy.py - tests/lab034_stale_video_drop.py - data/processed/lab034/lab034_summary.csv - data/processed/lab034/lab034_video_metrics.csv - data/processed/lab034/lab034_control_metrics.csv - data/processed/lab034/lab034_report.txt - data/processed/lab034/lab034_image_age.png - data/processed/lab034/lab034_frame_outcomes.png - data/processed/lab034/lab034_queue_size.png - data/processed/lab034/lab034_control_delay.png - data/processed/lab034/lab034_update_rate.png - data/processed/lab034/lab034_fec_alignment_overhead.png - data/processed/lab034/lab034_policy_comparison.png 9. Итоговый Git status - Lab034 не добавлена в индекс и не закоммичена. ## main...origin/main [ahead 1] ?? data/processed/lab034/ ?? protocol/video_age_policy.py ?? tests/lab034_stale_video_drop.py