Загрузите видеофайл в виде BLOB-объекта в AWS S3, используя JavaScript или Angular CLI.
Я работаю над записью и хранением видеоданных из 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 видео или "Копировать адрес видео" в браузере, это URI BLOB-объекта.
Я пытаюсь выяснить, где это видео хранится в браузере, но сейчас мне нужно, я хочу как-то сохранить это видео в AWS S3.
Я попробовал простую демонстрацию, используя multer-s3 (узел) и предварительно назначенный URL( Angular CLI) для простого видеофайла.
Мне трудно связать учебник JavaScript SDK с документами AWS и добиться этого.
Я следил за этим постом
Мне нужно знать,
Как загрузить видеофайл (через BLU URI) или каким-либо другим способом, если таковой имеется, в Amazon S3. URL видео выглядит следующим образом: "blob: http://localhost:4000/3342d635-9026-4036- a012-0e184cec44c9"
Где это видео хранится в браузере, я видел это, до сих пор не хватает ясности
2 ответа
Если вы хотите сохранить видео на вашем компьютере, вы можете использовать следующую функцию:
function saveVideo () {
var video = document.getElementById('video');
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = video.src;
a.download = 'video.webm';
a.click();
}
saveVideo();
Или, если хотите сохранить файл на сервере, попробуйте это, но вам нужен файл node.js:
var blob = 'link on your blob file';
var fileReader = new FileReader();
fileReader.onload = function () {
var filePath = 'video.webm'
var buffer = Buffer.from(this.result);
fs.writeFile(filePath, buffer, 'binary', function (err) {
if (err) {
console.error("err", err);
console.log("file saved!");
});
};
fileReader.oneror = function (err) {
if (err) throw err;
};
fileReader.readAsArrayBuffer(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")
}
})
})
}