如何使用"自定义"视频捕获器来创建VideoTrack并提供帧?
创建VideoTrack的经典方法是:
1 - 获取VideoCapturer实例
VideoCapturer capturer = VideoCapturer.create(name);
Run Code Online (Sandbox Code Playgroud)
2 - 创建一个VideoSource
VideoSource videoSource = peerconnectionFactory.createVideoSource(capturer, videoConstraints);
Run Code Online (Sandbox Code Playgroud)
3 - 使用视频源创建VideoTrack
VideoTrack videoTrack = peerconnectionFactory.createVideoTrack("Label", videoSource);
Run Code Online (Sandbox Code Playgroud)
4 - 将轨道添加到MediaStream
我想知道是否有办法改变第一步.不使用本机Capturer实例,而是使用Android版本,并使用回调为VideoTrack提供框架:
public void onPreviewFrame(byte[] data, Camera camera) {
// provide the frames to the VideoTrack
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我假设WebRTC是一个解码/编码音频和视频的API,虽然服务器和客户端之间的通信是通过Web套接字或其他网络协议完成的?我有点困惑.WebRTC有自己的通信协议吗?
在WebRTC中,我总是看到关于点对点的实现以及如何从一个客户端到另一个客户端的视频流.服务器到客户端怎么样?
WebRTC是否可以从服务器到客户端流式传输视频文件?(我正在考虑使用WebRTC Native C++ API创建我自己的服务器应用程序,以连接到chrome或firefox浏览器客户端应用程序上的当前实现.)
好吧,如果有可能,它会比许多当前的视频流服务更快吗?
我对浏览器中的Peer-to-Peer连接感兴趣.由于这似乎可以通过WebRTC实现,我想知道它是如何工作的.
我已经阅读了一些解释并看到了关于它的图表,现在我很清楚,连接建立在服务器上工作.服务器似乎在愿意相互连接的客户端之间交换一些数据,以便它们可以启动直接连接,这与服务器无关.
但这是我不明白的特别之处.到目前为止,我认为创建连接的唯一方法是侦听计算机A上的端口并从计算机B连接到该端口.但在WebRTC中似乎并非如此.我认为没有一个客户端开始监听端口.不知何故,他们可以在不监听端口和接受连接的情况下创建连接.客户端A和客户端B都不会充当服务器.
但是怎么样?通过WebRTC服务器交换哪些数据,客户端可以使用它们相互连接?
谢谢你的解释:)
编辑
我找到了这篇文章.它与WebRTC无关,但我认为它回答了我的一部分问题.我不确定,很难.如果有人能向我解释并给我一些额外的链接,它仍然会很酷.
Chrome和Firefox都支持WebRTC.
Internet Explorer是否支持它?从哪个版本开始?
如果没有,是否有计划在未来支持它,如果有的话,何时?
使用像webrtc4all这样的项目提供支持 ,这是一个实用的解决方案吗?
更新:我现在在与WebRTC合作一年后.WebRTC不会也不会在IE上工作(第三方解决方案使其几乎不起作用,如果有的话,不应该依赖它).最好等待Edge重写为Chromium,此时将支持WebRTC.
我试图了解WebRTC和WebSockets之间的区别,以便我可以更好地了解哪种情况需要什么.我很好奇两个方面的广泛想法(主要是基于网络,但可能是一个专用的服务器应用程序)彼此交谈.
假设:
问题:
我正在使用捕获音频数据getUserMedia(),我想将它发送到我的服务器,所以我可以将它保存为MySQL字段中的Blob.
这就是我想要做的.我已经多次尝试使用WebRTC进行此操作,但我现在甚至不知道这是否正确甚至是最好的方法.
有人能帮助我吗?
这是我用来从麦克风捕获音频的代码:
navigator.getUserMedia({
video:false,
audio:true,
},function(mediaStream){
// output mediaStream to speakers:
var mediaStreamSource=audioContext.createMediaStreamSource(mediaStream);
mediaStreamSource.connect(audioContext.destintion);
// send mediaStream to server:
// WebRTC code? not sure about this...
var RTCconfig={};
var conn=new RTCPeerConnection(RTCconfig);
// ???
},function(error){
console.log('getUserMedia() fail.');
console.log(error);
});
Run Code Online (Sandbox Code Playgroud)
如何将其发送mediaStream到服务器?
谷歌搜索后我一直在调查WebRTC,但这似乎只是为了点对点通信 - 实际上,现在我正在研究这个,我认为这是要走的路.它似乎是从客户端的浏览器到主机网络服务器的通信方式,但我尝试的任何东西都接近工作.
我一直在阅读W3C文档(我发现它太抽象了),而且我一直在通过这篇关于HTML5 Rocks的文章(提出的问题多于答案).显然我需要一种信令方法,任何人都可以建议哪种信令方法最适合发送mediaStreams,XHR,XMPP,SIP,Socket.io或其他什么?
我需要在服务器上支持WebRTC的接收?我的Web服务器正在运行一个基本的LAMP堆栈.
另外,最好mediaStream是在我将其发送到服务器之前等到完成录制,还是最好发送mediaStream正在录制的内容?我想知道我是否正在以正确的方式做这件事.我已经用javascript和HTML5编写了文件上传器,但是上传其中一个mediaStreams看起来更加复杂,我不确定我是否正确接近它.
任何有关这方面的帮助将不胜感激.
我正在尝试使用WebRTC在屏幕上显示视频输入作为实时馈送.我不是要尝试任何点对点通信或类似的东西,只是显示视频源.
我的笔记本电脑集成网络摄像头的代码工作得很好,但当我连接外部视频输入设备(在这种情况下,通过S-Video连接的旧摄像机使用StarTech转换器连接到USB输入 - 型号SVID2USB2NS)时,我什么也得不到.我在Chrome和FireFox都试过这个.
两种浏览器都可以找到视频设备并为我提供集成网络摄像头或USB设备(在本例中列为"USB 2820")的选择,因此在这种情况下他们都知道设备.
在Chrome中,当我尝试连接时,调用getUserMedia调用的"成功"回调,如果我.getVideoTracks()我找到MediaStreamTrack了回调的时刻,则MediaStreamTrack返回enabled= true和readyState= live.但是没有视频输入(只有一个黑色视频面板,Chrome浏览器标签中的小红色"录制"图标不会出现).如果我稍后检查MediaStreamTrack,我发现readyStatenow =" ended"(虽然启用仍然是真的).
在FireFox中,同样找到了设备,但是任何使用getUserMedia连接到它的尝试都会触发错误回调,并出现HARDWARE_UNAVAILABLE错误.
我的getUserMedia电话很简单:
navigator.getUserMedia({ audio: false, video: true }, _webRTCsuccessCallback, _webRTCerrorCallback);
Run Code Online (Sandbox Code Playgroud)
我的成功回调是(包括一些测试代码MediaStreamTrack立即检查,一秒后检查):
function _webRTCsuccessCallback(stream) {
window.stream = stream; // stream available to console
if (window.URL) {
_video.src = window.URL.createObjectURL(stream);
} else {
_video.src = stream;
}
var tracks = stream.getVideoTracks();
if (tracks[0]) {
console.log(tracks[0]);
setTimeout(function () { console.log(tracks[0]); }, 1000);
}
}
Run Code Online (Sandbox Code Playgroud)
(其中_video是页面上的html5对象) …
在开发WebRTC视频聊天应用程序时,我遇到了远程接收视频流.收到视频流blob,但视频只是黑色.
我已经完成了这些答案,并尝试了几乎所有我能做到的工作 /sf/answers/1219695711/ 远程VideoStream无法使用WebRTC
......
Globalvars.socket.on('call', function (signal) {
if(!Globalvars.pc){
Methods.startCall(false, signal);
}
if(signal.sdp){
temp = new RTCSessionDescription({"sdp" : decodeURIComponent(signal.sdp), "type" : signal.type});
Globalvars.pc.setRemoteDescription(temp);
for(i = 0; i < Globalvars.iceCandidateArray.length; i++){
Globalvars.pc.addIceCandidate(new RTCIceCandidate({
sdpMLineIndex: decodeURIComponent(signal.sdpMLineIndex),
candidate: decodeURIComponent(signal.candidate)
}));
}
Globalvars.iceCandidateArray = [];
}
else{
if(Globalvars.pc.remoteDescription){
Globalvars.pc.addIceCandidate(new RTCIceCandidate({
sdpMLineIndex: decodeURIComponent(signal.sdpMLineIndex),
candidate: decodeURIComponent(signal.candidate)
}));
console.log("remot");
}
else{
Globalvars.iceCandidateArray.push(new RTCIceCandidate({
sdpMLineIndex: decodeURIComponent(signal.sdpMLineIndex),
candidate: decodeURIComponent(signal.candidate)
}));
console.log("ice candidate to temp array");
}
}
});
$("#roster-wrap").on("click", ".roster-list-item", function(e){
//Globalvars.socket.emit('call', {"receiver_id" : $(this).attr("data-id"), "caller_id" : Globalvars.me.id}); …Run Code Online (Sandbox Code Playgroud)