2017-01-19 2 views
4

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

вещи работают, но видео в Интернете является слишком медленным, и изображение замирает на некоторое время до получения второго изображения ...

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

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)); 

} 

Благодаря

Update 1

Я попытался добавить {reliable : true}, все еще имея ту же проблему.

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

+0

Честно говоря, я бы просто предложил отойти от веб-представления и пойти с родным (у вас есть гораздо больше контроля таким образом). Я знаю, что на самом деле это не ответ :(Вы также можете попробовать установить параметры видеопотока в коде веб-просмотра, не уверен, что это займет или нет. –

+0

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

+0

Вы хотите сделать 2-х разовый вызов или односторонний вызов достаточно? В Интернете (я предполагаю, хром), можете ли вы перейти к chrome: // webrtc-internals и вставить статистику, которую вы получаете на входящие и исходящие потоки видео? Позвольте запуску на несколько минут. – manishg

ответ

3

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

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

+0

Когда я установил его из браузера , не будет ли я устанавливать значение потока из браузера на устройство? –

+0

Это правда, какой-то контроль лучше, чем никакой контроль. Настольные компьютеры склонны предполагать, что у них хорошая пропускная способность, поэтому имеет значение ограничить то, что отправляется. по умолчанию в мобильном устройстве по умолчанию меньше.В моих экспериментах это делает разницу – Mikkel

+0

@Mikkel Вы знаете, где документация, ссылающаяся на атрибут «качество»? – Akil

2

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

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

Смежные вопросы