Android. Как реализовать загрузку видео на сервер со слабым интернетом?

как реализовать заливку видео на сервер если слабый интернет. Как то по частям или от слабого интернета ничего не спасает?
  • Вопрос задан
  • 513 просмотров
Пригласить эксперта
Ответы на вопрос 4
tumbler
@tumbler
бекенд-разработчик на python
Как ни крути, интернет на мобилке - он практически всегда слабый. Надо уметь с этим жить. Для этого многие реализуют "докачку": при обнаружении разрыва соединения клиент спрашивает у сервера "на чем остановились" и продолжает загрузку видео с указанной точки. Нужна поддержка и на клиенте, и на сервере.
Вот эти ребята предлагают стандартизированный протокол с кучей библиотек по обе стороны интернета. Google, Vimeo реализуют "догрузку" по-своему. Есть еще resumable.js, но он работает с блоками и на мой взгляд слишком ненадежен из-за своей сложности.
Ответ написан
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
https://www.resilio.com/ (бывший bittorrent sync)
или его аналоги
https://syncthing.net/
Ответ написан
zoonman
@zoonman
⋆⋆⋆⋆⋆
От слабого интернета не спасает ничего, кроме сильного интернета.

А теперь без шуток. В народе под слабым интернетом понимают медленный и ненадежный. Т.е. низкие скорости, ошибки передачи и обрывы в порядке вещей. Обычно такое на медленных GPRS/2G/3G соединениях. Встречается также на старых телефонных линиях, когда ADSL частенько падает.

В таких случаях загрузка видео организуется простым и надежным методом - разбивкой на части и подтверждением целостности частей.
Грубо говоря, берете файл, отрезаете от него фрагментик в 64кБ и отправляете на сервер. Если сервер за разумное время не ответил (например за минуту), рвете соединение и пытаетесь снова. Вместе с кусочком отправляете md5 этого кусочка. Сервер при приеме кусочка точно также считает md5. Если суммы совпадают, то тогда фрагментик записывается в нужное место файла.

Когда отправляются фрагменты, каждый пакет несет в себе информацию:
  • идентификатор файла
  • начало фрагмента
  • длина фрагмента
  • md5 сумма от фрагмента


Первый фрагмент дополнительно несет в себе информацию
  • идентификатор файла
  • имя файла
  • размер файла
  • md5 файла


Сервер обязан отслеживать какие части файла были загружены.

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

Сервер должен быть достаточно умным, чтобы контролировать гонки и уметь закрывать открытые зависшие соединения.
Размер фрагментов должен быть регламентирован для предотвращения DOS атак.
Кроме этого, в пакеты с данными неплохо бы добавлять какую-нибудь подпись и соединение должно быть авторизованным.
Ответ написан
Комментировать
Ezhyg
@Ezhyg
Что такое "слабый" в вашем понимании? Если медленный, ну... сменить провайдера или забить и просто ждать выгрузки дольше. Если "падучий", отправить жалобу провайдеру, проверить/заменить оборудование, пользоваться сервисами поддерживающими дозакачку - те же облачные клиенты, я.диск, диск.google, mega или более-менее современные браузеры.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы