我正在寻找有关在基于 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/