- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
来自 Mozilla 网站:https://developer.mozilla.org/en-US/docs/Web/API/Media_Streams_API
“一个 MediaStream 由零个或多个 MediaStreamTrack 对象组成,代表各种音频或视频轨道。每个 MediaStreamTrack 可能有一个或多个 channel 。 channel 代表媒体流的最小单元,例如与给定关联的音频信号扬声器,如立体声音轨中的左或右。”
这阐明了什么是 channel 。
几个最近的 RFC(例如 8108)提到需要在一个 RTP session 中发送多个流。每个流在 RTP 级别都有自己的 SSRC。在统一计划的 RFC 中,引用始终是最低级别的流(不是轨道或 channel )。在 RFC 3550 中,基本 RTP RFC,没有对 channel 的引用。
这些 RFC 中提到的 RTP 流是否表明流是媒体的最低来源,与 WebRTC 中使用的 channel 相同,如上文所述?轨道 channel (WebRTC) 和带有 SSRC 的 RTP 流之间是否存在一对一映射?
例如,网络摄像头生成一个媒体流,它可以有一个音频媒体轨道和一个视频媒体轨道,每个轨道使用单独的 SSRC 在 RTP 数据包中传输,从而产生两个 SSRC。那是对的吗?现在如果有一个立体声网络摄像头(或者一些类似的设备,比如说两个麦克风 - channel ?)。这会生成具有三个不同的唯一 SSRC 的三个 RTP 流吗?
在成功测试 ICE 候选人后,是否有针对五元组连接建立的单个 RTP session ?或者在对等点之间的同一组 port-ip-UDP 连接上可以有多个 RTP session 吗?
任何澄清这一点的文件将不胜感激。
最佳答案
That clarifies what a channel is.
不完全是。只有音频 轨道有 channel 。除非你使用 web audio至 split up将音频 MediaStreamTrack
放入单独的 channel ,轨道是关于对等连接的最低级别。 *
这是因为多个音频 channel ,就像视频的多个帧一样,是有效载荷的一部分,由编解码器编码和解码。实际上,您可以在接收器的 MedaiStreamTrack 上使用网络音频分离器来分离音频 channel ,前提是它们幸存下来。
*) 还有 data channels , 但它们是不同的,与媒体流和轨道无关。
Is the RTP stream ... the same as channels as that term is used in WebRTC, and as referenced above?
没有。粗略地说,你可以说:
但这还不是全部,因为 sender.replaceTrack(withTrack)
.简而言之,您可以随时在实时通话期间将正在发送的轨道替换为不同的轨道,而无需重新协商您的连接。重要的是,在这种情况下,另一方的 receiver.track
不会改变,只有它的输出会改变。这将管道与通过它的内容分开。
所以在发送方,更公平地说:
pc.getSenders()
)...而在接收方,它更简单,而且总是正确地说:
有道理吗?
在modern WebRTC , MediaStream
是哑容器——您可以使用 stream.addTrack(track)
和 stream.removeTrack(track)< 随意添加或删除轨道
—此外,RTCPeerConnection
仅处理tracks。例如:
for (const track of stream.getTracks()) {
pc.addTrack(track, stream);
}
Is there a one-to-one mapping between
channels ofa track and RTP stream with a SSRC?
在 MediaStreamTrack
和 SSRC 之间,是的。
A webcam, [...] can have a audio media track and a video media track, each track is transported in RTP packets using a separate SSRC, resulting in two SSRCs. Is that correct?
在这种情况下是的,因为音频永远不能与视频捆绑,反之亦然。
Now what if there is a stereo webcam
没有区别。立体声音轨仍然是单个音轨(和单个 RTP 流)。
Or can there be multiple RTP sessions over the same set of port-ip-UDP connection between peers?
不是同时。但是多个轨道可以共享同一个 session ,除非你使用非默认:
new RTCPeerConnection({bundlePolicy: 'max-compat'});
如果你不这样做,或者使用 any other mode , 然后可以将同类轨道捆绑到单个 RTP session 中。
关于javascript - WebRTC: channel 、轨道和流与 RTP SSRC 和 RTP session 之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53673672/
我很好奇为什么以下不起作用。一般select用default:防止死锁,但在这种情况下不是: package main import "fmt" func main () { a := mak
我一生都无法弄清楚如何切换图像排序。图像以 (x,x,3) 格式读取,theano 要求它是 (3,x,x) 格式。我尝试更改顺序numpy.array([img[:,:,i] for i in ra
我正在向 libnl 发送单个 SSID 和频率进行扫描,但我得到了多个扫描结果以及我请求的 SSID 和频率,但我需要单个扫描结果(仅适用于请求的 SSID),如何实现这一点。请帮助我,我也发送了我
我是 Golang 的新手,但正在努力理解这门伟大的语言!请帮帮我.. 我有 2 个 channel 。 “进”和“出” channel in, out := make(chan Work),
例如我有这段代码: package main import ( "fmt" ) func main() { c1 := make(chan interface{}) close
我们使用以下调用来获取经过身份验证的用户的 ChannelID,它适用于大多数情况。一些 YouTube 用户将他们的 channel 连接到 Google+ 信息页,但在这种情况下,我们的一位用户无
case 'sinfo': const sinfo = new Discord.MessageEmbed() .addField('Server Name 🔎 :', message.guild.n
我需要让所有 channel 来创建一个 bunker 命令,这使得所有 channel 都是只读的。 最佳答案 他们变了Client.servers至 Client.guilds在 newer ve
为什么当第二个值通过另一个 go routine 发送并且没有收到发送的第一个值时, channel c 没有缓冲? package main import "fmt" func sum(s []in
据我所知,内置的 split 会将一个 3 channel Mat 拆分为三个 1 channel Mat。结果,这三个 Mat 只是具有一些不同强度的灰度。 我的意图是获得三个 3 channel
如何检测当前的 RAM 配置?我需要询问 Windows RAM 当前是在单 channel 、双 channel 还是四 channel 中运行。 我搜索了很多,并没有在这个网站或其他网站上找到任何
我需要拆分一个多 channel wav 文件并将每个 channel 编码为 mp3 文件。 我知道 gtresamer 的 deinterleave 插件,但我不确定如何将它用于 wav 文件以及
关闭。这个问题需要details or clarity .它目前不接受答案。 想要改进这个问题吗? 通过 editing this post 添加详细信息并澄清问题. 关闭 8 年前。 Improve
我正在尝试运行 Hyperledger Fabric 网络,它由单个订购者、单个对等节点和一个 cli 组成。为了学习启动 Hyperledger Fabric 网络的过程,从创建与加密相关的工件到将
我在 Laravel 中使用事件广播。我正在使用基于角色的通知访问权限。我有用于广播的自定义 auth guard。当用户连接到 channel 时,客户端将具有内部权限的 access_token
我正在编写一个使用 Elixir Channels 来处理实时事件的应用程序。我知道每个客户端将打开 1 个套接字,并且可以在其上多路复用多个 channel 。所以我的应用程序是一个聊天应用程序,其
我有一些 .wav 文件,我想转换它们的频率 (fs) 和 channel 数 (nchannels)。我在jupyter笔记本python3.6上使用ffmpeg。我使用了以下命令并且它有效。 cm
我有一个视频渲染器,它需要两个 H265 流(YUV420),我需要烘焙它们以使它们中的一个与另一个形成 alpha 蒙版。这一切都已解决并且效果很好,但是如果我按照此处的说明进行操作: ffmpeg
我运行此命令以便能够将 udp 直播流传输到可使用正在构建的移动应用程序播放的 http 直播流。 它只是一个只有音频流的流。 ffmpeg -i udp://@localhost:1111 -map
我在我的 discord.js 机器人中创建了 nuke 命令,它创建了具有相同名称、权限、主题等的 channel ,并删除了“原始” channel 。但是有一个问题,如何使 channel 与“
我是一名优秀的程序员,十分优秀!