readAsArrayBuffer возвращает пустой массив (пытается преобразовать видео в blob и загрузить его) - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь загрузить видео с помощью Ioni c / Capacitor / React.

Для этого я использую плагин cordova-video-capture-plus.

Я застреваю, когда пытаюсь прочитать AsArrayBuffer. По какой-то причине он всегда возвращается пустым, под моим кодом:

const doMediaCapture = async () => {
let options: VideoCapturePlusOptions = { limit: 1, duration: 30 };
let capture:any = await VideoCapturePlus.captureVideo(options);
let media = capture[0] as MediaFile;
// works on android....
let resolvedPath: DirectoryEntry;
let path = media.fullPath.substring(0, media.fullPath.lastIndexOf("/"));
if (Capacitor.getPlatform() === "ios") {
  console.log("ios")
  resolvedPath = await File.resolveDirectoryUrl("file://" + path);
} else {
  console.log("android")
  resolvedPath = await File.resolveDirectoryUrl(path);
}

console.log(media)
console.log(resolvedPath)
 File.readAsArrayBuffer(resolvedPath.nativeURL, media.name).then(
  (buffer: any) => {
    console.log(buffer)
    // get the buffer and make a blob to be saved
    let videoBlob: Blob = new Blob([buffer], {
      type: media.type,
    });
    let url = window.URL.createObjectURL(videoBlob);
    
    console.log(videoBlob)
    let { jobId } = apartments[+id!];
    if (videoBlob instanceof Blob) {
      console.log("processing as File");
      let fName = `${new Date().getTime()}`;

      if (videoBlob instanceof Blob) {
        if (videoBlob.type.split("/")[1] === "quicktime") {
          fName = fName + ".mov";
        } else {
          fName = fName + "." + videoBlob.type.split("/")[1];
        }
      }
      let ref = "videos/" + fName
      uploadVideo(jobId, videoBlob, ref)
    } else {
      console.log("processing as DataAsDataUrl");
      let v = videoBlob as DataAsDataUrl;
      let fName = `${new Date().getTime()}.${v.format}`;
      let ref = "images/" + fName
      uploadVideo(jobId, videoBlob, ref)
    }
  },
  (error:any) => console.log(error)
);

};

Я получаю следующий результат, который является пустым массивом, поэтому, если я попытаюсь загрузить его, он не Ничего не загружать:

введите описание изображения здесь

Как мне преобразовать этот видеофайл в большой двоичный объект для загрузки?

Ответы [ 2 ]

1 голос
/ 17 июля 2020

requestLegacyExternalStorage - правильно ли это установлено в AndroidManifest? https://medium.com/androiddevelopers/modern-user-storage-on-android-e9469e8624f9

0 голосов
/ 29 июля 2020

Решение заключалось в том, чтобы прекратить использование плагина video-capture-plus, поскольку у него, похоже, есть проблемы совместимости с разными телефонами. Я перешел на использование встроенного плагина media-capture и его метода MediaCapture.captureVideo ()

. Установите следующий плагин: «@ ioni c -native / media-capture»: «^ 5.24.0 "И его аналог в Кордове:" cordova-plugin-media-capture ":" ^ 3.0.3 ",

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...