角度基数64视频插值失败($sce)

Angular base64 video interpolation fail ($sce)

本文关键字:失败 sce 插值 视频      更新时间:2023-09-26

我正在尝试使用 Angular 呈现 base64 视频,只是由于提供商不信任源(这是一个简单的数据 URL),它无法插入它$sce它。

Error: [$interpolate:interr] Can't interpolate: {{video}}
Error: [$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy.  
URL: data:video/mp4;base64,AAAAGGZ0eXBtcDQyAAAAAGlzb21tcDQyAAAvzm1vb3YAAABsbXZoZ…+VXw5feXy+X3p3xV429Xirw87eVd0svWnUu3by8hW9zS6twXS5ZcbmgmlcKy+3CsI4raC9YA==

到目前为止,我已经尝试过:

$scope.video = $sce.trustAsResourceUrl('base64-string-here');

不起作用,我相信该方法仍然期望有效的链接而不是数据 URL,因此它不是正确的解决方案。

第二次尝试:

angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
// Completely disable SCE.
// Do not use in new projects.
$sceProvider.enabled(false);
});

这当然有效,但随后它会禁用整个提供程序,从而使应用程序容易受到攻击。

还没有遇到一个有效的解决方案,我正在毫不费力地显示 base64 图像,所以我相信一定有办法解决它,或者至少是一种解决方法。

非常感谢任何帮助!

如果有人正在寻找解决方案,这是我在发布问题 3 个月后输入的内容:

用于视频的 Base64 不是一个好主意,即使您解决了插值问题,应用程序在播放时也会在 Android 上崩溃。

我花了很多时间,所以"如何在应用程序上播放非流媒体视频"的解决方案是:

  1. 将文件下载到本地手机并从那里播放(如果您使用 angular,请查找 ngCordova 文件传输插件)

  2. 对于安卓:HTML5视频标签将不起作用。原因介于权限问题和Android不允许在HTML上播放本地视频之间。使用安卓视频播放器,例如此媒体播放器

对于iOS:HTML5视频标签非常适合播放本地视频。它将其转换为本机。

希望有一天它能帮助到某人。