Lab035. Упреждающий допуск видеокадров и обслуживание видео целыми кадрами

1. Исходное состояние
- Commit Lab034: b63e36abdb7031d642de8b8138b43cc29e94b759.
- Перед Lab035 рабочее дерево было чистым; main опережала origin/main на два commit.

2. Правило обслуживания
- После первого видеопакета кадр становится активным и не удаляется.
- При повторном выборе видео передаётся следующий пакет активного кадра; команды и телеметрия могут передаваться между пакетами.
- Новый видеокадр начинается только после полного завершения активного; видеопакеты разных кадров не чередуются; отдельный пакет не прерывается.
- Только неактивные кадры могут быть удалены до передачи первого пакета.

3. Теоретическая пропускная способность
speed | nonvideo kbps | remaining video kbps | remaining/aligned | minimum skip | maximum fps
300 | 17.973 | 282.027 | 1.143443 | 0.000000 | 3.000
260 | 17.973 | 242.027 | 0.981268 | 0.018732 | 2.944
230 | 17.973 | 212.027 | 0.859636 | 0.140364 | 2.579

4. Восемнадцать сочетаний
speed | policy | published/drop/partial | fps | age P95 ms | no-update max ms | queue max/waiting frames | waste bytes | prediction MAE/P95/max ms | control P95/max ms | emergency ms
300 | Без удаления | 63/0/0 | 2.986 | 590.000 | 406.506 | 21/1 | 0 | 0.000000/0.000000/0.000000 | 17.466/17.787 | 1.707
300 | Реактивная 1500 мс | 63/0/0 | 2.986 | 590.000 | 406.506 | 21/1 | 0 | 0.000000/0.000000/0.000000 | 17.466/17.787 | 1.707
300 | Самый свежий | 63/0/0 | 2.986 | 590.000 | 406.506 | 21/1 | 0 | 0.000000/0.000000/0.000000 | 17.466/17.787 | 1.707
300 | Два ожидающих | 63/0/0 | 2.986 | 590.000 | 406.506 | 21/1 | 0 | 0.000000/0.000000/0.000000 | 17.466/17.787 | 1.707
300 | Прогноз 1000 мс | 63/0/0 | 2.986 | 590.000 | 406.506 | 21/1 | 0 | 0.000000/0.000000/0.000000 | 17.466/17.787 | 1.707
300 | Прогноз 500 мс | 63/0/0 | 2.986 | 590.000 | 406.506 | 21/1 | 0 | 0.000000/0.000000/0.000000 | 17.466/17.787 | 1.707
260 | Без удаления | 63/0/0 | 2.937 | 773.833 | 417.764 | 37/1 | 0 | 0.000000/0.000000/0.000000 | 18.908/20.492 | 1.969
260 | Реактивная 1500 мс | 63/0/0 | 2.937 | 773.833 | 417.764 | 37/1 | 0 | 0.000000/0.000000/0.000000 | 18.908/20.492 | 1.969
260 | Самый свежий | 63/0/0 | 2.937 | 773.833 | 417.764 | 37/1 | 0 | 0.000000/0.000000/0.000000 | 18.908/20.492 | 1.969
260 | Два ожидающих | 63/0/0 | 2.937 | 773.833 | 417.764 | 37/1 | 0 | 0.000000/0.000000/0.000000 | 18.908/20.492 | 1.969
260 | Прогноз 1000 мс | 63/0/0 | 2.937 | 773.833 | 417.764 | 37/1 | 0 | 0.000000/0.000000/0.000000 | 18.908/20.492 | 1.969
260 | Прогноз 500 мс | 62/1/0 | 2.889 | 703.333 | 524.266 | 29/1 | 0 | 0.000000/0.000000/0.000000 | 18.908/20.533 | 1.969
230 | Без удаления | 63/0/0 | 2.600 | 2913.333 | 424.000 | 160/8 | 0 | 0.000000/0.000000/0.000000 | 22.500/24.557 | 22.330
230 | Реактивная 1500 мс | 27/0/36 | 1.300 | 11064.833 | 10626.980 | 87/4 | 321929 | 0.000000/0.000000/0.000000 | 22.461/24.557 | 22.330
230 | Самый свежий | 56/7/0 | 2.600 | 960.000 | 426.226 | 37/1 | 0 | 0.000000/0.000000/0.000000 | 22.043/23.339 | 6.226
230 | Два ожидающих | 57/6/0 | 2.600 | 1286.667 | 421.183 | 56/2 | 0 | 0.000000/0.000000/0.000000 | 22.539/23.339 | 6.991
230 | Прогноз 1000 мс | 56/7/0 | 2.600 | 1226.667 | 426.226 | 53/2 | 0 | 0.000000/0.000000/0.000000 | 22.317/23.357 | 2.365
230 | Прогноз 500 мс | 47/16/0 | 2.215 | 966.667 | 622.817 | 28/1 | 0 | 0.000000/0.000000/0.000000 | 22.212/23.304 | 5.739

