Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我可以从blob url嵌入视频,但不能从本地文件嵌入?_Javascript_Ios_Html_Cordova_Ionic Framework - Fatal编程技术网

Javascript 为什么我可以从blob url嵌入视频,但不能从本地文件嵌入?

Javascript 为什么我可以从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

我目前正在尝试在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/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类型通常由服务器设置,不是吗?这就解释了这个问题;只是不知道如何解决这个问题。