Ограничения WebRTC Chrome Camera

Я пытаюсь установить ограничения видео getusermedia, такие как установка минимальной / максимальной частоты кадров и разрешений и т. Д. В моем приложении peer.js webrtc, которое является простым приложением однорангового чата. Я пытаюсь интегрировать его в свое приложение, но, похоже, он сломается. Любая помощь будет принята с благодарностью, другие онлайн-руководства выглядят иначе, чем настроенное мое приложение. Внизу функции 1 я пытался установить ограничения, которые просто больше не показывают видео. Это правильное место?

Также будут ли эти ограничения работать при воспроизведении видеофайла вместо веб-камеры ?. Я использую флаги Google Chrome, которые воспроизводят видеофайл вместо камеры.

     navigator.getWebcam = (navigator.getUserMedia ||
                    navigator.webkitGetUserMedia ||
                    navigator.mozGetUserMedia ||
                    navigator.msGetUserMedia);

                // PeerJS object ** FOR PRODUCTION, GET YOUR OWN KEY at http://peerjs.com/peerserver **
                var peer = new Peer({
                    key: 'XXXXXXXXXXXXXXXX',
                    debug: 3,
                    config: {
                        'iceServers': [{
                            url: 'stun:stun.l.google.com:19302'
                        }, {
                            url: 'stun:stun1.l.google.com:19302'
                        }, {
                            url: 'turn:numb.viagenie.ca',
                            username: "XXXXXXXXXXXXXXXXXXXXXXXXX",
                            credential: "XXXXXXXXXXXXXXXXX"
                        }]
                    }
                });

                    // On open, set the peer id so when peer is on we display our peer id as text 
                    peer.on('open', function(){
                        $('#my-id').text(peer.id);
                    });

                    peer.on('call', function(call) {
                        // Answer automatically for demo
                        call.answer(window.localStream);
                        step3(call);
                    });

                    // Click handlers setup
                    $(function() {
                        $('#make-call').click(function() {
                            //Initiate a call!
                            var call = peer.call($('#callto-id').val(), window.localStream);
                            step3(call);
                        });
                        $('end-call').click(function() {
                            window.existingCall.close();
                            step2();
                        });

                        // Retry if getUserMedia fails
                        $('#step1-retry').click(function() {
                            $('#step1-error').hide();
                            step();
                        });

                        // Get things started
                        step1();
                    });







             function step1() {
//Get audio/video stream
navigator.getWebcam({audio: true, video: true}, function(stream){
    // Display the video stream in the video object
    $('#my-video').prop('src', URL.createObjectURL(stream));




                        // Displays error  
                        window.localStream = stream;
                        step2();
                    }, function(){ $('#step1-error').show(); });
                }

                function step2() { //Adjust the UI
                    $('#step1', '#step3').hide();
                    $('#step2').show();
                }

                function step3(call) {
                    // Hang up on an existing call if present
                    if (window.existingCall) {
                        window.existingCall.close();
                    }

                    // Wait for stream on the call, then setup peer video
                    call.on('stream', function(stream) {
                        $('#their-video').prop('src', URL.createObjectURL(stream));
                    });
                    $('#step1', '#step2').hide();
                    $('#step3').show();
                }

person WebRTC83    schedule 27.03.2015    source источник


Ответы (1)


Ваш JavaScript выглядит недействительным. Вы не можете объявить var внутри списка аргументов функции. Вы вставили неправильно? Пытаться:

var constraints = {
  audio: false,
  video: { mandatory: { minWidth: 1280, minHeight: 720 } }
};
navigator.getWebcam(constraints, function(stream){ etc. }

По крайней мере, теперь это допустимый JavaScript. Я не знаком с PeerJS, но ограничения, которые вы используете, похожи на ограничения Chrome, поэтому, если вы используете Chrome, надеюсь, они будут работать, если PeerJS по какой-то причине не сделает это иначе.

Ваш объект говорит «Ограничения камеры WebRTC», поэтому я должен упомянуть, что ограничения Chrome нестандартны. См. Объяснение в этом ответе.

person jib    schedule 28.03.2015
comment
Я не туда положил. Я думал, что это произошло, потому что я видел в своем коде раньше, что видео и звук были правдой. Я новичок в JavaScript и запутался. Я вернул свой код, приведенный выше, к тому, как он был до того, как снова попытался добавить ограничения на шаге функции 1. Как бы вы посоветовали реализовать их в имеющемся у меня коде? @jib. да, я использую хром для этого проекта, поэтому ограничения для работы с хромом были бы отличными. Приветствую за помощь. - person WebRTC83; 28.03.2015
comment
Замените {audio: true, video: true} ограничениями, которые я упоминаю в своем ответе (только часть {}, а не часть var constraints = ). Всегда проверяйте веб-консоль своего браузера на предмет основных ошибок JavaScript. Также вы спросили, работают ли ограничения на видеофайлы, а они нет. Некоторые камеры предлагают различные режимы захвата с разрешением от низкого до высокого и / или от низкой до высокой, тогда как видеофайлы всегда предварительно записываются с определенным разрешением. - Чтобы изменить размер воспроизведения, вместо этого измените размер HTML-элемента видео, в который вы выводите. - person jib; 30.03.2015
comment
Приветствую @jib. Поэтому, когда я получаю ограничения, работающие в моем приложении, это не повлияет на воспроизведение видео вместо камеры с использованием флагов Chrome с use-file-for-fake-video-capture = / path / to / video.y4m. Нет никаких ограничений, которые позволят достичь этого ?. Таким образом, он работает только с камерой, самостоятельно настраивая ее на различные доступные режимы. Можно ли установить битрейт с помощью ограничений ?. Большое спасибо - person WebRTC83; 30.03.2015
comment
Правильно, ограничения связаны с переговорами о камерах и микрофонах. Похоже, вы хотите вместо этого управлять кодированием и передачей в RTCPeerConnection? Такая поверхность управления все еще разрабатывается в спецификации. На данный момент это обрабатывается автоматически, а используемая скорость передачи данных адаптируется к доступной полосе пропускания, как можно увидеть в этот тест. Кажется, я припоминаю, что в прошлом в Google Chrome были некоторые настройки битрейта, но я не вижу их в настоящее время. - person jib; 31.03.2015