Как стать автором
Обновить

Комментарии 68

А исходники при этом в каком формате?
Или шо бы ни было, лишь бы могло фидить с произвольного места?

Как сшиваются заголовки у того же rtsp при этом?
Приходится перепаковывать контейнеры. У нас на JS написан парсер контейнера mp4, мы нарезаем видеопоток в нужных местах и заворачиваем в такой контейнер, который ожидает MSE. Эти заморочки — именно та причина, по которой не все комбинации сейчас поддерживаются. Скажем, мы не умеем FLV играть как HTML5 video, хотя это теоретически возможно.

RTSP пока не поддерживаем, но, возможно, будем.
Перепаковка это если бы вы из MPEG-TS MPEG-4 делали (a la hls.js). А так это более нарезка. Если не делаете ABR то нарезайте как угодно, MSE должен скушать любые byte-ranges.
HLS тоже делаем.
Заголовки RTSP? Это же бухгалтерия.
Да, это одна из многих вполне осуществимых вещей, которые можно сделать. Чем больше программистов мы найдём, тем больше интересных штук сможем реализовать.
Я о том что там ничего интересного/сложного нет. Ну это понятно.
А RTSP ИМО мертв)

Мы с этим экспериментировали. На практике оказывается нереально обеспечить бесперебойное воспроизведение.
НЛО прилетело и опубликовало эту надпись здесь
У нас нет реализации BitTorrent на чистом JS, и это, скорее всего, вообще невозможно. Есть модуль на C, в котором использована сторонняя библиотека для загрузки торрентов. Этот модуль запускается как отедльный процесс под Windows и Android.
Webtorrent не смотрели? Он и на гитхабе есть.
Спасибо, интересный проект. Правда, там написано, что протокол модифицирован и не совместим с BitTorrent, но всё равно потенциал есть.
Еще пару лет назад бразилец один написал bem.tv, со свармом, блекджеком ну и остальным. Работает он правда только в хроме, MSE нужен.
И оно работало, и даже неплохо. Плохо только дл live стримов неприменимо.

Еще есть peer5, кстати
Для всего остального, что мы вытворяем, тоже нужен MSE. Но теперь это есть не только в Chrome, но и в Firefox, Opera и даже новейших IE.
на айфонах как вы mse играть будете?
Где невозможно, там невозможно. Происходит fallback до «обычного» прямого воспроизведения видео с сервера-источника.
А в чем, на ваш взгляд, была причина? Недостаток протокола торрента/udp?
Много времени занимает изначальный поиск источников, нет никаких гарантий. Всё-таки в коммерческом видеохостинге нужны гарантии, что видео начнёт играть через разумное время после запуска и не остановится посередине.

Возможно, если технологию совместить с обычной загрузкой по HTTP, можно достичь успеха.
Ну можно в качестве надёжных пиров использовать те же сервера CDN-а, которые всегда присутствуют в хайве, плюс по возможности использовать живой пиринг.
Так обычно и делают те, кто Р2Р как услугу предлагают. В опен-сорс не выкладывает что-то никто. Оно, на самом деле, несложно выходит с webtorrent и hlsjs, просто это ж сделать надо.
Для каждого заказчика мы настраиваем ограниченный круг доменов, на которых может быть размещён плеер. Благодаря этому никакие проходимцы не смогут просто разместить плеер на своём сайте за чужой счёт. А уже в пределах своих доменов хозяин сайта сам должен ограничивать, кому он показывает какие ролики.

Поскольку видео грузится как cross-domain (CORS), о печенюшках говорить не приходится. Можно разработать какую-то систему с ключами в URL, если этого пожелает заказчик. Но смысла в этом всё равно маловато.
В этом как раз и есть смысл. Защита от встраивания не поможет, когда можно вытащить манифест и раздать его свои клиентам в своем плеере. Даже ключи шифрования не помогут. И сессионные токены не помогут, потому что так же уводятся. Не знаю, слышали про rawstreams и fneulion или нет.

Тут один вариант: генерировать одноразовый ключ на сегмент, но если вашим клиентам не надо, видимо у них публичный контент.
Мы сейчас говорим о запрете на сохранение видео пользователем (задача не решается в принципе), или о защите от размещения этого же видео на чужих сайтах, но за счёт изначального хозяина?
О размещении на других сайтах. На вашем сайте с демо-плеера спокойно вытаскиваются адреса и mp4 файлов, и m3u8 манифестов, которые можно всунуть в свой плеер на любой странице и показывать своим пользователям.

