【问题标题】:WebRTC Chrome Camera constraintsWebRTC Chrome 相机约束
【发布时间】:2015-03-27 23:31:50
【问题描述】:

我正在尝试在我的 peer.js webrtc 应用程序中设置 getusermedia 视频约束,例如设置最小/最大帧速率和分辨率等,这是一个简单的点对点聊天应用程序。我一直在尝试将它集成到我的应用程序中,但它似乎破坏了它。任何帮助将不胜感激,其他在线教程看起来与我的应用程序设置不同。在功能 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();
                }

【问题讨论】:

    标签: javascript webrtc getusermedia peerjs


    【解决方案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 约束是非标准的。请参阅this answer 了解说明。

    【讨论】:

    • 我放错地方了。我以为这就是我之前在代码中看到的原因,那是视频和音频的真实情况。我是 JavaScript 的初学者并且感到困惑。我已经将上面的代码改回了在我尝试再次在函数 step1 中添加约束之前的方式。您如何建议将它们实施到我拥有的代码中? @jib。是的,我在这个项目中使用了 chrome,所以使用 chrome 的约束会很棒。为帮助干杯。
    • 用我在回答中提到的约束替换{audio: true, video: true}(只有{} 部分,而不是var constraints = 部分)。始终查看浏览器的 Web 控制台是否有任何基本的 JavaScript 错误。此外,您询问约束是否适用于视频文件,但它们没有。一些相机提供从低到高分辨率和/或从低到高帧率的不同捕捉模式,而视频文件总是以特定分辨率预先录制。 - 要调整播放大小,请更改您输出的 HTML 视频元素的大小。
    • 干杯@jib。因此,当我在我的应用程序中获得约束时,它不会影响视频播放,而不是使用带有 use-file-for-fake-video-capture=/path/to/video.y4m 的 chrome 标志的相机。没有可用的约束可以实现这一目标?因此,它仅适用于相机,它可以自行将其设置为可用的不同模式。可以通过约束设置比特率吗?非常感谢
    • 对,约束用于协商摄像头和麦克风。听起来您想在 RTCPeerConnection 中控制编码和传输?这样的控制面是still being developed in the specification。现在这是自动处理的,使用的比特率适应可用的带宽,如this test 所示。我好像记得以前谷歌浏览器曾经有一些比特率设置,但我现在没有看到它们暴露出来。
    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2015-01-25
    • 2019-01-02
    • 1970-01-01
    • 2013-10-17
    • 2014-05-23
    • 1970-01-01
    相关资源
    最近更新 更多