【发布时间】: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