извлечь JPG из видео и загрузить в хранилище Azure - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь создать захват загружаемых кадров из выбранного трейлера к фильму.Эти файлы должны быть загружены в хранилище Azure в виде файлов jpg.Секция захвата кадра работает нормально (каждую полсекунды), я знаю, что строки подключения работают, потому что я проверил это с uploadTxt.

Это не дает мне никаких ошибок, однако я не вижу появления BLOB-объектов в моем хранилище.так что-то не так.Любая идея или опыт с этим

var video = document.createElement("video");

let interval = 500/1000; //fps
let currentTime = 0;

let seekResolve;
video.addEventListener('seeked', async function () {
    if (seekResolve) seekResolve();
});

var playSelectedFile = function (event) {
    var file = this.files[0];
    var fileURL = URL.createObjectURL(file);
    video.src = fileURL;
}

var input = document.querySelector('input');
input.addEventListener('change', playSelectedFile, false);

var sasKey = "MyKey";
var blobUri = "http://MyStorage.blob.core.windows.net";
var blobService = AzureStorage.Blob.createBlobServiceWithSas(blobUri, sasKey);

video.addEventListener('loadeddata', async function () {

    let duration = video.duration;
    let canvas = document.createElement('canvas');
    let context = canvas.getContext('2d');
    let [w, h] = [video.videoWidth, video.videoHeight]
    canvas.width = w;
    canvas.height = h;

    while (currentTime < duration) {
        video.currentTime = currentTime;
        await new Promise(r => seekResolve = r);

        context.drawImage(video, 0, 0, w, h);
        var JpgImageData = canvas.toDataURL('image/jpg');
        console.log(JpgImageData)

        var filename = currentTime + ".jpg";
        console.log(filename)

        fetch(JpgImageData)
            .then(res => res.blob())
            .then(blob => {
                console.log("here is your binary: ", blob)

                blobService.createWriteStreamToBlockBlob (
                'test', // container name
                filename, // file name
                blob, //content of file

                function (error, result, response) {
                    if (error) {
                            alert('Upload filed, open browser console for more detailed info.');
                            console.log(error);
                        } else {
                            alert('Upload successfully!');
                    }
                });


            })


        currentTime += interval;

        console.log(currentTime);
    }
}, false);
...