1с кинотеатр как сделать
Участник сообщества DTF, управляющий двумя кинотеатрами в Астрахани, рассказывает об отличиях плёночных и цифровых кинопроекторов.
За последние 10 лет рынок кинотеатров с технической точки зрения изменился радикально. В 2006 году никто и подумать не мог, что недавно закупленные плёночные проекты уже через 3-4 года можно будет спокойно сдавать в металлолом.
С пленкой было много мороки:
- Изготовление и отправка фильмокопий в кинотеатры были затратными для прокатных компаний
- Киномеханики склеивали фильм из нескольких бобин (на фото лежат слева от проектора), и это был довольно-таки кропотливый и тяжёлый труд. Да, чисто теоретически киномеханик мог вклеить 25-й кадр как Тайлер Дёрден из «Бойцовского клуба», но таких случаев у меня не было. Кроме того, когда работали все 6 проекторов, в операторской стоял невероятный гул (один из киномехаников носил шумозащитные наушники)
- Утилизация плёнки также была проблемой, так как она относится к отходам повышенной опасности
- Изготовление рекламы, которую кинотеатры могли показывать, также было затратным делом, так как в малых городах никто не мог изготовить ролик и переформатировать его в плёнку для кинопроектора
- Поменять расписание было трудоёмким процессом, так как фильмокопии весили до 50 килограмм, и таскать их из зала в зал было делом не из лёгких
Мы думали, что так придётся работать ещё долго, но потом вышел «Аватар». К этому фильму готовились многие кинотеатры, мы закупили новый цифровой проектор (диковинка для рынка) и новую активную 3D-систему.
Суть работы цифрового проектора довольно-таки простая. Из себя он представляет увеличенную копию обычного проектора (с лампочкой в 6000 ватт), который все хоть раз в жизни использовали для презентаций в школе, университете или работе. Проектор подсоединяется к серверу, куда заранее должен быть загружен фильм в специальном формате DCP – Digital Cinema Package или «цифровой кинопакет», разработанном консорциумом ведущих мировых киностудий DCI (Digital Cinema Initiatives).
У всего этого удобства есть одно большое НО, которое так полюбилось прокатчикам и которое так ненавидят кинотеатры. К каждой цифровой фильмокопии прокатная компания присылает ключ — архив файлов с кодом, который для каждого зала генерируется отдельно и имеет ограниченный срок действия (чаще всего — неделя). Делается это для того, чтобы кинотеатры вовремя платили за предоставленный им фильм. Нет денег, нет ключа, нет кино.
«Аватар» по сборам довольно быстро отбил вложенные в него деньги и дальше началось неизбежное. Прокатные компании начали всё активнее переходить на цифровые фильмокопии и уже к концу 2012 и началу 2013 года плёночные копии среди них выпускали единицы.
Совсем «плёнка» исчезла уже в 2015 году. Из-за такого стремительного изменения рынка многие кинотеатры испытали проблемы с переходом на цифровое оборудование, ведь контента для плёнки становилось всё меньше и меньше, а замена проектора — дело дорогостоящее, тем более, если у тебя многозальный кинотеатр.
В Германии прокатные компании помогали кинотеатрам разными субсидиями, поэтому процесс проходил не так болезненно как в России, где тебя просто поставили перед фактом — меняйся сразу (и попробуй пойми, где взять эти деньги) или закрывайся.
В общем, к концу 2016 года в России практически не осталось плёночных залов. Все перешли в мир цифрового кино.
Современный кинопоказ довольно прост. Проектор работает с сервером на 3 ТБ, куда закачиваются фильмы в формате DCP (с прошлого года практически все прокатные компании отправляют копии через интернет прямиком тебе на сервер). Расписание формируется в программе, выгружается на сервер, и кинопроектор сам знает, когда включить свет, когда выключить свет, когда погасить свет на 50%. Фактически, всеми проекторами киномеханик управляет с одного компьютера, где есть доступ к каждому из них.
Расписание формируется, забивается в программу проектора, и он автоматом включает все сеансы. То есть, в скором времени присутствие киномеханика может и не потребоваться вовсе. Он будет приходить раз в неделю для формирования расписания и обслуживания проектора.
Всё изменилось, всё автоматизируется. Раньше в кинотеатре работало по шесть киномехаников, теперь — два. Я могу с телефона зайти и посмотреть сколько отработала лампа каждого проектора, что показывает он в данный момент и когда закончит показывать.
К современным кинотеатрам, легко можно подключить ноутбук, PS4 и любую другую игровую приставку. Мы так делали, когда транслировали The International (с ноутбука посредством Twitch), или сдавали в аренду зал для игры в PS4.
Вашему вниманию представляется программа для автоматизации ведения учета в кинотеатрах, театрах, киноклубах и т.п. Конфигурация написана на управляемых формах, имеет понятный интерфейс и несложную реализацию кода. Подойдет как для готового решения, так и в качестве базы для создания более функциональной версии. Также будет полезна студентам в качестве курсовой или дипломной работы. - 19.12.2014 Доработана возможность создания собственных схем залов. Исправлены ошибки - 06.01.2018 Добавлен АРМ Расписания, исправлены ошибки
Программа разделена на 4 основных раздела: Преприятие , Продажа билетов , Расписание сеансов / анонсы , Справочная информация .
Рассмотрим подробнее состав каждого раздела.
1) Предприятие.
В Данном разделе сосредоточена информация, касающаяся работы кинотеатра и залов. Состоит из:
- Справочник Кинозалы . Хранит в себе список кинозалов. Для каждого кинозала можно выбрать соответствующую ему схему зала.
- Справочник Схемы залов . В данном справочнике находятся основные схемы залов с визуальным отображением всех мест.
- Форма настройки Параметры учета . Хранит константы для настройки основных параметров, как например "Название организации"
2) Продажи билетов.
Основной раздел, отвечающий за продажу, бронирование, распечатку билетов и чеков. Состоит из:
-
Документ Продажа билетов . Данный документ является основным для конфигурации. Через него осуществляется продажа / бронирование билетов, а также их распечатка.
3) Расписание сеансов.
Раздел несет в себе справочную информацию о всех фильмах, анонсах и расписаниях. Содержит в себе объекты:
-
Справочник Расписание сеансов . Хранит расписание сенасов для фильмов на выбранный период времени.
4) Справочная информация.
Содержится собранная из всех разделов справочная информация, облегчающая настройку конфигурации:
При старте системы на рабочем столе пользователю предоставляется наиболее важная информация о расписании сеансов, описание выбранного фильма, схема зала для него (с визуальным отображением купленных, забронированных и свободных мест), а также с возможностью быстро купить или забронировать билет.
Добавлен АРМ Расписания, который в более наглядном виде предоставляет информацию о текущем расписании показов
Здравствуйте. Имеется ПК с видеокартой GTX 1060, телевизор LG 47LA667V и домашний кинотеатр Pioneer MCS 737. Необходимо сделать 5.1 звук с ПК на домашнем кинотеатре.
Сейчас все подключено по такой схеме.
ПК подключен к телевизору по HDMI кабелю. Домашний кинотеатр так же подключен к телевизору по HDMI в разъем с поддержкой ARC. В итоге звук с ПК идет на домашний кинотеатр. Но вот проблема, звук идет стерео, а не 5.1. В настройках звука показывает только стерео подключение, без других вариантов.
Пробовал подключать HDMI от ПК в сам домашний кинотеатр, но результат тот же.
Подскажите, какие меры можно предпринять. Либо как правильно организовать вывод звука 5.1, может что-то докупить надо.
В общем заказал эту приблуду. В играх звук 5.1 есть с ней?
Жаль для моноблока не подойдет(
Что-то очень сложно, у меня пк подключён напрямую к телику через hdmi, телик через hdmi arc выводит звук на ресивер в 5.1, никаких танцев с бубнами все просто и понятно. Винда 10 карта 1060, телик lg
Дак возьми звуковуху и по оптике выведи на 5.1 (первое что пришло на ум)
А знаете что? Походу я понял, в чем проблема. Во первых в телевизоре в настройках аудио нельзя выбирать отдельно Dolby Digital, поэтому вместо PCM поставил Авто. Во вторых, самое вкусное, 5.1. звук работает только в Windows Media Player. А мой любимый Media Player Classic не умеет.
В итоге в телевизоре ставишь Авто вместо PCM и смотришь фильмы через Windows Media Player.
Мде.
Как там в играх, еще надо будет проверять. Еще бы знать, на какой игре лучше проверить. Но пока все выглядит как костыли.
В VLC можно выбрать устройство на которое будет выводиться звук. У меня например от компа через hdmi с видяхи на телик, а с телика на дк через оптику, в плеере врубаю вывод звука через тв и бед не знаю. Либо это делается непосредственно в самой винде.
Ну это не долби. Вообще возможно у тебя просто дублируется стерео на несколько каналов телеком, скачай какой нибудь тест в видео и проверь.
Спасибо за совет! Не заметил этот пункт и весь звук гонял в обход ТВ тк думал что мой LG не умеет дорожки распределять и все гонит в PCM!
Медиа плеер класик тоже не подружился с 5.1 использую potplayer, там как раз есть варианты вывода звука на любой формат и все на лету применяется
Схема проста: HDMI-кабель перетыкаешь в устройство, а из него выходят уже два коротких кабеля: HDMI в ТВ и оптический в ресивер. По сути, девайс разделяет звук и видео на отдельные потоки и делай с ними дальше, что хошь. На ресивере выбираешь не ARC, а оптический цифррвой вход. Профит.
Обязательно разберись как работает модификатор драйверов "FX Configurator" (ставится с APO Driver). Собственно, тебе надо будет только выбрать NVIDIA HDMI, сделать бэкап настроек и загрузить готовую конфигурацию Dolby Home Theater v4. Удачи))
В настройках звука на ТВ установить Автозадержку на 0 (если имеется), а в настройках ТВ входа HDMI обязательно выбрать PC (ПК) - НЕ ИГРОВОЙ РЕЖИМ, А ИМЕННО ПК. Тогда звук и видео будут более менее синхронизированны.
Внимательно, по пунктам, изучать инструкцию дикого японского программиста!
Это решение вообще ничего не требует, просто по твоему кабелю HDMI начинает идти не битовый поток Стерео, а кодированный поток Dolby Digital 5.1. Никаких доп. плат SPDIF, никаких затрат, ничего, просто софт, модифицирующий имеющиеся драйвера звука NVIDIA HDMI: в Свойствах настроек звука, появляется вкладка Dolby (там можно будет настраивать режимы вывода Кино, Музыка, Игра, Голос, эквалайзер, уровень нормализации, объёма, и.т.п) и во вкладке Дополнительно в форматах звука, появляется "Dolby Digital". Простенько и со вкусом)
Современные онлайн-кинотеатры по моему мнению (надеюсь и не только моему) имеют две проблемы: стоимость и дизайн. Если стоимость еще и оправдана, то полновесные сайты платные и бесплатные имеют довольно плохую оптимизацию:
Показатели PageSpeed от Google для мобильных устройств, для компьютеров показатели немного лучше, но даже с хорошей оптимизацией для ПК нельзя забывать про большой объём страницы
Идея создания кинотеатра с ультра-легкими страницами пришла после использования пиратских онлайн-кинотеатров: огромное количество рекламы, лаги на TV-приставках и телефонах, баннеры, блокирующие кнопки показа видео, вылетающие плееры без сохранения времени и много других ужасных вещей. так и появилась идея создания (бан за спам от dtf)
Сайт написан Python, использовал микро-фреймворк Flask.
Решил размещать сайт на Яндекс.Облаке - гибкая настройка, своя ВМ, изначально собирался хранить фильмы на сервере, а обычные хостеры ограничивают максимальный объём памяти. В Облаке максимальный объём памяти аш 4Тб. Позже оказалось что лучше встроить плеер без рекламы по id КиноПоиска, так я пришёл к 19 Гб SSD (большую часть занимает образ системы).
Одной из главных фич сайта является добавление фильма по id КиноПоиска:
(Бан за спам от dtf) имеет отличную оптимизацию:
показатели PageSpeed с мобильных устройств (рейтинг снижен из-за рекламы, к счастью благодаря функции асинхронности она не влияет на загрузку сайта)
и приятный дизайн:
Считаю блок рекламы оправданным решением, не хочется каждый месяц терять >1000 рублей. Кто не согласен прошу в комментарии)
Проект является простым увлечением, скорее всего я даже вывести деньги не смогу (мне только 17), если у вас есть идеи, предложения, найденные баги, ошибки, или вы хотите мне помогать, прошу писать в ЛС или комментарии.
За ту долю секунды пока мне не отправил в спам dtf, успело прилететь аш 4 комментария. Поэтому хочется сделать важное дополнение и обосновать принятие решений:
Я посчитал комментарии летящими в никуда байтами, ибо всё равно все ищут фильмы на КП, а отзывы без модерации типа hdrezka: "ПрИкОльНый ФилЬм СмоТреЛи Всей ДерЕвнЕй" скорее отпугнут потенциального зрителя. Единственное можно добавить виджет с оценкой Кинопоиска если появится в этом потребность.
Когда ты заходишь на сайт для просмотра фильма, ты идёшь только за просмотром, ну и может перед просмотром воодушевиться описанием, считаю громоздкий дизайн главной проблемой онлайн-кинотеатров, однако прислушавшись к комментариям понял что необходимо добавить стиля)
Современные онлайн-кинотеатры по моему мнению (надеюсь и не только моему) имеют две проблемы: стоимость и дизайн.
Вот у вас странные проблемы, на самом деле. Лично у меня две совершенно другие претензии: качество потока и отсутствие оригинальных озвучек с субтитрами.
Первое - то, что сервисы вряд ли смогут сильно улучшить в ближайшие годы: это какие серваки нужны, чтобы блюрей-качество стримить. Ну разве что за подписку подороже кто-то может такую опцию ввести.
Второе просто огорчает, и я не вижу особых веских причин для кинотеатров не добавлять оригинальную дорожку. Потому я пока не вижу смысла слезать с торрент-иглы лично для себя. По крайней мере, пока за это никого не наказывают у нас в стране, можно вообще не заморачиваться.
Меня зовут Вадим и я расскажу вам, как мы это делали в команде Развлечений в Тинькофф.
Что нужно, чтобы купить билет в кино?
Когда вы определились с фильмом и кинотеатром, вам нужно выбрать место в кинозале - изучить красивую схему выбора мест и купить самые лучшие билеты.
дизайн схемы выбора мест
Мы придумали три варианта реализации такой схемы.
1. Сделать все на старом добром HTML
Удобно работать в React.
Все доступно (A11Y).
Растет количество DOM-нод и глубина DOM-дерева (пример — на изображении выше).
Проблемы с производительностью при взаимодействии с пользователем (перемещение схемы).
2. Использовать SVG
Плюсы и минусы примерно такие же, как и с HTML.
Получилось найти только схему метро на SVG
3. Canvas
Удобно стилизовать (можно нарисовать что угодно).
Меньше проблем с производительностью.
Не получится совместить с Server Side Rendering.
Проблемы с A11Y (нет «из коробки»).
Мы решили делать схему на canvas, потому что нам важно, чтобы все было красиво и с приятным UX для пользователя. Также с технической стороны у нас пропадают проблемы с глубиной DOM-дерева и количеством нод в нем. Тем более что canvas без проблем работает даже в Internet Explorer 11.
Конечно, на наше решение повлияло и то, что использовать canvas намного интереснее, чем просто работать с SVG- и HTML-решениями.
Экосистема вокруг canvas
Итак, мы отправились выбирать библиотеку для более удобной работы с canvas. Как оказалось, их существует достаточно большое количество, из самых популярных — Konva, PixiJS, Fabric.js и Phaser.
Из этого многообразия мы выбрали PixiJS. Ключевые особенности Pixi: он быстрый, гибкий и производительный. Также наши коллеги активно рекомендовали использовать именно его.
Простой код на PixiJS. Мы инстанцируем Pixi.App с заданным конфигом (например, ширину, высоту, цвет фона, разрешение). Добавляем объекты на сцену (Stage в терминологии Pixi), пишем простой цикл и получаем сетку 5 × 5 из кроликов, которые вращаются вокруг своей оси — пример с официального сайта Pixi
Структура и читаемость
Этот код достаточно простой для понимания, но и делает он не так уж много. Если мы хотим создать что-то наподобие схемы выбора мест, код становится достаточно объемным и плохо воспринимается.
Выше не слишком крупная программа, но мы уже дошли до 100 строк кода и, просто глядя на этот код, тяжело понять, что же происходит.
Вписываем в React
Кроме сложности понимания кода возникает другой вопрос: как это вписать в парадигму React?
Сначала мы решили сделать свои обертки для разных примитивов. Но впоследствии обнаружили, что за нас все уже придумали.
Одно из решений, которое понравилось нам, — библиотека react-pixi-fiber. Ее плюс в том, что мы пишем привычный нам JSX, а под капотом происходит взаимодействие с Pixi и мы получаем наш canvas.
В этой библиотеке у нас уже есть обертки для всех нативных объектов Pixi. К примеру, вместо инстанцирования класса Pixi.Text мы используем react-элемент .
Также есть удобное АПИ для создания своих объектов — CustomPIXIComponent
Приблизительно так теперь выглядит код для нашей схемы выбора мест. Здесь уже нет никаких инстансов Pixi, у нас обычный JSX: компоненты Stage, Container, посадочные места, привычный маппинг данных на react-компоненты.
А вот как выглядит создание своего компонента. Он немного отличается от привычных react-компонентов, но, если разобраться, по сути тут все то же самое. У нас есть ссылка на отображаемый компонент graphics и привычное слово props. Также почти привычным образом мы можем использовать обработчики событий, например ховер, клик и так далее.
Применяем все на практике
Какие у нас были вводные для отрисовки кресел?
У нас была информация в виде массива объектов. В каждом — данные, необходимые для отрисовки сиденья: размеры, координаты, номер места и ряда.
Наша задача — сделать так, чтобы в любых сочетаниях кресла смотрелись красиво.
В зависимости от ценовой категории кресло может иметь различный цвет. А также кресла могут быть разных размеров: например, это сдвоенные места — диванчики.
Вариант с загрузкой кресла как простой текстуры мы сразу отбросили: были проблемы с отображением на retina-экранах и в целом с изменением размеров без визуальной деформации. А с SVG в то время были проблемы у PixiJS: некорректно работала подгрузка ассетов в SVG.
Поэтому мы решили сами рисовать каждое кресло.
Рисуем кресло на PixiJS
Для удобства мы разделили кресло на сектора:
A — полукруглые края подлокотников.
B — подлокотник.
C — кривая от подлокотников до спинки кресла.
D — спинка кресла.
E — верхняя часть кресла.
F — средняя часть кресла.
G — нижняя часть кресла.
Ширина одной клетки — width / 22.
Высота одной клетки — height / 16.
Кресло в макете у нас имеет размер 22 пикселя на 16, таким образом, каждая черточка или буковка — это пиксель в сетке.
Затем мы разделили эту сетку на зоны: подлокотники, спинка и так далее. И отрисовали все по частям, используя PixiJS и CustomPIXIComponent.
Теперь — все по порядку и каждому разработчику, который приходит в этот код, сразу понятно, где, как и что.
Мы решили все задачи: кресла могут быть любых размеров без потери пропорций, реагируют на действия пользователя и выглядят круто!
Схемы секторов
Когда вы покупаете билет на крупное мероприятие, например на хоккей или на концерт в «Олимпийском», скорее всего, сначала вы выбираете сектор, в котором хотите сидеть, а потом уже — места в этом секторе. С появлением задач по концертам нам тоже нужно было это реализовать.
От наших партнеров приходила такая схема секторов.
Собственно массив секторов в поле sectors с информацией о каждом секторе, название площадки, а также строка hallScheme, которая занимает почти 236 килобайт.
Как оказалось, это схема секторов площадки в SVG и закодирована в base64.
Что же нам с этим делать?
Первым нашим решением было парсить этот SVG и как-то перевести на PixiJS.
Второй вариант — просто вставить это как HTML, повесить обработчики через стандартные методы.
Рассмотрев эти варианты и взвесив плюсы и минусы, мы решили пойти дальше и сделать третий вариант — парсить эту SVG и превращать ее в react-элементы.
Выбором для парсера стал html-react-parser. Эта библиотека парсит любой валидный HTML в react-элементы. Работает как на стороне Node.js, так и на стороне браузера. Но решающим стало то, что любой элемент из оригинальной разметки можно заменить на что угодно.
Передаем всю разметку схемы в функцию parseHtmlToReact а также через опции задаем функцию, которая будет заменять элементы на наши.
Здесь уже опять привычный нам JSX и полный контроль над всем, что нужно: обработчики событий, стилизация и так далее.
Вот так теперь выглядит ВТБ Арена.
Поговорим об оптимизации
Во время работы над схемами мы заметили, что даже для маленьких схем загрузка процессора держится на 20%, а в больших достигает 80—90%. Визуально это незаметно для пользователя, но может привести к проблемам на слабых мобильных устройствах и быстрому разряду батареи.
Используя инструменты разработчика, мы видим, что даже при простое приблизительно каждые 16 мс вызывается одна и та же таска. Сразу видно некий Ticker_tick
В замечательной документации по Pixi можно найти упоминание об этом тикере. Как понятно из описания, это некий цикл, который выполняет что-то за некий интервал времени, в нашем случае — приблизительно каждые 16 мс.
Но почему именно 16 миллисекунд?
Вспомним понятие «60 кадров в секунду» - это нужно, чтобы обеспечить плавность анимации и перемещений. Также, новые фильмы снимают в 60 кадров в секунду, что дает более плавную картинку.
Чтобы получить такую частоту обновления, нужно каждую секунду обновлять изображение 60 раз: 1000 мс ÷ 60 = 16,6666 мс.
Как раз этот цикл из класса Pixi.Ticker обеспечивает обновление 60 раз в секунду всего canvas, и у нас все плавно и красиво. В нашем случае при большом количестве объектов перерисовка выходит достаточно дорогой. При этом чаще всего схема абсолютно статичная, а плавность нужна только при взаимодействии.
Так как мы не работаем напрямую с Pixi, получить доступ к регулированию цикла обновления мы не могли.
Исходный код компонента Stage из react-pixi-fiber
Как видно, вся работа с Pixi происходит внутри компонента Stage от react-pixi-library. К сожалению, официальных способов от создателей react-pixi-library по работе с Ticker нет.
В нашем случае выходом стало применение опции sharedTicker для Pixi. По сути, эта опция включает использование всех инстансов pixi-приложений общего Ticker. Общий Ticker доступен простым импортом из пакета.
Мы сразу отключили автоматический старт цикла обновлений Ticker с инициализацией приложения. А дальше мы связали это с ререндером react-компонента, так как при взаимодействии пользователя со схемой меняются props данного компонента.
Соответственно, цикл обновления запускается, только когда нужно. В остальных случаях canvas статичен, выглядит как картинка и не нагружает ресурсы.
Пока мы все это изучали, обнаружили, что у Pixi на Github есть целая wiki, где очень много интересной информации:
Забавно, что на официальном сайте Pixi ссылку на эту wiki не найти.
Главный совет по оптимизации заключается в том, что инстансы объектов Pixi.Graphics стоят дорого и не кэшируются, в отличие от текстур, спрайтов и так далее. А наши кресла, как сложные объекты, как раз и являются инстансами Pixi.Graphics.
Выводы
Какие выводы из этого всего можно сделать?
Чем меньше оберток — тем более гибко мы можем оптимизировать приложение.
Работа с canvas отличается от обычных рутинных задач.
Pixi заточен под более интерактивные вещи, например игры.
При разработке желательно сразу иметь большой объем данных. Например, в нашем случае надо было сразу получить схему какого-нибудь огромного концертного зала вместо зала кинотеатра.
Читайте также: