javascript - 使用 JavaScript 或 Angular CLI 将视频文件作为 blob 上传到 AWS S3

标签 javascript angular amazon-s3 webrtc recordrtc

我正致力于从 Mediarecorder API 录制和存储视频数据。下面的 JavaScript:

<button id="start-recording">Start Recording</button>
<button id="stop-recording" disabled>Stop Recording</button>

<video controls autoplay></video>

<script>

let videoStream;
let recorder;
let isRecording = false
let blobsArray = [];

navigator.mediaDevices.getUserMedia({
    audio: true,
    video: true
    })
 .then(function (stream) {
    videoStream = stream;
    document.getElementById('video').setAttribute('src', window.URL.createObjectURL(stream));
})


function videoDataHandler (event) {
    var blob = event.data;
    document.getElementById('blob-video').setAttribute('src', window.URL.createObjectURL(blob));
};


var createMediaPlayer = function () {
    window.recorder = new MediaRecorder(videoStream, {
        mimeType: 'video/webm'
    });
    window.recorder.ondataavailable = videoDataHandler;
};


var recordButton = document.getElementById('record');
recordButton.addEventListener('click', function (e) {
    isRecording = true;
    createMediaPlayer();
    window.recorder.start();
});

var stopButton = document.getElementById('stop');
stopButton.addEventListener('click', function (e) {
    isRecording = false;
    window.recorder.stop();
});

</script>

它在 cameraCapture 和 Recording 上完美运行。

如果您要在浏览器中检查元素、视频 src 或“复制视频地址”,它是一个 blob URI。

我试图弄清楚这段视频在浏览器中的存储位置,但现在我的需要是,我想以某种方式将这段视频存储在 AWS S3 中。

我尝试了一个使用 multer-s3(节点)和预签名 URL(Angular CLI)的简单视频文件的简单演示。

我发现很难在 AWS 文档上关联 JavaScript SDK 教程并实现这一目标。

我关注了这个post

我需要知道,

  1. 如何上传视频文件(通过 blob URI)或其他方式,如果有的话, 亚马逊 S3。 视频网址是这样的“blob:http://localhost:4000/3342d635-9026-4036- a012-0e184cec44c9"

  2. 这个视频存储在浏览器的什么地方,我看到了this , 仍然缺乏 清晰度

最佳答案

请找到下面的代码。它对我有用。录制停止后获取 blob 并将其转换为文件并将其上传到 S3。

 let blob = recorder.getBlob()
 let file = new File([this.modelBlob], 'filename', { type: 'video/webm',    lastModified: Date.now() })
await this.uploadFilesToS3('webm','videos',file,'myfile')

 async uploadFilesToS3(extension,path,file,fileName) {
    return new Promise(async (resolve, reject) => {
      const bucket = new S3(
        {
          accessKeyId: "**your accesskey**",
          secretAccessKey: "**your s3SecretAccessKey**",
          region: "**your awsRegion **"
        }
      );
      const params = {
        Bucket: environment.bucketName,
        Key: path+ "/" + fileName+ extension,
        Body: file
      };
      bucket.upload(params,async(err,data)=>{
             if(data){
                  console.log("Video uploaded")
               }
               if(err){
                  console.log("Video uploaded failed")
               }
         })
    })
  }

关于javascript - 使用 JavaScript 或 Angular CLI 将视频文件作为 blob 上传到 AWS S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51444932/

相关文章:

Javascript 像素操作 : These aren't my colors

javascript - 两个部分彼此重叠

angular - 当我使用最新的 angular-cli (beta 15 w/webpack) 运行 ng test 时,如何提供 Assets ?

php - 如何使用s3 sdk正确删除s3对象

go - 如何使用 gin 框架将文件上传到 amazon s3

javascript - puppeteer 错误 : Node is either not visible or not an HTMLElement

javascript - 用于从谷歌搜索和复制我的数据文件所有条目的定义的脚本

angular - 在 Visual Studio Code 中调试 Angular2 应用程序

angular - 当 reducer 更改切片时,Ngrx 选择器未触发

java - Itext生成PDF文档到S3服务器