Загрузка файла из объекта BLOB-объекта в JavaScript - PullRequest
0 голосов
/ 13 декабря 2018

Я преобразую BLOB-файл в файл и сохраняю его локально, но файл можно воспроизвести только в Media Player Classic , но в строке поиска нет только звука.В то время как в другом проигрывателе он даже не воспроизводится ( vlc, Windows Media Player )

RecordAudio = event=>{

 var constraints = { audio: true }

    if(event==='default'){

    navigator.mediaDevices.getUserMedia(constraints).then(stream=> {

      audioContext = new AudioContext();


      gumStream = stream;

      input = audioContext.createMediaStreamSource(stream);


     this.mediaRecorder = new MediaRecorder(stream)
     this.mediaRecorder.start(10);

          var chunk=[];

           this.mediaRecorder.ondataavailable = e => {
            if (e.data && e.data.size > 0) {
             chunk.push(e.data);
           }

           this.setState({chunks:chunk});
          };

      }).catch(function(err) {
            console.log(err);

      });

    }
    else{

      var fileName="blobfile";

     this.mediaRecorder.stop();

     gumStream.getAudioTracks()[0].stop();

     var blob = new Blob(this.state.chunks, {type: 'audio/mp3;codec=opus'});

    var formData=new FormData();

    formData.append("event_name",fileName);
    formData.append("file",new File([blob], fileName, {type: 'audio/mp3; codec=opus', lastModified: Date.now()})); // doesn't matter to put codec again until you change it.
    formData.append("fileExtension", "mp3");
     fetch('http://localhost:6020/uploadFile', {
    method: "POST", // *GET, POST, PUT, DELETE, etc.
    mode: "cors", // no-cors, cors, *same-origin
    cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached

    redirect: "follow", // manual, *follow, error
    referrer: "no-referrer", // no-referrer, *client
    body: formData, // body data type must match "Content-Type" header
    })
    .then(response => response.json())
    .then(function(data){ console.log( JSON.stringify( data ) ) });

     var a = document.createElement("a");
     document.body.appendChild(a);
     a.style = "display: none";

     const audioURL = window.URL.createObjectURL(blob);
     // append videoURL to list of saved videos for rendering
     const audios = this.state.audios.concat([audioURL]);
     this.setState({audios});
     console.log(audios);
     a.href = audioURL;
     a.download = "blobFile";
     a.click();
    window.URL.revokeObjectURL(audioURL);
    }
  }
  else{
   // error
  }

  }

Я загружаю и отправляю файл на сервер в остальное состояние.Но оба файла не воспроизводятся, за исключением того, что в классическом медиаплеере все еще ищется строка, в которой отсутствует в MPC.

  • В этом может быть проблема с кодеком, но я попробовал pcm, также не очень хорошо работающий.

Аудиофайл прикреплен и доступен здесь: запись

...