Javascript 为什么我可以从blob url嵌入视频,但不能从本地文件嵌入?
我目前正在尝试在iPhone应用程序中嵌入视频,运行的是ionicJavascript 为什么我可以从blob url嵌入视频,但不能从本地文件嵌入?,javascript,ios,html,cordova,ionic-framework,Javascript,Ios,Html,Cordova,Ionic Framework,我目前正在尝试在iPhone应用程序中嵌入视频,运行的是ionic HTML格式正确,可以在android上运行(但只有在我使用某种形式的人行横道时),但是在iOS上,视频会抛出以下错误:MEDIA\u ERR\u SRC\u NOT\u SUPPORTED 无法工作的已编译HTML是: <video preload="true" autoplay="true" controls="controls" src="file:///Users/xueye/Library/Developer/C
HTML格式正确,可以在android上运行(但只有在我使用某种形式的人行横道时),但是在iOS上,视频会抛出以下错误:
MEDIA\u ERR\u SRC\u NOT\u SUPPORTED
无法工作的已编译HTML是:
<video preload="true" autoplay="true" controls="controls" src="file:///Users/xueye/Library/Developer/CoreSimulator/Devices/78EC1017-3C73-40C0-890A-92874790A463/data/Containers/Data/Application/250685C6-985D-42B4-BD0E-163C319F5C9E/Library/NoCloud/attachments/my_file.mp4">
<source src="file:///Users/xueye/Library/Developer/CoreSimulator/Devices/78EC1017-3C73-40C0-890A-92874790A463/data/Containers/Data/Application/250685C6-985D-42B4-BD0E-163C319F5C9E/Library/NoCloud/attachments/my_file.mp4" type="video/mp4">
</video>
但是,当我将文件读入数组缓冲区,然后像这样将其放入blob时,以下编译的视频标记会起作用:
$cordovaFile.readAsArrayBuffer(cordova.file.dataDirectory + "attachments/", fileName).then((result) => {
var videoBlob = new Blob([result], {type: playerType});
var blobUrl = URL.createObjectURL(videoBlob);
var newEle = angular.element('<video preload="true" autoplay="true" controls="controls"><source src="' + blobUrl + '" type="' + playerType + '"></source></video>');
player = <HTMLMediaElement><any>newEle[0];
player.loop = $scope.loop;
player.src = blobUrl;
player.addEventListener('error', (e) => {
console.log(e);
}, true);
element.append(newEle);
player.play();
}, (error) => {
console.log(error);
});
$cordovaFile.readAsArrayBuffer(cordova.file.dataDirectory+“附件/”,文件名)。然后((结果)=>{
var videoBlob=新Blob([result],{type:playerType});
var blobUrl=URL.createObjectURL(videoBlob);
var newEle=角度元素(“”);
player=newEle[0];
player.loop=$scope.loop;
player.src=blobUrl;
player.addEventListener('error',(e)=>{
控制台日志(e);
},对);
元素。追加(newEle);
player.play();
},(错误)=>{
console.log(错误);
});
其中包括:
<video preload="true" autoplay="true" controls="controls" src="blob:file:///4ea350bd-1f61-4b4b-8a4d-4e75d0247fad">
<source src="blob:file:///4ea350bd-1f61-4b4b-8a4d-4e75d0247fad" type="video/mp4">
</video>
我很想摆脱这种糟糕的黑客解决方法,尤其是因为我非常关心将整个文件加载到ArrayBuffer中,然后再加载到blob中;在任何大小合理的视频中,这似乎都是一场灾难。这是我唯一能把它拼凑起来的方法
甚至似乎没有任何方法可以直接读取一个blob,至少可以减少一点开销。不使用这个blob hack就可以让视频正常工作吗?不管怎么说,为什么会这样呢?
媒体错误(MEDIA\u ERR\u SRC\u NOT\u SUPPORTED)
似乎会发生,如果(或支持的格式)。如果只有src在
上,而不是
上,它是否工作?该错误仍然会发生;我将尝试看看FileTransfer是否没有正确地保存MIME类型。刚刚意识到,MIME类型通常由服务器设置,不是吗?这就解释了这个问题;只是不知道如何解决这个问题。