5. Интерпретация
- Реактивная Lab034 начинает кадр без гарантии завершения, затем удаляет остаток: уже переданные байты становятся бесполезными, а обновление не публикуется.
- Удаление до первого пакета исключает бесполезную передачу; обслуживание целыми кадрами гарантирует, что начатый кадр будет опубликован.
- Политика самого свежего уменьшает задержку ожидающих данных, но удаляет больше промежуточных кадров; очередь из двух кадров сохраняет больше последовательных обновлений ценой возраста.
- Прогноз полного завершения учитывает весь размер кадра и будущую периодическую высокоприоритетную нагрузку, поэтому полезнее проверки только текущего возраста.
- В модели точно известны команды 20 Гц, телеметрия 10 Гц и аварийная команда 10,0 с; неизвестные будущие дискретные события не моделируются и в реальной системе потребовали бы запаса.
- При устойчивой перегрузке невозможно одновременно сохранить все кадры, исходное JPEG-качество и малую задержку; требуется уменьшить частоту, качество или заранее пропускать кадры.
- Частота обновления, возраст изображения и длительность отсутствия нового изображения оцениваются одновременно: оптимизация одного показателя может ухудшить остальные.

6. Допущения
- Ошибки и помехи отсутствуют; один общий абстрактный ресурс, форматы Lab028-Lab034 неизменны, активный пакет не прерывается.
- Прогноз не изменяет настоящую очередь; для допущенных кадров сохраняются только агрегированные ошибки, без подробного журнала.
- Политика автоматически не выбирается.

7. Функциональные проверки
- PASS 01_video_frames_do_not_interleave: PASS
- PASS 02_started_frame_never_dropped: PASS
- PASS 03_high_priority_between_frame_packets: PASS
- PASS 04_latest_drops_only_unstarted: PASS
- PASS 05_two_waiting_limit: PASS
- PASS 06_prediction_is_pure: PASS
- PASS 07_prediction_uses_actual_sizes: PASS
- PASS 08_prestart_drop_has_no_waste: PASS
- PASS 09_partial_only_reactive: PASS
- PASS 10_incomplete_not_published: PASS
- PASS 11_crc_layers_pass: PASS
- PASS 12_emergency_never_deleted: PASS
- PASS 13_priority_above_video: PASS
- PASS 14_300kbps_no_unnecessary_loss: PASS
- PASS 15_230kbps_bounded_queue: PASS
- PASS 16_frame_accounting: PASS
- PASS 17_byte_accounting: PASS
- PASS 18_reproducible: PASS
- PASS 19_predict_1000_never_known_late: PASS
- PASS 20_command_delay_bound: PASS

8. Созданные файлы
- protocol/video_frame_scheduler.py
- tests/lab035_video_frame_admission.py
- data/processed/lab035/lab035_summary.csv
- data/processed/lab035/lab035_video_metrics.csv
- data/processed/lab035/lab035_control_metrics.csv
- data/processed/lab035/lab035_prediction_metrics.csv
- data/processed/lab035/lab035_report.txt
- data/processed/lab035/lab035_update_rate.png
- data/processed/lab035/lab035_image_age.png
- data/processed/lab035/lab035_publication_delay.png
- data/processed/lab035/lab035_frame_outcomes.png
- data/processed/lab035/lab035_queue_size.png
- data/processed/lab035/lab035_prediction_accuracy.png
- data/processed/lab035/lab035_control_delay.png
- data/processed/lab035/lab035_policy_comparison.png

9. Итоговый Git status
- Lab035 не добавлена в индекс и не закоммичена.

## main...origin/main [ahead 2]
?? data/processed/lab035/
?? protocol/video_frame_scheduler.py
?? tests/lab035_video_frame_admission.py
