【问题标题】:streaming video with peerjs webrtc from android webview is too slow来自android webview的peerjs webrtc流视频太慢了
【发布时间】:2017-01-19 08:24:55
【问题描述】:

我有一个 android 应用程序,它通过 peerjs (webrtc) 通过 webview 发送相机流,浏览器上的 web 应用程序接收视频并流式传输。

一切正常,但网络上的视频太慢了,图像在获得第二张图像之前冻结了一段时间...

有没有办法降低分辨率?或缓冲网络应用程序上的视频?还是我的实现有问题?

Android Webview 代码:

        initVideo = function(videoSourceValue) {

        var video = document.querySelector('video');
        navigator.getUserMedia({video:  {optional: [{
                                                    sourceId: videoSourceValue
                                                     }]
                                          }
                                },function(stream) {
        video.src = window.URL.createObjectURL(stream);
        $('#peerId').text("calling : " + SERVER_PEER_ID);
         var mediaConnection = peer.call(SERVER_PEER_ID, stream);
          mediaConnection.on('stream', function(remoteStream) {
            // Show stream in some video/canvas element.
          });
        },function(e){
                console.log('failed',e);
        });
    }

网页部分:

   function getVideoStream() {
    PEER.on('call', function(call) {
        var mediaConnection = navigator.getUserMedia({video: true}, function(stream) {
            call.answer(stream); // Answer the call with an A/V stream.
            call.on('stream', onReceiveStream);
        }, function(err) {
            console.log('Failed to get local stream' ,err);
        });
    });
}


    function onReceiveStream(stream){
        console.log('received stream');
        $('video').prop('src',window.URL.createObjectURL(stream));

}

谢谢

更新 1

我尝试添加{reliable : true},仍然遇到同样的问题。

我也在向服务器发送位置数据,并且似乎视频流和位置数据是定期一起发送的(网上的图表显示速度和视频同时移动)但帧速率是太慢了。

【问题讨论】:

  • 老实说,我只是建议远离 web 视图并使用原生(这样你有更多的控制权)。我知道这不是一个真正的答案:(。您也可以尝试在 webview 代码中设置视频流参数,不确定是否需要。
  • 我愿意使用原生 android 方式,我只是发现它要复杂得多(在网络上我只是使用 peerjs),如果你有一个简单视频的链接或库直接通过android流式传输就完美了
  • 您愿意进行双向通话还是单向通话就足够了?在网络上(我假设是 chrome),您可以转到 chrome://webrtc-internals 并粘贴您在传入和传出视频流中获得的统计信息吗?让通话运行几分钟。

标签: android video android-webview webrtc peerjs


【解决方案1】:

当您建立视频/音频流时,您可以指定一些约束...

var videoOptions = (isCordova) ? {audio: true, video: true} :
                    {  audio: true, 
                      video: {
                        mandatory: {
                               maxWidth: 640,
                               maxHeight: 360,
                               // maxAspectRatio:4/3,
                               // maxFrameRate:1
                              },
                        quality: 7,
                        width: { ideal: 320 },
                        height: { ideal: 240 }
                      }
                    };

navigator.getUserMedia(videoOptions, function (stream) {

在上面的代码中,如果您在设备(android/ios)上,您无法选择,但您可以在浏览器上控制它。质量 5 是视频驱动程序作者认为可接受的质量和带宽之间的折衷级别。限制图片的尺寸也有帮助。

查看此链接了解模式详情:https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia

【讨论】:

  • 当我从浏览器设置它时,我不会设置从浏览器到设备的流的值吗?
  • 没错,有控制总比没有控制好。台式机倾向于假设它们具有良好的可用带宽,因此限制发送的内容会有所不同。我认为移动设备中的默认值无论如何都较低。在我的实验中,它确实有所作为
  • @Mikkel 你知道引用“质量”属性的文档在哪里吗?
  • 不知道有没有质量上的问题,我用的是1到9之间的数字,玩一下看看
【解决方案2】:

我的问题与带宽完全无关,我只是没有在视频标签上设置自动播放,所以视频只有在重绘发生时才会刷新。

非常感谢您的回答,他们确实深入了解了 webrtc 中的工作原理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多