Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Кэш для видео  [new]
rabiter
Member

Откуда: SPb
Сообщений: 667
Коллеги, посоветуйте навскидку с такой задачкой.

Приложение для хранения документов. Документы могут быть разного формата, картинки, документы, чертежи.
В зависимости от mime type документа, мы показываем документы в браузере в разных просмотрщиках (pdf показываем в pdfviewer, картинки в js просмотрщике и т.д).
Появился заказ на то, чтобы проигрывать еще и видео. Сами документы (в том числе и видео) лежат в архиве (в зависимости от заказчика это может быть HCP, AZURE, SFTP, Amazon S3 и другие. Т.е. мы работаем с архивом через абстракцию, другими словами, у нас на руках обычный InputStream. Так вот, простое решение есть. Есть сервлет, который умеет обрабатывать range requests. Т.е. допустим, видеоплейер запрашивает видеофайл с середины. Мы в сервлете делаем InputStream#skip(long n) до нужной позиции, и отправялем нужные байты браузеру. Все работает, и на первое время мы с этим решением скорее всего и останемся. Но!
Во взрослой системе, наверное надо же какой-то быстрый кеш использовать для этого? Т.е. видео прочитали из архива и сохранили в каком-нибудь быстром кеше и в следующий раз, когда другой пользователь хочет посмотреть это же видео, или тот же польователь, но с другой позиции - мы уже будем раздавать это видео из кеша, который должен быть быстрее архива.
Типа как на этой картинке


Если я прав, то что, навскидку, можно использовать для кеша, Redis? Memcache? Сильно не пинайте, я в таких вопросах новичек, поэтому пришел за советом. Есть какие-нибудь готовые решения?
4 мар 20, 16:31    [22092745]     Ответить | Цитировать Сообщить модератору
 Re: Кэш для видео  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
rabiter
Так вот, простое решение есть. Есть сервлет, который умеет обрабатывать range requests. Т.е. допустим, видеоплейер запрашивает видеофайл с середины. Мы в сервлете делаем InputStream#skip(long n) до нужной позиции, и отправялем нужные байты браузеру. Все работает, и на первое время мы с этим решением скорее всего и останемся. Но!
Во взрослой системе, наверное надо же какой-то быстрый кеш использовать для этого?
Вы страдаете херней: нет вообще никакого смысла выкачивать контент сначала себе, а потом отдавать клиенту (это вообще зовется "прокси", и InputStream#skip(long n) - это совсем не стандартное поведение прокси), клиент нужно сразу отдавать прямые ссылки на контент, возможно с ключом доступа, все CDN такое умеют (иначе они нахер не нужны), AWS тоже.
6 мар 20, 09:38    [22094209]     Ответить | Цитировать Сообщить модератору
 Re: Кэш для видео  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5179
rabiter

Если я прав, то что, навскидку, можно использовать для кеша, Redis? Memcache? Сильно не пинайте, я в таких вопросах новичек, поэтому пришел за советом. Есть какие-нибудь готовые решения?


Зачем?! "Все украдено до нас"
Подойдет любой кеширующий прокси.
6 мар 20, 11:12    [22094318]     Ответить | Цитировать Сообщить модератору
 Re: Кэш для видео  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
rabiter
Во взрослой системе,
во взрослой системе в ТЗ идут от пользователя.
Например, буферизация видео как тут в виде полосочки СПРАВА
Это есть у вас?
Ведь непонятно какую задачу вы решаете кэшированием. Какую?
Столько понаписали и не обозначили ПРОБЛЕМУ.
Картинка с другого сайта.
6 мар 20, 11:43    [22094365]     Ответить | Цитировать Сообщить модератору
 Re: Кэш для видео  [new]
rabiter
Member

Откуда: SPb
Сообщений: 667
Андрей Панфилов
Вы страдаете херней


У меня тоже возникло такое ощущение, поэтому пришел сюда за советом.

Андрей Панфилов
нет вообще никакого смысла выкачивать контент сначала себе, а потом отдавать клиенту... клиент нужно сразу отдавать прямые ссылки на контент


Ок, понял. Но в нашем случае не вариант видимо. Потому что разные кастомеры могут использовать разные архивы (FtAPI, Centera, SFTP, NetAPP, HCP, AZURE, SFTP, Amazon S3) - зависит от заказчиков. И чтобы их всех поддерживать, нужна абстракция вокруг них, которая приводит их всех под один общий знаменатель (уничтожая при этом плюшки некоторых их них). Т.е. вот так вот дать кастомеру прямую ссылку на файл в архиве - сомневаюсь, что возможно.

Андрей Панфилов
все CDN такое умеют (иначе они нахер не нужны), AWS тоже.


Продукт ставиться окружение заказчива, в основном это какая-то корпоративная сеть. Думаю CDN там не пахнет и близко. Но вообще спасибо за наводку.
6 мар 20, 15:27    [22094685]     Ответить | Цитировать Сообщить модератору
 Re: Кэш для видео  [new]
rabiter
Member

Откуда: SPb
Сообщений: 667
mad_nazgul
rabiter

Если я прав, то что, навскидку, можно использовать для кеша, Redis? Memcache? Сильно не пинайте, я в таких вопросах новичек, поэтому пришел за советом. Есть какие-нибудь готовые решения?


Зачем?! "Все украдено до нас"
Подойдет любой кеширующий прокси.


Я понял идею, спасибо!
У нас не сервис, а коробочный продукт. Т.е. установка приложения идет на окружение заказчиков. Т.е. надо будет как-то настраивать проксю на стороне кастомера. Но идея я понял и всяз на вооружение.
6 мар 20, 15:29    [22094687]     Ответить | Цитировать Сообщить модератору
 Re: Кэш для видео  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
rabiter
нужна абстракция вокруг них, которая приводит их всех под один общий знаменатель (уничтожая при этом плюшки некоторых их них). Т.е. вот так вот дать кастомеру прямую ссылку на файл в архиве - сомневаюсь, что возможно.
У вас абстракция неправильного порядка, потому что вы пытаетесь решить инфраструктурную задачу при помощи разработки, правильно так:
- у заказчика файлы в AWS - ломимся в AWS, генерирует прямые сслыки, отдаем клиенту
- у заказчика файлы в файловой системе - заставляем какой-нить nginx раздавать эти файлы
- у заказчика файлы в какой-то жопе - делаем отдельный сервис, который будет отдавать контент и на него кидаем ссылки
6 мар 20, 15:40    [22094696]     Ответить | Цитировать Сообщить модератору
 Re: Кэш для видео  [new]
rabiter
Member

Откуда: SPb
Сообщений: 667
Андрей Панфилов
rabiter
нужна абстракция вокруг них, которая приводит их всех под один общий знаменатель (уничтожая при этом плюшки некоторых их них). Т.е. вот так вот дать кастомеру прямую ссылку на файл в архиве - сомневаюсь, что возможно.
У вас абстракция неправильного порядка, потому что вы пытаетесь решить инфраструктурную задачу при помощи разработки, правильно так:
- у заказчика файлы в AWS - ломимся в AWS, генерирует прямые сслыки, отдаем клиенту
- у заказчика файлы в файловой системе - заставляем какой-нить nginx раздавать эти файлы
- у заказчика файлы в какой-то жопе - делаем отдельный сервис, который будет отдавать контент и на него кидаем ссылки


Да, я понял вас, спасибо больше за совет!
6 мар 20, 16:01    [22094712]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить