java - 在 Java 中使用 BUNDLE 进行 WebRTC 复用

标签 java webrtc sdp rtcp

我正在寻找有关在基于 Java 的服务器上使用 BUNDLE 复用 RTP 和 RTCP 流的低级实现细节。以 Chrome 作为源,本地 SDP 如下所示:

o=- 8554465656018336221 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video data
a=msid-semantic: WMS
m=audio 1 RTP/SAVPF 111 103 104 0 8 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:Vw+winZTN4ejhvQJ
a=ice-pwd:ufBTUw/iszvCbL53dmPHQAYK
a=ice-options:google-ice
a=fingerprint:sha-256 5C:C6:19:38:4D:54:57:71:16:3F:67:A6:C8:21:CC:29:88:85:22:86:53:E5:7B:3F:3D:A4:5C:E5:BC:29:D8:B5
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:Vw+winZTN4ejhvQJ
a=ice-pwd:ufBTUw/iszvCbL53dmPHQAYK
a=ice-options:google-ice
a=fingerprint:sha-256 5C:C6:19:38:4D:54:57:71:16:3F:67:A6:C8:21:CC:29:88:85:22:86:53:E5:7B:3F:3D:A4:5C:E5:BC:29:D8:B5
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=recvonly
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000
m=application 1 DTLS/SCTP 5000
c=IN IP4 0.0.0.0
a=ice-ufrag:Vw+winZTN4ejhvQJ
a=ice-pwd:ufBTUw/iszvCbL53dmPHQAYK
a=ice-options:google-ice
a=fingerprint:sha-256 5C:C6:19:38:4D:54:57:71:16:3F:67:A6:C8:21:CC:29:88:85:22:86:53:E5:7B:3F:3D:A4:5C:E5:BC:29:D8:B5
a=setup:actpass
a=mid:data
a=sctpmap:5000 webrtc-datachannel 1024

我已经用谷歌搜索过,但到目前为止还没有找到我需要的东西。我确实找到了这个页面,它只包含大部分高级信息,但我再次需要更多:https://datatracker.ietf.org/doc/html/draft-ejzak-avtcore-rtp-subsessions-01

此外,我订阅了https://groups.google.com/forum/#!aboutgroup/discuss-webrtc但我还没有看到任何关于多路复用如何与

a=group:BUNDLE audio video data
一起工作的低级信息使用。

相关问题:
WebRTC java server trouble
How can I mux/demux RTP media from one stream?

最佳答案

所有这些都意味着数据正在通过同一端口发送。这并不意味着数据包本身被以任何方式修改。

分离数据包的方法(知道哪个是音频/视频及其各自的控制数据包)是根据它们各自的 SSRC 检查它们。在 RTP/RTCP数据包 header 。这样,您就不会在给定音频控制数据包的情况下修改视频流,反之亦然

在 Chrome 中,您可以通过 SDP 交换包含 a=ssrc:<ID> 使其向相应的 SSRC id 发出警报。对于每个媒体级别(一个用于视频,一个用于音频)。

您的 SDP 似乎也设置为 recvonly对于两种媒体类型。这意味着它不会接收任何 RTCP,只会将它们发送回发送方,以便可以相应地修改流。

关于java - 在 Java 中使用 BUNDLE 进行 WebRTC 复用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664903/

相关文章:

java - 如何在 Apache Mina sshd-core 版本 0.14.0 中覆盖 getVirtualUserDir()

java - cucumber 测试失败后Maven构建成功

javascript - 如何判断WebRTC dataChannel.send是否送达?

xcode - 适用于 Mac OS X 的 webrtc xcode 构建

video-streaming - WebRTC 单向视频通话

java - 如何在 Glassfish 服务器中设置 HTTP header

java - IllegalArgumentException : com. sun.xml.internal.messaging.saaj.soap.LocalStrings != com.sun.xml.messaging.saaj.soap.LocalStrings

javascript - 在 HTML Web 应用程序中显示实时网络摄像头数据

webrtc - UDP/TLS/RTP/SAVPF 配置文件相对于 RTP/SAVPF 有什么好处?

webrtc - 为什么 WebRTC 使用候选对而不是 IP + 端口对进行双向通信