我有一个Android应用程序通过webjc(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}
,仍然遇到同样的问题。
我也在向服务器发送位置数据,似乎视频流和位置数据定期一起发送(网络上的图表显示速度和视频同时移动)但帧速率是太慢了。
答案 0 :(得分: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
答案 1 :(得分:3)
我的问题与带宽完全无关,我只是没有在视频标签上放置自动播放功能,因此只有在重绘时才会刷新视频。
非常感谢您的回答,他们真正了解了webrtc中的工作原理。