Вже становиться цікавіше. Вийшло зрізати ще 50мс затримки на відео. Тобто по 4G тепер стабільно 150мс, в локальній мережі 120мс.
Все ще використовуючи WebRTC, але не через програвання потоку у video елементі, а ручним декодуванням h264 пакетів.
Як виявилось, браузер може буферизувати декілька кадрів у video елементі, для стабільної картинки. Але за допомогою Web Codecs API та WebRTC Encoded Transform можна вклинитись у стрім, перенаправляти пакети в нативний h264 декодер і рендерити кожен кадр в канвас, як webgl текстуру. Ну і робити це з воркеру, щоб мейн тред не перетинався з декодінгом.
Додатково можна обійти vsync браузеру і рендерити кадри одразу як вони залітають на клієнт.
Також зі сторони raspberry pi виявилось що mediamtx має захардкожений буфер у три кадри. Прийшлось перезібрати собі кастомну версію, зі своїми налаштуваннями.
Тут все ще залишається можлива буферизація в самій імплементації WebRTC у браузері, і з цим вже нічого не зробиш.
Post #1214
1.09K
- 👏 21
- ❤ 13
- 👍 3
- 🔥 2