Jan. 5th, 2024

henry_flower: A melancholy wolf (Default)

Щоб стрімати якесь .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 там є непотрібно, контін ґєнта таких сервісів його відсутності не помітить.

May 2025

M T W T F S S
   12 34
5678910 11
1213 1415 161718
19202122232425
262728293031 

Expand Cut Tags

No cut tags