【问题标题】:Telerik - Uploading Videos to Everlive, Unexpected ErrorTelerik - 将视频上传到 Everlive,出现意外错误
【发布时间】:2025-12-11 22:30:01
【问题描述】:

我目前正在尝试开发一个应用程序,我希望能够在其中录制视频,并且我目前正在使用 Teleriks everlive 服务对其进行测试。它正确地将我带到手机上的摄像机,但是在录制后据我所知文件应该上传,但它告诉我上传到everlive失败并且err.message是“意外错误”。如果有人能告诉我我做错了什么,我会非常感激。谢谢。

var captureSuccess = function (mediaFiles) {
    mediaAdded = true;
    var i, path, len;
    for (i = 0, len = mediaFiles.length; i < len; i += 1) {
        path = mediaFiles[i].fullPath;
        alert(mediaFiles[i].size);
        var file = {
            Filename: Math.random().toString(36).substring(2, 15) + ".mp4",
            ContentType: "video/mp4",
            base64: mediaFiles[i]
        };

        el.Files.create(file, function (response) {
            alert("Photograph added.");

        }, function (err) {
            navigator.notification.alert("Unfortunately the upload failed: " + err.message);
        });
    }
};

function captureError() {
    alert("Video Not Captured");
}

navigator.device.capture.captureVideo(captureSuccess, captureError, {
    limit: 1,
    duration: 20
});

【问题讨论】:

标签: cordova video upload telerik everlive


【解决方案1】:

我已经设法让它工作了。我从这里的媒体捕获示例开始 - http://docs.telerik.com/platform/samples/Sample-Capture/。然后我在 index.html 文件中添加了 everlive.sdk.min.js 的脚本标签

&lt;script src="https://bs-static.cdn.telerik.com/latest/everlive.all.min.js"&gt;&lt;/script&gt;

然后修改了捕获成功函数,为了清楚起见,我一直在测试捕获视频,所以我硬编码了 mime 类型和文件名。

_captureSuccess:function(capturedFiles) {
    var i,
    media = document.getElementById("media");
    media.innerHTML = "";
    for (i=0;i < capturedFiles.length;i+=1) {
        media.innerHTML+='<p>Capture taken! Its path is: ' + capturedFiles[i].fullPath + '</p>'
    }

    var el = new Everlive('your-app-id');

    var options = {
        fileName: 'testvideo.mov',
        mimeType: 'video/quicktime'
    };

    el.files.upload(capturedFiles[0].fullPath, options)
    .then(function() {
        console.log('success');
    }, function(err) {
        console.log(JSON.stringify(err));
    });
},

然后是最重要的事情 - 您必须包含 File Transfer cordova 插件 - https://github.com/apache/cordova-plugin-file-transfer 因为 everlive sdk 在尝试上传文件时假定它存在。当不包含插件时,我的结果和你的一样——usccess 和错误回调都没有被触发,因为 sdk 本身存在错误。在我包含插件后,SDK 成功上传了视频。结果如下:

我认为这会让你开始使用你的应用程序

【讨论】:

  • 在搞砸了那个示例应用程序并查看了你所做的事情之后,它终于可以工作了。现在完成了,我应该能够对音频做同样的事情。谢谢!
【解决方案2】:

您似乎假设视频是 base64 (base64: mediaFiles[i]),但事实并非如此 - captureVideo API 的结果将是一个文件,而不是 base64 字符串。如果 Everlive 需要 base64,则需要先转换文件。

【讨论】:

  • 谢谢!你是对的,文件需要先转换。我现在看看如何转换它。
  • @Raymond 关于文件类型是正确的。附带说明一下,以 base64 格式上传文件时对大小有严格限制 - “使用 base64 时的最大上传大小约为 3MB。”(取自文档)。我强烈建议您尝试一些用于 cordova 应用程序的文件选择器插件并使用它来上传文件。这是关于此的基本文档 - docs.telerik.com/platform/backend-services/javascript/files/….
  • 那么我应该使用“el.files.upload(fileToUpload, options)”并将 mediaFiles[i] 用作 fileToUpload 吗?目前我对 Telerik 不太熟悉。
  • 使用 el.files.upload 并将您的 mediaFiles[i] 的路径属性作为“fileToUpload”传递。在选项中仅传递文件名和 mimetype
  • 我创建了一个名为 fileToUpload 的 var,并将 mediaFiles[i].fullPath 传递到其中,但由于某种原因,当“el.files.upload(fileToUpload, options)...”运行时,什么都没有发生,我已经添加了文件上传或出现错误时的警报,但都没有出现。