Домашній стрімінґ
Щоб стрімати якесь .mp4 чи .mkv, достатньо будь-якого статичного HTTP сервера, який підтримує range requests. Тоді будь-який бовзер або mpv чи vlc зможе грати кєно з seeking (як це українською?), як буде дозволяти пропускна здатність і майже так гарно, ніби .mkv є локальний файла.
Колись нарід писав спеціяльні сервери для стрімінгу, бороли лейтенсі,
оптимізували кійфреймні інтервали, але все це швидко померло як тільки
веб бовзери отримали <video> елемент.
Якщо десь на хмарній VM ув країні, якій все одно на те що ви торентите, є колекція святкових фільмів, то дивитися її можна сказавши на сервері
$ ruby -run -ehttpd . -b 127.0.0.1 -p 8000
а дома, на клаенті:
$ ssh -L 127.0.0.1:12345:127.0.0.1:8000 -Nv example.com
щоб форвардити з клаенту 127.0.0.1:12345 на сервер example.com HTTP
ріквести і читати відповідь, а потім
$ mpv http://127.0.0.1:12345/movie.mkv
щоб кєно дивитися.
Як зробити щось подібне без HTTP серверу?
mpv вміє читати raw TCP потік. Можна просто чекати підключення на якогось порта та зразу відправляти йому .mkv файла. Але тоді mpv з'їсть увесь bandwidth який є, тому наш сервер ліпше має рейт лімітувати потік байтів.
Спочатку я хотів написати елементарний форк-сервер, але згадав про pv та ncat. З цим дуо достатньо пролетарського шелу:
$ cat mickeymousetube
#!/bin/sh
export movie="${1:?Usage: ${0##*/} file.mkv [port]}"
port=${2:-61001}
type pv ncat || exit 1
__dirname=$(dirname "$(readlink -f "$0")")
ncat -vlk -e "$__dirname/libexec.stream.sh" 127.0.0.1 $port
ncat вміє форкати себе та виконувати інший exe, коли клаент
підключається.
$ cat libexec.stream.sh
#!/bin/sh
pv -L2M "$movie"
-L2M тут означає макс 2МБ за секунду.
$ mpv tcp://127.0.0.1:61001
буде файла грати.
Недоліком цього є неможливість seeking на клаенті та якщо щось станеться з сокетом (сусід посвердлить вам інторнет кабеля), то дивитися кєно доведеться з самого початку.
З іншої сторони, якщо робити конкурента тіктоку або ютубних шортс, то seeking там є непотрібно, контін ґєнта таких сервісів його відсутності не помітить.

no subject
no subject
шоб порта ув файерволі не відкривати, ггг
no subject
Я дивлюся, що ncat є надмножиною функцій nc/netcat, зокрема по опції -exec. Дуже цікаво, дякую за наводку. Я-то традиційно старим неткатом користуюся, але у варіанті з форком в інший бінарник воно обіцяє багато корисного. netcat -lk XXXXX вхідні потоки з усіх конектів валить в один вихідний потік з розбивкою по \n, який потім треба парсити, а до того додавати ідентифікатори сорцу в кожну строчку. А так можна на колінці змоделювати повноцінний мультитредний термінатор конектів.
Мегасенкс!
no subject
нема за шо
якщо цікаво, отут є продовження на тему сокетів:
https://henry-flower.dreamwidth.org/516113.html
no subject
All this is implementable, I guess, but where do the movies come from?
no subject
як завжди, 1337x або thepiratebay чи toloka
no subject
Понятно.
no subject
грати кєно з морським королем.
no subject
Я не помню точно, были ли в моём эксперименте прямые SSH-туннели (-L) или реверсивные (-R), но наверное это и не особо важно, ведь SSH-протокол тот же самый.
А вы так даже кино смотреть пытаетесь. Х*яссе. И чо, работает? И даже смотреть можно? Гм, может в SSH починили что-то там. А какое среднее и дисперсия будет, если замерить этот тоннель через iperf? Тоннель с удалённым сервером я имею в виду.
no subject
швидкість не фонтан, але для 1080p нормально, секунди 2 затримка як mpv запустити, а далі окей
сервер: деб'ян ув NJ клаент: федора ув кийові
тунель: ssh -L 127.0.0.1:5201:127.0.0.1:5201 -Nv сервер
на клаенті:
no subject