На сегментах же CORS хеадеры в вайлдкарде.
Пока не было запроса от клиентов на это. Сделать, конечно, можно.
Да больше скажу, прям сейчас можно с вашего демо аккаунта бесплатно раздавать свое видео своим же пользователям. Ну и подозреваю с любого аккаунта, который у вас зарегистрирован тоже.
У нас есть мониторинг для выявления таких злоупотреблений. Мы это быстро заметим.
Проблема этими европейскими хостингами предлагающими сервер + 300мбит за $30-40 в месяц в том, что когда начинаешь действительно раздавать 300мбит, то через какое-то время они отключают сервер, а на тикеты отвечают «we do not like you» (четыре случая за 2 года).
Хотя если их много, то можно и надёжный CDN сделать.
У нас их много. Мы научились строить надёжный сервис поверх ненадёжных провайдеров.
То есть это витруальные 300Мбс, теоретически возможные, а не реально доступные потребителю в пике нагрузки?
В пике-то доступные.
Если постоянно столько качать, то внезапно начинают считать деньги и выгонять клиентов от которых мало прибыли, а то и убыток.
«какое-то время» в первом комментарии — это несколько дней/недель
digitalocean как-то заподозрил, что наши виртуалки взломали, и заблокировал их. Мы написали письмо, где объяснили, что большая нагрузка в первую неделю месяца для нас — норма. Больше проблем не было.
Это те самые 300 Мб. Впрочем, они честно попросили снизить обычное использование до 100 Мб с виртуалки. За $10 в месяц за виртуалку просьба вполне адекватная.
НЛО прилетело и опубликовало эту надпись здесь
Я написал об этом в тексте, в планах есть.
Интересный проект! Интересуюсь, есть ли еще кто то из видео-хостеров, кто так же использует одновременно несколько источников в плеере? Глянул на ютуб — очевидно, что они довольно умно динамически управляют подкачкой, но, видимо, все кусочки тянутся с одного сервера, выбранного при первоначальной загрузке страницы. Есть ли какие то технологические подводные камни такого склеивания?

Умеете ли динамически управлять качеством потока, снижать его при низких скоростях?

Кстати, неужели проблемы с битторрентом оказались не решаемые? Вроде бы протокол специально разработан для похожих задач и видел открытые проекты с его реализацией на клиенте.
У YouTube софт весьма умный, но их технология никому, кроме них, не доступна. Хотите так — публикуйте видео на YouTube (а это для многих не вариант — например, для порносайтов).

Мы точно измеряем множество показателей и если даже сейчас не умеем автоматически менять качество, то сделать это нетрудно.

Протокол такой, что его не реализовать в рамках веб-страницы. Webtorrents использует модифицированный, не совместимый с BitTorrent вариант протокола.
Но вам ведь и не нужен конкретный протокол, нужно просто чтобы пользователь мог качать видео не только с серверов но и с других пользователей.
Ну вот вопрос был про BitTorrent. Конкретно немодифицированный BitTorrent в браузере без плугинов использовать невозможно. Но webtorrents — технология интересная и может оказаться нам полезной.
Есть фирмы которые поставляют HTML5 видео с Р2Р.
Точек в России у вас пока нет? Ожидаются?
В России сравнительно дорого. Как написано в тексте, наша технология позволяет арендовать сервера там, где это дёшево, и показывать при этом качественное кино даже в тех странах, где сервера дорогие.
Обращайтесь — поможем в России раздавать видео по европейским ценам. ;-)
Я вижу несколько подходов для решения этой проблемы:
1. плейлист m3u8 создается динамиески с адресами .ts чанков на нужных серверах. В таком случае всегда можно подпихнуть быстрый сервер в начало файла и при перемотке тоже
2. Сами адреса чанков в плейлисте — динамические. На каждый запрос к чанку отдается 302 статус на ближайший или дешевый сервер. Таким образом можно балансировать нагрузку между CDN.
Одним словом: в HTTP протоколе уже все есть и давно реализовано, или я что-то упустил? С безопасностью тоже вроде все нормально, например nginx-secure-token-module есть.

Гораздо интереснее задача раскидать по CDN лайв поток, да так, что-бы чанки появились на серверах быстрее, чем истекли. Эта же проблема и к Р2Р лайв стримам относится, которые, к слову, многие используют уже. Если взять для примера acestream, то у них очень приличная задержка, минут 5 для того, чтобы расползлись данные по пирам.

