2016-10-27 14 views
1

Интересно, можно ли определить начальные байты & в запросах диапазона HTTP или позволить браузеру как-то знать, с чего начать, и позволить ему использовать некоторого пользователя определенный размер блока или около того. У меня есть файл в моей базе данных, и он разделен на несколько кусков, каждый кусок - 2 МБ.Как определить HTTP-запрос начала и конца байта (nodejs + mongodb)

например. 20 MB файл => 10 фрагментов

Когда браузер начинает загрузку файла (видеофайла), я изучил Chrome, он сначала проверяет диапазон байтов , и если сервер успешно отвечает «правильными» байтами и 206 заголовками назад, то он посылает другой запрос для конечных байт файла, например 'range=bytes 1900000-',

это просто checkes, если ваш сервер отвечает также для частичного ответа

на ServerSide я кодированный мое приложение так, что он будет посылать 2 МБ, если вы попросите его это хорошо :)

Что я хочу, чтобы браузер сделать

range=bytes 0-'

range=bytes 2000000-4000000 bytes'

range=bytes 4000000-6000000 bytes'

Но если вы спросите частичный, который не приспосабливает в 2mb куске он выдаст ошибку. Или он просто не будет воспроизводиться с правой позиции для аудио/видеофайла.

range=bytes 2500000-4000000 bytes'

range=bytes 0-1000000 bytes'

это даст ошибку, потому что я не могу начать, чтобы отправить из части куска. В противном случае я должен нарезать куски и выполнять некоторые операции с буфером. Но я хочу сохранить его в чистоте. Если это возможно, сообщите мне.

ответ

3

Я предполагаю, что вы передаете файл mp4? Различные части (коробки) mp4 имеют разные цели, невозможно переходить в произвольную позицию в файле и начинать воспроизведение без предварительного определения местоположения каждого кадра путем предварительной загрузки индекса (moov). Moov может быть в начале или в конце файла, поэтому браузер МОЖЕТ сначала использовать конец файла. Он может определить это, начиная с самого начала, и ищет moov, если он не находится в начале, появится указатель на расположение следующего окна. Он может прыгать через файл до тех пор, пока не найдет индекс. Как только заголовок moov загружается, браузер будет знать соответствие EXACT байта и размер каждого отдельного кадра в видео и может перемещаться по файлу по мере его поиска. Это все возможно, потому что браузер знает, как анализировать mp4 изначально. TLDR. Нет, ваше решение не будет работать.

+0

Я осуществляю частичную загрузку не только для mp4, но и для других типов файлов, например, аудиофайла, iso-файлов и т. Д. Не знал о значении индекса moov. Но мне любопытно, как он работает с gridfs MongoDB. Драйвер mongodb nodejs также разбивает файл на куски, и когда я хочу получить файл, mp4 отлично работает с потоком, и он доступен для поиска. Они определенно разрезают длину буфера блока, чтобы соответствовать запрошенному диапазону байтов и т. Д. Но я еще не там, спасибо за информацию, хотя – webmaster