[...] разработчик бэкэнд [...] настаивает на том, чтобы медиафайлы (изображения/видео) были переданы как base64, закодированные в json-файлах.
Это очень плохая (и глупая) идея вверх. Вы не хотите передать большое количество двоичных данных в виде строк. Особенно не строки Unicode.
Здесь вам нужно поднять руку и убедить своего бэкэнда-повстанца, чтобы передумать с тем, что потребуется, играть в Biber или Nickelback или даже сменить его фоновое изображение на что-то Hello Kitty или сделать снимок его экран, установите его как фон и скройте все значки и панель. Это должно помочь вам передумать. Если нет, поместите webasto в свой офис по максимуму и заблокируйте все двери и окна.
Является ли base64 кодировкой популярного способа передачи мультимедиа в мобильные разработки?
Он популярен и имеет относительно долгую историю и стал очень распространенным явлением на Usenet и так далее. Однако в те дни количество данных было очень низким по сравнению с сегодняшним днем как все данные, переданные по модемам.
Однако, поскольку это популярно, это не значит, что это правильный инструмент для всего. Это не очень эффективно, так как для этого требуется процесс кодирования, который преобразует три октета в четыре байта, вызывая добавление 33% к размеру.
Кроме того: в JavaScript каждый строковый символ хранится в виде двух байтов из-за набора символов Unicode, поэтому ваши данные удваиваются и расширяются на 33%. Ваши 300 мб данных теперь 300 х 2 х 1,33 = 798 мб (покажите это на вашем backdev! :), поскольку это реальный фактор, если серверы не могут обрабатывать большой объем трафика).
Это работает отлично для небольших файлов, но для более крупного файла, как в вашем примере, это может вызвать значительные накладные расходы как при использовании времени, так и в памяти, и, конечно же, пропускную способность. И, конечно же, на стороне сервера вам нужно будет перевернуть процесс со своими собственными накладными расходами.
А если нет, то какой альтернативный способ вы бы рекомендовали использовать для передачи/представления этих видео?
Я бы рекомендовал:
- Отдельные мета-данные, как JSON с ссылкой к данным. В JSON нет двоичных данных.
- Передача самих данных мультимедиа отдельно в собственных байтах (ArrayBuffer).
- Отправляйте оба сервера одновременно.
Серверу тогда необходимо только разобрать данные JSON в съедобные для бэкэнд, двоичные данные могут перейти прямо на диск.
Обновление Я забыл упомянуть, как Пабло делает в своем ответе, что вы можете просматривать потоковые данные.
Однако, потоковый в значительной степени синонима с буферизацией так пропускная способностью будет примерно таким же, только при условии, в более грубой силу пути (обычно UDP по сравнению с TCP, то есть. Потеря пакетов не нарушает перевод). Потоковая передача с ограничением ваших вариантов больше, чем буферизация на клиенте.
Мои 2 цента ...
base64 - ужасный способ передачи видео с точки зрения пропускной способности и производительности, используйте двоичный код, чтобы избежать распаковки служебных данных. – dandavis
Почему бы не использовать один из множества бесплатных хостинговых сайтов, которые предоставляют (а также бесплатный) API? YouTube? Vimeo? Flickr? Base64 - это не путь, слишком много данных, особенно * для мобильных клиентов. –
Спасибо за быстрые ответы. Я согласен, это кажется ужасным способом передачи видео. :) Видео должны быть только для сотрудников, поэтому они хотят ограничить их доступ к ним. Какие еще альтернативы могут быть там? Благодаря! – Shay