0

我目前正在尝试开发一个应用程序,我希望能够在其中录制视频,并且我目前正在使用 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
});
4

2 回答 2

0

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

<script src="https://bs-static.cdn.telerik.com/latest/everlive.all.min.js"></script>

然后修改了捕获成功函数,为了清楚起见,我一直在测试捕获视频,所以我硬编码了 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));
    });
},

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

视频上传成功

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

于 2016-07-07T12:50:37.030 回答
0

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

于 2016-07-06T13:55:28.263 回答