如何修改仅使用 Kurento 录制音频的答案 SDP?

How to modify answer SDP for record audio only with Kurento?

我可以使用 Kurento 媒体服务器录制视频+音频。我在录制纯音频流时遇到问题。从了解到答案SDP要修改。

目前,我正在向 PeerConnection 添加只有音轨的 MediaStream。在发送回应答 SDP 之前,我在服务器端对其进行了修改。我尝试删除

  1. 以下任何内容(包括)m=video
  2. 以下任何内容(包括)a=mid:video

在这两种情况下,浏览器端 PeerConnection#signalingState 保持在 have-local-offer

媒体流将开始流动并且 Kurento 将开始录制纯音频流的答案 SDP 中要更改什么?

这是来自 WebRtcEndpoint#processoffer:

的原始答案 SDP(从中删除)
v=0
o=- 7750769884654864002 0 IN IP4 0.0.0.0
s=Kurento Media Server
c=IN IP4 0.0.0.0
t=0 0
a=group:BUNDLE audio video
m=audio 40192 RTP/SAVPF 111 0
c=IN IP4 10.0.2.15
a=rtpmap:111 opus/48000/2
a=rtpmap:0 PCMU/8000
a=sendrecv
a=rtcp:40192 IN IP4 10.0.2.15
a=rtcp-mux
a=ssrc:4125152746 cname:user2534372120@host-b735c5b0
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=mid:audio
a=ice-ufrag:SEV7
a=ice-pwd:BQyTSM0hvTJeqykFZovuBS
a=fingerprint:sha-256 E4:A1:25:2C:53:60:28:F5:C1:94:C6:32:E0:13:81:06:A6:66:77:00:52:C2:D9:93:AF:E4:A0:B3:4D:5C:9C:C3
a=candidate:1 1 UDP 2013266431 10.0.2.15 40192 typ host
a=candidate:2 1 UDP 2013266431 192.168.33.10 44816 typ host
m=video 40192 RTP/SAVPF 100
c=IN IP4 10.0.2.15
b=AS:500
a=rtpmap:100 VP8/90000
a=sendonly
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb
a=rtcp:40192 IN IP4 10.0.2.15
a=rtcp-mux
a=ssrc:1769273725 cname:user2534372120@host-b735c5b0
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=mid:video
a=ice-ufrag:SEV7
a=ice-pwd:BQyTSM0hvTJeqykFZovuBS
a=fingerprint:sha-256 E4:A1:25:2C:53:60:28:F5:C1:94:C6:32:E0:13:81:06:A6:66:77:00:52:C2:D9:93:AF:E4:A0:B3:4D:5C:9C:C3
a=candidate:1 1 UDP 2013266431 10.0.2.15 40192 typ host
a=candidate:2 1 UDP 2013266431 192.168.33.10 44816 typ host

编辑:

根据 kurento google 组的建议,似乎没有必要修改 SDP。至少对于 Kurento 6。 我得到了纯音频工作(来自浏览器的纯音频 MediaStream 和来自浏览器的音频 + 视频 MediaStream)。为此(Ruby 中的示例代码):

  1. 在 RecorderEndpoint 构建器中指定 MediaProfileSpecTypeRecorderEndpoint::Builder.new(@pipeline, location).withMediaProfile(org.kurento.client.MediaProfileSpecType::WEBM_AUDIO_ONLY).build()
  2. 连接记录端点时指定MediaType(@source是WebRtcEndpoint): @source.connect(@recorder, org.kurento.client.MediaType::AUDIO)

您可以将视频流的端口设置为零。这应该表明该流在会话期间被拒绝或禁止进一步使用。

m=视频 0 RTP/SAVPF 100

你在这里有不同的选择。我假设你有一个 webrtcEp 和一个 recoderEp

  • 从客户端发送音频和视频,但仅录制视频:您将同时发送两者,但必须指示记录器仅存储音频

    RecorderEndpoint recoderEp = new RecorderEndpoint.Builder(pipeline, "URI_HERE").withMediaProfile(MediaProfileSpecType.WEBM_AUDIO_ONLY).build();
    webrtcEp.connect(recorderEp, MediaProfile.AUDIO);
    
  • 仅发送音频:将 getUserMedia 选项的 video 属性 设置为 false 应该只发送音频。如果不是,则意味着媒体服务器中的 webrtc 端点协商存在错误。我们有类似的情况,但只发送视频,而且它正在运行。如果不正常,请报告,以便我们进行修复。

编辑#1:无论如何,指定要记录的媒体类型总是很方便,或者两个端点将通过连接方法进行交换,所以第一个写的是什么项目符号适用于两者。

编辑 #2 创建记录器时肯定需要指定 MediaProfileSpecType