Мне нужно использовать BLOB-объект в качестве источника видеофайла.
Все отлично работает на Chrome и Safari, но я не могу заставить его работать на Edge
Этот метод построен с использованием машинописи, и я использую Angular 7. То, что я вижу в Edge на мобильном устройстве, похоже, неработающая ссылка.
private initVideoFromBlob(blob: Blob) {
const edBlob = new Blob([blob], { type: 'video/mp4' });
const url = URL.createObjectURL(edBlob);
this.videoSrc = this.sanitizer.bypassSecurityTrustResourceUrl(url);
}
Я тоже пробовал это, но у меня был тот же результат
private initVideoFromBlob(blob: Blob) {
let url: any;
const edBlob = new Blob([blob], { type: 'video/mp4' });
if (window.navigator.msSaveOrOpenBlob) {
url = window.navigator.msSaveOrOpenBlob(edBlob);
} else {
url = (URL || webkitURL).createObjectURL(edBlob);
}
this.videoSrc = this.sanitizer.bypassSecurityTrustResourceUrl(url);
}
My Html:
<video controls>
<source *ngIf="videoSrc" [src]="videoSrc" type="video/mp4" />
</video>
Редактировать:
Я попытался преобразовать мой BLOB-объект в dataURL, как это было предложено DarticCode, но я Я все еще получаю тот же результат.
private async initVideoFromBlob(blob: Blob) {
let url: string | boolean;
const edBlob = new Blob([blob], { type: 'video/mp4' });
if (/Edge\//.test(navigator.userAgent) || /EdgA\//.test(navigator.userAgent)) {
const promise = new Promise((resolve, reject) => {
const fr = new FileReader();
fr.onload = x => resolve(fr.result);
fr.readAsDataURL(edBlob);
});
url = await promise;
} else {
url = (URL || webkitURL).createObjectURL(edBlob);
}
this.videoSrc = this.sanitizer.bypassSecurityTrustResourceUrl(url);
}