我需要构建一个使用WebRTC获取网络摄像头视频流和麦克风音频流的Web应用程序,并立即将其转换为服务器,以便进一步向多个客户端广播。该应用必须以全双工的方式实时完成。我的意思是这将是一种实时视频聊天。这将是某种教育应用程序。 所以问题是:现在可能吗?我应该使用哪些技术? 我应该在后端使用WebRTC和WebSocket以及Node.js吗?或者我可以使用PHP而不是节点?我可以使用Socket.io吗?有没有其他方法可以实现这一目标?可能是闪光灯?
答案 0 :(得分:4)
WebRTC中的PeerConnection API不需要后端服务器来在对等体之间进行一个或多个连接。
您唯一需要后端服务器的是作为中介来首先建立对等体之间的连接。为此,您可以使用WebSocket API,Ajax或实现此目的所需的任何其他方法。此外,是的,您可以使用PHP为WebSocket编写服务器端(或者您希望用于建立对等连接的任何方法)。这完全取决于你。
目前,只有Chrome和Firefox支持足够的WebRTC API才能进行视频聊天。很快,Opera可能会加入这个组合,但是没有人确定WebRTC是否会被添加到IE11中,而且Apple似乎无意在任何时候将WebRTC添加到Safari中(因为他们拥有自己的专有技术)听起来很熟悉?!)。
无论如何,WebRTC是你最好的选择。作为补充说明,我认为不可能使用JS将视频和音频发送到服务器,然后让服务器将该数据转发给其他对等方。相反,您需要使用WebRTC建立点对点连接,然后从那里开始。
编辑:如果你使用TURN服务器,你可以通过服务器重新路由你的音频和视频数据,但这实际上是最不理想的情况,你仍然只能这样做,如果你是使用WebRTC API。
答案 1 :(得分:2)
它可能对你有帮助。
MediaStreamRecorder是一个用于记录getUserMedia()流的WebRTC API(仍在实施中)。它允许Web应用程序通过实时音频/视频会话创建文件。
以下是将流发送到服务器的示例实现。
<video autoplay></video>
<script language="javascript" type="text/javascript">
function onVideoFail(e) {
console.log('webcam fail!', e);
};
function hasGetUserMedia() {
// Note: Opera is unprefixed.
return !!(navigator.getUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia || navigator.msGetUserMedia);
}
if (hasGetUserMedia()) {
// Good to go!
} else {
alert('getUserMedia() is not supported in your browser');
}
window.URL = window.URL || window.webkitURL;
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia;
var video = document.querySelector('video');
var streamRecorder;
var webcamstream;
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true, video: true}, function(stream) {
video.src = window.URL.createObjectURL(stream);
webcamstream = stream;
// streamrecorder = webcamstream.record();
}, onVideoFail);
} else {
alert ('failed');
}
function startRecording() {
streamRecorder = webcamstream.record();
setTimeout(stopRecording, 10000);
}
function stopRecording() {
streamRecorder.getRecordedData(postVideoToServer);
}
function postVideoToServer(videoblob) {
var data = {};
data.video = videoblob;
data.metadata = 'test metadata';
data.action = "upload_video";
jQuery.post("http://www.kongraju.in/uploadvideo.php", data, onUploadSuccess);
}
function onUploadSuccess() {
alert ('video uploaded');
}
</script>
<div id="webcamcontrols">
<button class="recordbutton" onclick="startRecording();">RECORD</button>
</div>
您可以将录制的文件发送到服务器。
<强>参考文献:强>
答案 2 :(得分:1)
与多个参与者的实时双工视频聊天是视频会议,为此您需要一个服务器组件,它混合参与者的音频和视频并将其广播给他们。你非常需要一个媒体服务器。对于WebRTC,有一些可用;看看Doubango的网真服务器:https://code.google.com/p/telepresence/
Mobicents具有良好的SIP堆栈,但webRTC的多媒体功能有限。
否则为什么不开始写一个? :)