Доброго времени суток.
Решил поделиться одним из способов, как можно посмотреть Ваш любимый фильм/сериал, в хорошем качестве, не посещая всякие стремные сайты, которые так хотят чтобы вы поиграли в казино.
Сразу оговорюсь, я ни в коем случае не призываю Вас использовать пиратский контент. Пиратство это зло. Всегда покупайте лицензионный контент.
Ну, а для тех кто хочет посмотреть торрент, не защищенный авторским правом, на своём смарт телевизоре, не дожидаясь скачивания, ниже интересный способ.
Стоит у меня Samsung смарт тв, на котором я разными способами пытался смотреть кино.
Пробовал установить на Ubuntu minidlna. До какого-то времени это работало довольно удобно, но в один прекрасный день dlna приложение на телевизоре стало периодически вылетать. Я так и не разобрался с чем это связано, возможно прилетел какой-то неудачный апдейт. В любом случае смотреть можно было только полностью скачанный контент, что было не очень интересно.
Пробовал по старинке закачивать кино на внешний hdd, и подкючать в телевизору. Через пару тройку раз это надоело.
В итоге долгое время смотрел просто через встроенный в телевизор браузер. Через какое-то время и этот способ ужасно достал.
Хотелось чего-то удобного и простого и чтобы сразу не дожидаясь пока загрузится весь контент.
Вы скажете, есть Chromecast. Но мне хотелось все сделать без лишних девайсов у меня дома.
Как оказалось встроенный браузер (в отличии от десктопного хрома), поддерижвает HLS. Ну так почему бы нам просто не поднять но ноутбуке hls поток, и смотреть через браузер.
И так поехали.
1. Ставим torrent клиент
Есть очень класный npm пакет, называется он torrent. Все бы хорошо, но он не умеет выбирать один файл и списка для скачивания и ограничивать скорость скачивания. Это очень важно. Зато минималистичный, очень быстро подхватывает пиры и отлично качает в последовательном режиме, что нам и нужно.
Пришлось покопаться в нутрях и дописать нужный функционал. И так ставим torrent из форка
npm install 'https://github.com/zim32/torrent.git#master' -g
Качаем торент файл или магнет ссылку.
Чтобы получить список файлов нужно выполнить команду info
torrent info some.torrent | less
Находим нужное нам название файла (не путь) и выполняем команду
torrent some.torrent --select 'FILE_NAME' --downloadLimit 1000000
Если все хорошо, Вы увидите статистику скачивания, к-во пиров и т.д. Файлы будут складываться в текущую директорию. Ограничение скорости в Byte/s.
Ограничение необходимо, потому что в моем случае торент забивает весь канал, роутеру становится плохо и дальше между ноутбуком и смарт тв происходят тормоза. Главное чтобы скорость была выше битрейта потока иначе будут подгрузки и буферизация.
Делаем HLS поток
Устанавливаем ffmpeg. В моем случае все работало с обычным ffmpeg из репозитория.
apt install ffmpeg
Создаем паблик директорию, куда будет идти наш поток.
Далее возможно несколько вариантов. Если в исходном файле видео в формате h264, а аудио AAC, то можно попробовать не перекодировать поток. В этом случае запускаем стрим таким образом
ffmpeg -re -i 'torrent_dir/movie.mkv' -codec copy -map 0:0 -map 0:1 -map_chapters -1 -movflags default_base_moof+frag_keyframe -f hls -hls_playlist_type event ~/www/player/out.m3u8
Если же кодеки отличаются, прийдется перекодировать на лету. На моем ноутбуке ffmpeg успевал за потоком.
ffmpeg -re -i 'torrent_dir/movie.avi' -c:v libx264 -preset slow -r 24 -x264opts fps=24:bitrate=2000:pass=1:vbv-maxrate=4000:vbv-bufsize=8000:keyint=24:min-keyint=24:scenecut=0:no-scenecut -c:a aac -b:a 256k -map 0:0 -map 0:1 -map_chapters -1 -movflags default_base_moof+frag_keyframe -f hls -hls_playlist_type event ~/www/player/out.m3u8
Опциями -map 0:0 и -map 0:1 мы вибарем нужные каналы. Видео и русская дорожка. Опция -map_chapters -1 удаляет на всякий случай весь мусор в виде информации о главах и т.д.
Посмотреть доступные каналы можно командой ffprobe movie.mkv
Создаем сервер
В ту же папку куда идет стрим нужно положить файл index.html со следующим сожержанием
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<video src="out.m3u8" controls></video>
</body>
</html>
Устанавливаем простой http сервер.
npm i http-server -g
Запускаем сервер
http-server -a 0.0.0.0 -c-1
Смотрим кино
Теперь на телевизоре достаточно открыть браузер с адресом вашего ноутбука к примеру 192.168.1.200:8080 и наслаждаться.
Всем спасибо за внимание.
Автор: zim32