Telerik - 将视频上传到 Everlive,出现意外错误
Telerik - Uploading Videos to Everlive, Unexpected Error
我目前正在尝试开发一个应用程序,我希望能够在其中录制视频,目前我正在使用 Teleriks everlive 服务对其进行测试。它正确地将我带到 phone 上的摄像机,但据我所知,在录制之后文件应该上传,但它告诉我上传到 everlive 失败并且 err.message 是"Unexpected error"。如果有人能告诉我我做错了什么,我将不胜感激。谢谢
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
});
您似乎假设视频是 base64(base64:mediaFiles[i]),但事实并非如此 - captureVideo API 的结果将是一个文件,而不是 base64 字符串。如果 Everlive 需要 base64,您需要先转换文件。
我已经设法让它工作了。我从此处的媒体捕获示例开始 - 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 成功上传了视频。这是结果:
我认为这会让您开始使用您的应用程序
我目前正在尝试开发一个应用程序,我希望能够在其中录制视频,目前我正在使用 Teleriks everlive 服务对其进行测试。它正确地将我带到 phone 上的摄像机,但据我所知,在录制之后文件应该上传,但它告诉我上传到 everlive 失败并且 err.message 是"Unexpected error"。如果有人能告诉我我做错了什么,我将不胜感激。谢谢
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
});
您似乎假设视频是 base64(base64:mediaFiles[i]),但事实并非如此 - captureVideo API 的结果将是一个文件,而不是 base64 字符串。如果 Everlive 需要 base64,您需要先转换文件。
我已经设法让它工作了。我从此处的媒体捕获示例开始 - 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 成功上传了视频。这是结果:
我认为这会让您开始使用您的应用程序