来自 Mozilla 站点:https : //developer.mozilla.org/en-US/docs/Web/API/Media_Streams_API
“一个 MediaStream 由零个或多个 MediaStreamTrack 对象组成,代表各种音频或视频轨道。每个 MediaStreamTrack 可能有一个或多个通道。通道表示媒体流的最小单位,例如与给定扬声器关联的音频信号,如在立体声音轨中向左或向右。”
这澄清了频道是什么。
最近的几个 RFC(例如 8108)提到需要在一个 RTP 会话中发送多个流。每个流在 RTP 级别都有自己的 SSRC。在统一计划的 RFC 中,参考总是作为最低级别的流(不是轨道或通道)。在 RFC 3550(基本 RTP RFC)中,没有提及通道。
RTP 流是否如这些 RFC 中提到的那样,建议流作为媒体的最低来源,与 WebRTC 中使用的该术语相同的通道,以及上面提到的?轨道通道 (WebRTC) 和带有 SSRC 的 RTP 流之间是否存在一对一映射?
例如,一个网络摄像头生成一个媒体流,它可以有一个音频媒体轨道和一个视频媒体轨道,每个轨道使用单独的 SSRC 在 RTP 数据包中传输,从而产生两个 SSRC。那是对的吗?现在,如果有一个立体声网络摄像头(或者一些这样的设备,比如两个麦克风 - 通道?)。这会生成具有三个不同的唯一 SSRC 的三个 RTP 流吗?
在成功测试 ICE 候选者后,是否有一个用于建立五元组连接的 RTP 会话?或者在对等点之间的同一组 port-ip-UDP 连接上可以有多个 RTP 会话吗?
任何澄清这一点的文件将不胜感激。
作为学习 WebRTC 的练习,我试图展示本地网络摄像头并并排显示网络摄像头的延迟播放。为了实现这一点,我试图将记录的 blob 传递给 BufferSource 并使用相应的 MediaSource 作为视频元素的源。
// the ondataavailable callback for the MediaRecorder
async function handleDataAvailable(event) {
// console.log("handleDataAvailable", event);
if (event.data && event.data.size > 0) {
recordedBlobs.push(event.data);
}
if (recordedBlobs.length > 5) {
if (recordedBlobs.length === 5)
console.log("buffered enough for delayed playback");
if (!updatingBuffer) {
updatingBuffer = true;
const bufferedBlob = recordedBlobs.shift();
const bufferedAsArrayBuffer = await bufferedBlob.arrayBuffer();
if (!sourceBuffer.updating) {
console.log("appending to buffer");
sourceBuffer.appendBuffer(bufferedAsArrayBuffer);
} else {
console.warn("Buffer still updating... ");
recordedBlobs.unshift(bufferedBlob);
}
}
}
} …Run Code Online (Sandbox Code Playgroud) 我已成功使用webkitGetUserMedia从普通网页上的网络摄像头捕获视频,但当我尝试在我的Chrome扩展程序的popup.html中执行此操作时,没有任何反应.我没有得到任何权限错误,它似乎从来没有问过(inforbar永远不会在弹出窗口中向下滑动).有没有办法解决?它看起来不像我可以在清单json中授予权限.
我正在尝试学习如何创建一个RTCPeerConnection以便我可以使用DataChannelAPI.以下是我从我所理解的内容中尝试过的内容:
var client = new mozRTCPeerConnection;
var server = new mozRTCPeerConnection;
client.createOffer(function (description) {
client.setLocalDescription(description);
server.setRemoteDescription(description);
server.createAnswer(function (description) {
server.setLocalDescription(description);
client.setRemoteDescription(description);
var clientChannel = client.createDataChannel("chat");
var serverChannel = server.createDataChannel("chat");
clientChannel.onmessage = serverChannel.onmessage = onmessage;
clientChannel.send("Hello Server!");
serverChannel.send("Hello Client!");
function onmessage(event) {
alert(event.data);
}
});
});
Run Code Online (Sandbox Code Playgroud)
我不确定出了什么问题,但我假设连接从未建立,因为没有显示任何消息.
我在哪里可以了解更多相关信息?我已经阅读了WebRTC入门 - HTML5 Rocks教程.
最近我发现了来自Github的webrtc-ios示例.当我浏览项目时,我注意到VideoView类使用静态方法,我不确定是否有必要.VideoView是UIView的子类,它覆盖了两个init方法,initWithFrame:和initWithCoder:.我知道覆盖这些init方法然后使用一些方法来设置其他东西是很正常的- (void)setup;.
但是VideoView类使用静态函数static void init(VideoView *self).问题是使用静态函数与普通ObjC方法有什么好处?
VideoView类中的代码如下所示:
-(id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
init(self);
}
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
init(self);
}
return self;
}
static void init(VideoView *self) { ... }
Run Code Online (Sandbox Code Playgroud) 我看到在Android的WebView中支持WebRTC的问题存在一些矛盾的证据,我想知道是否有人可能知道Google未来在WebView中支持WebRTC的计划.
一方面,我读过保罗爱尔兰的帖子,声称WebRTC将在Android WebView上得到支持,我也看到了Chromium SVN也是如此.
然而,WebRTC实际上并没有在WebView上工作,我发现帖子说它最终被遗漏了(没有理由,我只能猜测谷歌急于将基于Chromium的WebView放入KitKat并减少像WebRTC这样的复杂功能和WebGL被遗漏了).
有谁知道Google是否计划为Android WebView添加WebRTC支持,何时?
我与SimpleWebRTC建立了简单的视频聊天,当我在Ubuntu Chrome 34上启动WebRTC时,向我显示允许或禁止麦克风和网络摄像头的提示.我点击允许,即使我没有网络摄像头也可以开始对话.
但是当我在Windows 7上启动WebRTC时,Chrome 33没有显示任何提示.但我可以在地址栏中看到交叉网络摄像头图标.当我尝试允许Chrome使用麦克风和网络摄像头时它正在重新加载.那么我需要做什么才能在Linux中显示提示?
我的代码是:
webrtc = new SimpleWebRTC({
// the id/element dom element that will hold "our" video
localVideoEl: 'publishers',
// the id/element dom element that will hold remote videos
remoteVideosEl: 'subscribers',
// immediately ask for camera access
autoRequestMedia: true
});
webrtc.on('readyToCall', function () {
webrtc.joinRoom(sessionId);
});
Run Code Online (Sandbox Code Playgroud)
我也可以用这个演示重现它.我在该演示应用中收到了下一条错误消息:
无法访问本地媒体.错误名称为PermissionDeniedError.继续而不发送流.
问题:我需要我的客户能够将他们的网络摄像头流式传输到我的流媒体服务器(例如Wowza服务器).我正在用PHP构建我的网站.我经历了各种流媒体网站,如twitch.tv,livestream.com,发现他们都使用第三方广播软件,如Wirecast,XSplit广播公司,OBS等,将网络摄像头信息流传输到服务器.然后我遇到了像vLine,Opentokrtc这样使用WebRTC进行视频聊天的网站.
我的问题:所以,我的问题是,我是否可以将流发送到像Wowza这样的广播服务器(这样他们就可以广播我的直播流)而不使用只有WebRTC的广播软件?如果是,那怎么样?如果,不,那么其他选择是什么?
PS.我不想在这里使用Flash,ActionScript.
我在localhost上并试图在Chrome中使用MediaDevices.getUserMedia方法.我收到标题错误.据我所知,在Chrome中,只能使用具有安全来源的此功能,并且localhost被视为安全来源.此外,这适用于Firefox.
这就是我使用它的方式,如Google Developers网站上所示https://developers.google.com/web/updates/2015/10/media-devices?hl=en:
var constraints = window.constraints = {
audio: false,
video: true
};
navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {
callFactory.broadcastAssembly(stream);
...
});
Run Code Online (Sandbox Code Playgroud) 我想知道是否有可能将数据从javascript流式传输到浏览器的下载管理器.
使用webrtc,我将数据(从文件> 1Gb)从浏览器传输到另一个.在接收器端,我将所有这些数据存储到内存中(作为arraybuffer ...所以数据基本上仍然是块),我希望用户能够下载它.
问题: Blob对象的最大大小约为600 Mb(取决于浏览器),因此我无法从块中重新创建文件.有没有办法流式传输这些块,以便浏览器直接下载它们?