Кстати, насчет webtorrents, их народ долбит на гитхабе, почему они не сделают реализацию Р2Р видео, на что они отвечают, что это out of scope их проекта, но вполне реализуемо т.к. вебторренты — это транспорт, его можно использовать как угодно. По-моему, Р2Р видео в браузере — это самое востребованное направление сейчас в стриминге, думаю через пол-года — год будут уже очень интересные решения.
У них же демо P2P видео прямо на главной странице.
Это не Р2Р видео в привычном понимании
https://github.com/feross/webtorrent/issues/448
> Р2Р видео в браузере — это самое востребованное направление сейчас
Уже есть и отлично работают.
А скиньте ссылок на опенсорсные плееры, которые поддерживают Р2Р и умеют играть live-стримы?
polygoncast — работает с любым HTML5 плеером
peer5 — заработает с любым HTML5 плеером
viblast — только свой плеер вроде но хороший
streamroot — вроде только JW Player + на запрос
А те, которые к своему cdn подрубить можно? Это все пропиетарные аддоны к опенсорсным плеерам, всех видел, но не то все это.
Что вы имеете ввиду? Использовать свой CDN без доп. настроек? Polygoncast точно можно, peer5 вроде как.
peer5 можно использовать так, но без своих CDN. Polygoncast вообще странный, не увидел ссылок ни на загрузку, ни на код.
Плеер, проект, концепция — все очень интересно. Вот только мне осталась очень непонятна цена. Цент за гигабайт — откуда такие дикие цены?
Цены на рынке сейчас 0,4-1$ за мегабит или 1000$ за гигабит — это максимум. Просто публичные цены у провайдеров, например здесь — ahcdn.com/en/prices
1 гигабит в месяц за 1000$ даст нам 0,125*3600*24*30=324000 ГБ в месяц, которые по ценам этой статьи нам пытаются продать за 324000*0.01=3240$, то есть в 3 раза дороже. А при серьезных объемах на рынке можно получить цену 2-3 раза ниже, то есть разрыв цены уже на порядок!
С этим как раз вопросов нет. Если вам надо только террабайт раздать в месяц, или раздать сразу короткий поток на 3-4Gbps, то все удобно. Когда есть объемы, денежный поток и руки не из одного места, то естественно этот сервис не нужен.
Никто не мешает же зенкодеру драть по 5 баксов за минуту конвертированного видео, видимо есть спрос.

Мне вот другое интересно: video.js в 5 версии вроде как не умеет из коробки играть hls во флеше, у них есть hls-contrib плагин, который они под последнюю версию так и не допилили. Или я не допонял?
Когда нужно раздать террабайт, в 300 раз меньше чем в моих расчетах — это 3 мегабита. Это из дома можно раздавать или с любой VPS за 5$. Woodroof писал выше, например, 100мегабит за 10$.
Дорого как ни крути, а предлагается сервис только как дополнительный при уже имеющемся собственном каком-то дорогом CDN.
Из дома раздать террабайт на 600-700 зрителей с битрейтом хотя бы 2000Kbps? Сомнительно. Так же как и ВПСку прикроют моментально если она хоть 20 минут будет по пол-гигабита раздавать.
А вы, кстати, можете попасть в целевую аудиторию. Если у вас внезапно набежит толпа народу на раздачу с домашнего канала, то вот так подключить в пару строк пару мощных серверов удобно же.

Строить самому распределенную систему дистрибуции контента дорого и нервно, это как мороженое: по сути замороженные сливки, но проще купить в магазине.
Мы вели рассуждения в разрезе месяца. Честно говоря давно не видел цен за гигабайт, все оперируют полосой в месяц.
Смысл рассуждать помесячно есть конечно, если трафик плавный и растет прогнозируемо. Это достижимо на больших объемах, на маленьких скачки могут прибить, особенно если не знать, что с этим делать.

Полосой в месяц оперируют все на каналах до 100Mbit. Уже от 1Gbps в основном или ограничения по объему или шаред порт. Ну или дорого просто.
Мне вот другое интересно: video.js в 5 версии вроде как не умеет из коробки играть hls во флеше, у них есть hls-contrib плагин, который они под последнюю версию так и не допилили.
Плагин contrib-hls последней версии (ветка development) вполне себе хорошо играет HLS во флеше. Проблемы там с проигрыванием HLS через HTML5 (MSE), а вот со флешом всё ок: VideoJS v5 + HLS + Flash, без подключения Hola CDN.
Спасибо, проверю! Т.е. hlsjs они так еще и не прикрутили для mse?
Оно там есть, но пока что багов много. Что-то играет вроде нормально, а на чём-то падает либо сразу, либо чуть погодя. :-)
А где найти дешевый безлимитный хостинг?

На всех дешевых виртуалках очень скромное ограничение по количеству трафика. На океане за 10 баксов 2Tb.
Этого хватит примерно на 4 суток раздачи 100mbit.
По доброй традиции хаба «Клиентская оптимизация» поинтересуюсь:
— автор, вам известно значение термина, давшего название упомянутому хабу?
— какое отношение этот топик имеет к предметной области, описываемой этим термином?
Я понимаю словосочетание «клиентская оптимизация» как меры, принимаемые на клиентской стороне веб-приложения для ускорения загрузки, улучшения времени реакции и т.п. С этой точки зрения описанная здесь технология вполне является клиентской оптимизацией, так как клиентский скрипт мультиплексирует пофрагментную загрузку видео с различных серверов для обеспечения бесперебойного воспроизведения.
Этот топик мог бы иметь прямое отношение к предметной области, если бы в нём было детально рассказано об оптимизации вашего решения, либо о конкретных (с цифрами, сравнительным анализом) оптимизационных преимуществах вашего продукта, который в ряде частных случаев сам мог бы выступить инструментом клиентской оптимизации.

Если кратко, то как подписчик технологического хаба, я ожидаю в нём технические, но не маркетинговые тексты.
Мне жаль, что Вам не понравилось.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий