我需要构建一个使用 WebRTC 的 Web 应用程序来获取网络摄像头视频流和麦克风音频流,并立即将其转换到服务器以进一步广播到多个客户端。该应用程序必须以全双工方式实时完成。我的意思是这将是一种实时视频聊天。这将是某种教育应用程序。所以问题是:现在有可能吗?我应该使用哪些技术?我应该在后端使用带有 WebSocket 和 Node.js 的 WebRTC 吗?或者我可以使用 php 代替 node 吗?我可以为此使用 Socket.io 吗?有没有其他方法可以实现这一目标?可能是闪光灯?
3 回答
WebRTC 中的 PeerConnection API 不需要后端服务器来在对等点之间进行一个或多个连接。
您唯一需要后端服务器的就是充当首先在对等点之间建立连接的中介。为此,您可以使用 WebSocket API、Ajax 或任何其他必要的方法来实现它。另外,是的,您可以使用 PHP 为 WebSocket 编写服务器端(或您想使用的任何方法来建立对等连接)。这真的取决于你。
目前,只有 Chrome 和 Firefox 支持足够多的 WebRTC API 以使视频聊天成为可能。不过很快,Opera 可能会加入其中,但目前还不确定 WebRTC 是否会被添加到 IE11 中,而且 Apple 似乎也无意在短期内将 WebRTC 添加到 Safari(因为他们拥有自己的专有技术那个;听起来很熟悉?!)。
无论如何,WebRTC 是您最好的选择。作为补充说明,我认为不可能使用 JS 将视频和音频发送到服务器,然后让服务器将该数据转发给其他对等方。相反,您需要使用 WebRTC 建立对等连接,然后从那里开始。
编辑:如果您使用 TURN 服务器,您可以通过服务器重新路由您的音频和视频数据,但这实际上是最不理想的情况,您仍然只能在使用 WebRTC API 时这样做。
它可能会帮助你。
MediaStreamRecorder 是一个 WebRTC API,用于记录 getUserMedia() 流(仍在实施中)。它允许 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>
您可以将录制的文件发送到服务器。
参考:
与多个参与者的实时双工视频聊天是视频会议,为此您需要一个服务器组件来混合参与者的音频和视频并将其广播给他们。为此,您非常需要一个媒体服务器。对于 WebRTC,有几个可用的;看看 Doubango 的网真服务器:https ://code.google.com/p/telepresence/
Mobicents 具有良好的 SIP 堆栈,但 webRTC 的多媒体功能有限。
否则为什么不开始写一个呢?:)