【发布时间】:2019-09-18 03:57:27
【问题描述】:
所以我有一个我们正在 Cordova 中为 Android 开发的应用程序。具体来说,用户将加载应用程序将进行实时处理的视频源。问题是,当尝试在画布元素上执行 toDataURL 时,违反 CORS 会导致画布被污染。也许我们正在处理这个错误,但简而言之,我们将视频加载到 video 标签,然后使用 canvas 每 100 毫秒捕获帧,然后提交要处理的 base64 数据,这就是错误出现的地方.
这是加载代码:
videoElement.src = loadedFeed; //http://someserver.com/hls/somefeed.m3u8
videoElement.crossOrigin = "*"; //have also tried anonymous
videoElement.play()
图片创建代码如下:
var canvas = document.createElement("canvas");
canvas.height = videoElement.videoHeight;
canvas.width = videoElement.videoWidth;
canvas.getContext('2d').drawImage(videoElement, 0, 0,canvas.width, canvas.height);
var base64data = canvas.toDataURL();
由于我们不控制远程服务器,我们无法指定 CORS 标头。视频在video 标签中加载良好,播放没有问题,但我们无法将单帧转换为 base64 数据,因为以下是错误:
Uncaught SecurityError: Failed to execute toDataURL on HTMLCanvasElement: Tainted canvases may not be exported
对我们做错了什么或我们可以尝试不同的地方有什么想法吗?除了 crossOrigin,我们还尝试了 Cordova Whitelist 插件:
<allow-navigation href="*"/>
<allow-intent href="*"/>
<access origin="*" />
我查看了许多 SO 答案,但尚未找到我的问题的确切含义,但如果你找到了,请告诉我。
【问题讨论】:
标签: javascript android cordova