Можно ли нарезать блоб видеофайла, а затем перекодировать его на стороне сервера? - PullRequest
0 голосов
/ 18 февраля 2019

Абсолютно ударился головой об этом, и я хотел бы проверить здравомыслие.Главным образом, если то, что я хочу сделать, это даже возможно, так как я сильно ограничен реактивом-нативом, который имеет довольно хитрую поддержку Blob.

Мы все знаем, что кодирование видео стоит дорого, таким образом, вместо того, чтобы заставлять пользователя кодировать, используяffmpeg Я бы хотел делегировать весь процесс бэкэнду.Это все хорошо, за исключением того, что иногда вам может понадобиться обрезать 30 секунд видео, и загружать его более 3 минут бессмысленно.

Так что у меня возникла идея нарезать каплю видеофайла:

  const startOffset = (startTime * blobSize) / duration;
  const endOffset = (endTime * blobSize) / duration;
  const slicedBlob = blob.slice(startOffset, endOffset);
  // Setting the type as third option is ignored

Как-то так, проблема в том, что файл становится полностью нечитаемым, как только он достигает бэкэнда.React Native не может обрабатывать загрузки BLOB-объектов, поэтому они конвертируются в base64, что вполне подходит для всего видео, но не для нарезанного BLOB-объекта.

Это даже если я не изменю начало:

  const slicedBlob = blob.slice(0, endOffset);

Мне кажется, причина в том, что файл становится потоком приложения / октета, который может повлиять на декодирование?

Я немного растерялся, так как не могу понять, является ли это реакциейСобственная проблема с BLOB-объектами или если это просто невозможно сделать.

Спасибо за любой ввод.

ps Я предпочитаю придерживаться vanilla expo без использования внешних библиотек, я знаю, что существует для обработкиBLOB-объектов, но не заинтересованы в извлечении, если возможно, полагаться на внешние библиотеки.

1 Ответ

0 голосов
/ 18 февраля 2019

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

Да, можно переупаковать видео клиентскую сторону, переписав контейнер и отбросив полные GOP.Но это будет около 1000 строк кода для вас и будет ограничено определенными кодеками и контейнерами.

...