TGViewer
Марков цепи пропил Марков цепи пропил @markovdrankthechains · 3.4K subscribers
Post #253 4.51K
Засылать данные по видеоканалу WebRTC - довольно интересная с инженерной точки зрения задача. На ум сразу приходит решение в виде стеганографии: внедрять в картинку последовательность пикселей определенных цветов на одной стороне, и расшифровывать на другой. Но, к сожалению, энкодер просто съест нужную информацию и на выходе мы получим мусор. Поэтому в голову пришла мысль: что, если мы встроимся в часть пайплайна аккурат до VP8? Для этого пришлось спустится на уровень ниже. Туннель работает поверх TrackLocalStaticSample - в нем pion отправляет VP8 фреймы как видеосемплы. Поэтому мы посылаем фреймы двух типов:

Keepalive - настоящие VP8 фреймы (interframe 17 байт, keyframe 30 байт каждый 60-й фрейм). Отправляются с частотой 25fps по таймеру когда нет данных. Нужны чтобы SFU/TURN считал видеопоток живым и не отключал

Data - фрейм данных: [0xFF][4 байта длина][payload]. Маркер 0xFF отличает от VP8 (у keyframe bit0=0, у interframe bit0=1, поэтому первый байт никогда не 0xFF)

Таким образом удается построить bidirectional канал связи, и отсылать данные как для download, так и для upload. Единственное ограничение - ширина канала за счет специфики, из-за чего скорость ограничена в среднем 1.2 (+/- 0.2) мб/с. Тем не менее такой поток довольно сложно заметить/перехватить (в случае, если начнут обрубать по сигнатурам/VP8 фреймам - их всегда можно обновить/зашифровать). Я бы, наверное, советовал пользоваться именно этим каналом, так как он еще и меньше нагружает инфраструктуру, и его обычно достаточно для базового взаимодействия в интернете.

Оно реализовано в обновленном релизе v0.1.5 - [Исходники], [Билды]

Сейчас там по умолчанию установлен DataChannel, для видео нужно переключиться в выпадающем списке. Для того, чтобы оно работало, необходимо, чтобы и у creator’a и у joiner’а совпадали каналы передачи данных (video - video, data channel - data channel). Так же необходимо, чтобы при заходе в звонок через video channel в интерфейсе была включена камера (реальную камеру оно не включает - можно не давать разрешения, так как поток все равно фейковый), потому что иначе нужный канал данных просто не откроется, и подключение провалится
  • 🔥 51
  • 🙏 1
More from @markovdrankthechains
  1. Oct 8, 2026Недавно для себя открыл, что приём из CUDA C Best Practices работает и на чипах Apple Ядро…
  2. Oct 6, 2026Господа, позвольте представить вам европейские датацентры
  3. Sep 23, 2026photo post
  4. Sep 21, 2026https://www.educate.elsevier.com/book/details/9780443439001
  5. Sep 21, 2026Ладно, пойду траву потрогаю
  6. Sep 21, 2026В общем, забавный факт. Как мы знаем, у кварцевых часов есть погрешность, которой обычно м…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →