簡體   English   中英

如何在webrtc(RecordRTC)中使用Angular promise?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM