[英]How use Angular promise with webrtc (RecordRTC)?
對不起我的英語不好。 我正在構建一個使用網絡攝像頭錄制視頻的AngularJS應用程序(使用1.2.0 RC2)。 我使用RecordRTC錄制視頻流。 我舉個例子 。 當我處理一個流時,一切正常。 但是我不明白如何在諾言中如何在控制器中使用這些功能。
function startRecord(time,text,id){
var deferred = $q.defer();
navigator.getMedia = ( navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
navigator.getMedia(
{
audio: true,
video: video_constraints
}, function(stream) {
preview.src = window.URL.createObjectURL(stream);
preview.play();
recordAudio = RecordRTC(stream, {});
recordVideo = RecordRTC(stream, {
type: 'video'
});
recordAudio.startRecording();
recordVideo.startRecording();
$timeout(function() {
saveRecord(id).then(function(data){
if(data.status===200){
deferred.resolve();
$log.info("resolve");
}else{
deferred.reject();
$log.info("reject");
}
})
}, time*1000);
$scope.$apply(function(){
$timeout(function() {
addtext(text);
}, 100);
})
});
return deferred.promise;
}
var fileName;
function saveRecord(id) {
fileName = Math.round(Math.random() * 99999999) + 99999999;
recordAudio.stopRecording();
$scope.save(recordAudio.getBlob(), 'audio', fileName + '.wav',id);
recordVideo.stopRecording();
var save_promise = $scope.save(recordVideo.getBlob(), 'video', fileName + '.webm',id);
return save_promise;
};
$scope.save = function(blob,fileType,fileName,id) {
var save_promise= $http({
method: 'PUT',
url: "/api/videos/"+id,
headers: { 'Content-Type': false },
transformRequest: function (data) {
var formData = new FormData();
formData.append(fileType, fileName);
formData.append(fileType + '-blob', blob,fileName);
return formData;
},
data: { model: fileName, files: '' }
});
return save_promise;
};
我可以創建手動鏈接承諾
var main = $q.defer();
main.promise
.then(function(questions){
startRecord(questions[0].time,questions[0].text,1)
.then(function(){
startRecord(questions[1].time,questions[1].text,2)
.then(function(){
startRecord(questions[2].time,questions[2].text,3)
})
})
});
main.resolve(問題);
但是我從我的api得到的數組問題可能會有所不同。
var questions = [
{id:1,time:10,text:'who are you?'},
{id:2,time:15,text:'where are do you live?'},
{id:3,time:15,text:'why do you live?'},
]
我用諾言嘗試了不同的變體,但是我的JS水平很低。
我找到了適合我的情況的例子 。 和所有的作品。
var temp = $q.when({});
var questions = [
{id:1,time:10,text:'who are you?'},
{id:2,time:15,text:'where are do you live?'},
{id:3,time:15,text:'why do you live?'},
]
questions.forEach(function(value) {
temp = temp.then(
function(){
return startRecord(value.time,value.text,value.id);
}
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.