потоковое видео с помощью peerjs webrtc из веб-просмотра Android слишком медленное

У меня есть приложение для Android, которое отправляет поток камеры через веб-просмотр через peerjs (webrtc), веб-приложение в браузере получает видео и передает его.

Все работает, но видео в Интернете слишком медленное, и изображение зависает на некоторое время, прежде чем появится второе изображение...

Есть ли способ сделать разрешение ниже? или буферизовать видео в веб-приложении? или может быть что-то не так с моей реализацией?

Код веб-просмотра Android:

        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}, но проблема осталась.

Я также отправляю данные о местоположении на сервер, и кажется, что видеопотоки и данные о местоположении периодически отправляются вместе (диаграмма в Интернете показывает скорость и движение видео одновременно), но частота кадров слишком низкая.


person Dany Y    schedule 19.01.2017    source источник
comment
Честно говоря, я бы просто предложил отказаться от веб-просмотра и перейти на нативный (таким образом у вас будет гораздо больше контроля). Я знаю, что на самом деле это не ответ :(. Вы также можете попробовать установить параметры видеопотока в коде веб-просмотра, не уверен, что это займет или нет.   -  person Benjamin Trent    schedule 27.01.2017
comment
Я открыт для использования собственного способа Android, я просто обнаружил, что это намного сложнее (в Интернете я просто использую peerjs), если у вас есть ссылка или библиотека для простой потоковой передачи видео через Android напрямую, это было бы идеально   -  person Dany Y    schedule 27.01.2017
comment
Вы хотите сделать двусторонний звонок или будет достаточно одностороннего звонка? В Интернете (я предполагаю, что в Chrome) вы можете перейти на chrome://webrtc-internals и вставить статистику, которую вы получаете о входящих и исходящих видеопотоках? Позвольте вызову работать в течение нескольких минут.   -  person manishg    schedule 28.01.2017


Ответы (2)


Когда вы устанавливаете поток видео/аудио, вы можете указать некоторые ограничения...

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

person Mikkel    schedule 25.01.2017
comment
Когда я устанавливаю его из браузера, не буду ли я устанавливать значение потока из браузера на устройство? - person Dany Y; 27.01.2017
comment
Это правда, некоторый контроль лучше, чем никакого контроля. Настольные компьютеры, как правило, предполагают, что у них есть хорошая пропускная способность, поэтому имеет смысл ограничить то, что отправляется. Я думаю, что по умолчанию в мобильном устройстве все равно ниже. В моих экспериментах это имеет значение - person Mikkel; 28.01.2017
comment
@Mikkel Вы знаете, где находится документация, ссылающаяся на атрибут качества? - person Akil; 21.12.2017
comment
Я не знаю, есть ли что-то по качеству, я использовал число от 1 до 9. Поиграйте с ним и посмотрите - person Mikkel; 22.12.2017

Моя проблема была совершенно не связана с пропускной способностью, я просто не включил автовоспроизведение в тег видео, поэтому видео обновлялось только при перерисовке.

Большое спасибо за ваши ответы, они действительно дают представление о том, как все работает в webrtc.

person Dany Y    schedule 28.01.2017