# Как смотреть фильмы с разных экранов

> Когда в номере отеля только телевизор и ваш ноутбук. Три способа передать видео на любой Smart TV без HDMI-кабеля: от VLC до запуска своего маленького сервера.

**Published:** 2022-12-22

**Canonical:** <https://grishy.dev/ru/posts/airbnb-film-tv/>

**Translations:** [Русский](https://grishy.dev/ru/posts/airbnb-film-tv.md)

![Как смотреть фильмы с разных экранов](https://grishy.dev/_astro/preview-kelly-sikkema-HprPUHnjDgk-unsplash.CMFhur2O.avif)

---

В последнее время я часто сталкивался с желанием посмотреть какой-то фильм на
телевизоре в отеле, Airbnb или где-то ещё. Но возить HDMI-кабель я как-то не
привык, так что под рукой был только компьютер и всё. Но посмотреть фильм на
телевизоре всё же можно!

## Идея

Раз у нас есть 2 устройства рядом в одной сети, то почему бы не передать видео как-то с компьютера на телевизор. Вроде все такие умные устройства, smart 🤔

## Предположения о телевизоре

Конечно, если там совсем старый телевизор и кроме физического подключения у него ничего нет, то тут сложно что-то сделать. Но обычно в таких местах ставят какие-то дешевые TV приставки и часто это просто телевизор со [Smart TV](https://ru.wikipedia.org/wiki/Smart_TV).

Поэтому данный метод подойдет только если сразу есть следующее:

1. Телевизор со Smart TV;
2. Компьютер подключен к той же Wi-Fi сети, что и телевизор;

Примерно такой должна быть сеть, скорее всего она такая и есть. Ни разу не встречал другой топологии в Airbnb с несколькими роутерами или чем-то таким 😃
![Пример сети](https://grishy.dev/_astro/network.U8yzL22w.avif)

## Способ #1 - VLC

![Скриншот VLC](https://grishy.dev/_astro/vlc.CmPT0YnA.avif)

Одним из самых простых вариантов и работоспособных оказался запуск VLC проигрывателя сразу на телевизоре и на компьютере. Включаешь стрим с компьютера, указываешь адрес на телевизоре и voilà!

### Настройка

Последовательность действий будет примерно такой: включить стрим на компьютере, подключиться по адресу компьютера с телевизора.

Начать стоит с настройки компьютера. Для этого я думаю все смогут скачать [VLC](https://www.videolan.org/vlc/). Он есть, наверное, под все возможные платформы. Я лично ставил на macOS с помощью `brew install --cask vlc`.

Для дальнейшей работы нам нужно узнать IP адрес в локальной сети, в macOS проще всего посмотреть его с помощью терминала `ipconfig getifaddr en0`. Или можно в настройках Wi-Fi.

![Локальный IP-адрес](https://grishy.dev/_astro/ip_addr.B2PRDKQo.avif)

Отлично, теперь открываем VLC и далее **File** -> **Stream**.

![Настройка трансляции VLC](https://grishy.dev/_astro/vlc_streem.DAXcRv5y.avif)

Параметры будут такими:

- *Drop media:* выбрать файл с фильмом
- *Profile:*
  - *Encapsulation:* 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 (не меняем)

Финальный результат настройки:
![Настройки VLC стриминга](https://grishy.dev/_astro/vlc_stream_settings.hI6xPAsv.avif)

Отлично, можно начать стрим и пойти к телевизору. Там нужно скачать в Google Play также VLC. После этого идем в пункт меню **Browsing** и открываем **Streams**. Нужно будет указать адрес в формате ниже, и готово!

```
http://<ip>:<port>
```

![VLC на телевизоре](https://grishy.dev/_astro/vlc_tv.yCBndOPI.avif)

### Плюсы VLC

- Легко настроить;
- Работает стабильно;
- Нет проблем с передачей формата видео и звука;
- Можно менять звуковые дорожки на лету;
- Поддерживаются субтитры;

### Минусы VLC

- Нужно установить VLC на телевизор, а для этого нужен Android TV;

## HTTP сервер

Это вариант, когда мы запускаем на локальном компьютере HTTP-сервер, но не VLC. Этот вариант может пригодиться, когда нет возможности установить VLC, но в Smart TV есть браузер. Мы можем открыть также в браузере наш компьютер по адресу `http://<laptop-ip>:<port>`.

⚠️ Внимание! В браузере нормально воспроизводится только MP4 формат. Так что нужно будет перекодировать фильм с помощью VLC или другого софта. Я использовал [HandBrake](https://handbrake.fr/). Отличная штука.

Один из самых простых случаев - это запустить маленький Rust HTTP сервер [miniserve](https://github.com/svenstaro/miniserve).
После этого можно запустить его в папке с фильмами. Он также выведет адрес во время запуска. Его и вводим. У меня это `http://192.168.1.3:8080`

![Вывод miniserve в терминале](https://grishy.dev/_astro/miniserve_terminal.CLfT9Uz4.avif)

Почему не использовать обычный Python HTTP-сервер - `python3 -m http.server 8080`? Потому что он не поддерживает `Range`. Когда мы будем пытаться перемотать фильм, ничего не будет работать. Python просто не обрабатывает заголовки для частичной загрузки файла.

```
Range: bytes=195526656-
```

Для этого я даже первый раз запустил Nginx в Docker и прокинул в контейнер файл с фильмом. Nginx поддерживает все, что можно и нельзя!

## Результат

![Фото телевизора](https://grishy.dev/_astro/result.CkyfuHcB.avif)
