В последнее время я часто сталкивался с желанием посмотреть какой-то фильм на телевизоре в отеле/Airbnb/прочее. Но возить HDMI кабель я как то не привык, так что под рукой был только компьютер и все. Но посмотреть телевизор все-же есть возможность!
Идея
Раз у нас есть 2 устройства рядом в одной сети, то почему бы не передать видео как-то с компьютера на телевизор. Вроде все такие умные устройства, smart 🤔
Предположения о телевизоре
Конечно, если там совсем старый телевизор и кроме физического подключения у него ничего нет, то тут сложно что-то сделать. Но обычно в таких местах ставят какие-то дешевые TV приставки и часто это просто телевизор со Smart TV.
По этому, данный метод подойдет только если сразу есть следующее:
- Телевизор со Start TV;
- Компьютер подключен к той же Wi-Fi сети, что и телевизор;
Примерно такой должна быть сеть, скорее всего она такая и есть. Ни разу не встречал другой топологии в Airbnb с несколькими роутерами или чем-то таким 😃
Способ #1 - VLC
Одним из самых простых вариантов и работоспособных оказался запуск VLC проигрывателя сразу на телевизоре и на компьютере. Включаешь стрим с компьютера, указываешь адрес на телевизоре и voilà!
Настройка
Последовательность действий будет примерно такой: включить стрим на компьютере, подключиться по адресу компьютера с телевизора.
Начать стоит с настройки компьютера. Для этого я думаю все смогут скачать VLC. Он есть, наверное, под все возможные платформы. Я лично ставил на macOS с помощью brew install --cask vlc
.
Для дальнейшей работы нам нужно узнать IP адрес в локальной сети, в macOS проще всего посмотреть его с помощью терминала ipconfig getifaddr en0
. Или можно в настройках Wi-Fi.
Отлично, теперь открываем VLC и далее File -> Streem.
Параметры будут такими:
- Drop media: выбрать файл с фильмом
- Profile:
- Encapsusation: MPEG-TS
- Video codec: Keep original track
- Audio codec: Keep original track
- Subtitles: Можно включить, если хотите 😉
- Choose Destination: Stream!
Далее нужно настроить Stream, нажав Setup Stream.
- Type: HTTP
- Address: Наш локальный адрес
- Port: 9999 (можно указать любой, просто это проще набрать на пульте)
- TTL: 1 (не меняем)
Финальный результат настройки:
Отлично, можно начать стрим и пойти к телевизору. Там нужно скачать в Google Play так же VLC. После этого идем в Browsing пункт меню и открываем Streams. Нужно будет указать адрес в формате ниже и готово!
http://<ip>:<port>
Плюсы VLC
- Легко настроить;
- Работает стабильно;
- Нет проблем с передачей формата видео и звука;
- Можно менять звуковые дорожки на лету;
- Поддерживаются субтитры;
Минусы VLC
- Нужно установить VLC на телевизор, а для этого нужен Android TV;
HTTP сервер
Это вариант, когда мы запускаем на локальном компьютере HTTP сервер, но не VLC. Этот вариант может пригодиться, когда нет возможности установить VLC, но в Smart TV есть браузер. Мы можем открыть так же в браузере наш компьютер по адресу http://<laptop-ip>:<port>
.
⚠️ Внимание! В браузере нормально воспроизводится только MP4 формат. Так что нужно будет перекодировать фильм с помощью VLC или другого софта. Я использовал HandBrake. Отличная штука.
Один из самых простых случаев - это запустить маленький Rust HTTP сервер miniserve. После этого можно запустить в папке с фильмами. Он так же выведет адрес во время запуска. Его и вводим. У меня это http://192.168.1.3:8080
Почему нет обычный Python HTTP сервер - python3 -m http.server 8080
? Потому что он не поддерживает Range
. Когда мы будем пытаться перемотать фильм, ничего не будет работать. Python просто не обрабатывает заголовки для частичной загрузки файла.
Range: bytes=195526656-
Для этого я даже первый раз запустил Nginx в Docker и прокинул в контейнер файл с фильмом. Nginx поддерживает все, что можно и нельзя!