LINUX.ORG.RU

Поделить канал между загрузками

 , ,


0

1

Приветствую.

На SoC выполняю запись архива локально, передача которого через интернеты может быть либо через rtsp публикацию с выравниванием (паузами отправки) по времени rtp пакетов, либо через использование реализации «протокола» tcp в ffmpeg, когда используется вся пропускная способность канала, предоставленная провайдером.

Как бы вот так сделать, чтобы ничего не меряя до хоста на который происходит передача или rtsp шлюза, но по ходу передачи знать, что нужно удлинять паузы между параллельными отправками (возможно даже что то пропуская при передаче, чтобы не тормозило как ютуба :) ) ???

В памяти мелькает, что в Linux есть какие то счетчики на сеть, где вроде как можно проанализировать длину очереди tcp пакетов (скорее всего только его и буду использовать) или это бесполезно и нужно, например, прикручивать к проекту iperf и измерять скорость до шлюза?

★★★
Ответ на: комментарий от anonymous

Это про настройки ядра? Тут мне больше нужно самому подобное реализовать, причем с учётом того что запись в сеть выполняется через либу, ещё и текущее видео должно быть приоритетней… поискать как bbr делает оценку ширины канала, думал какие то понятные метрики сразу удастся найти )

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)
Ответ на: комментарий от anonymous

Если вам не сложно ссылку на подробности? А то мне что то только общие слова попадаются и как включить в ядре.

Т.е. на основании чего можно оценить потолок на отдачу.

ЗЫ ядра на железках у меня 4.15 кажется

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)

проанализировать длину очереди tcp пакетов

просто считай отправленные данные в коде

когда используется вся пропускная способность канала

за одну секунду и сравнивай

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 4)
Ответ на: комментарий от anonymous2

это то понятно, а как узнать ширину канала, чтобы я мог расставить пауз между несколькими отправлениями!? чтобы у всех архив показывал одинаково (хреново)

wolverin ★★★
() автор топика
Ответ на: комментарий от anonymous2

это слишком просто ) хотелось бы автоматически, тем более что местные эникейщики могут договариваться за изменение ширины и никому не говорить абтом.

надо счетчики какие то как то анализировать, зачем то же они придуманы

wolverin ★★★
() автор топика

Как бы вот так сделать, чтобы ничего не меряя до хоста на который происходит передача или rtsp шлюза, но по ходу передачи знать, что нужно удлинять паузы между параллельными отправками?

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

Enthusiast ★★★
()
Ответ на: комментарий от anonymous2

ну хз, вспомнил не так давно разрабам видео шлюза (rtsp-simple-server/mediamtx) писал, что под нагрузкой у них rtp пакеты теряются, они мне ответили что вот тебе /proc/net/tcp или /proc/net/udp ищи там смысл жизни в потерях, знакомого админа спросил, говорит надо получить дампы на железке и шлюзе и собрать в варешарке rtp пакеты и типо это даст понимание где потери… словом это мысли в слух ибо если переключаюсь на udp я вижу еще понижение качество видео в сравнении с tcp, значит какие то индикаторы должны быть в ядре

по идеи есть же tx_queue retrnsmt timeout

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)
Ответ на: комментарий от anonymous2

это то понятно, но и tcp теряется или наверное правильней сказать отбрасываются rtp пакеты, которые по tcp не успели вовремя прийти.

хотя визуально выглядит конечно одинаково - рассыпание картинки.

wolverin ★★★
() автор топика