I use Janus-Gateway and I have a problem with choosing codecs between H264 / VP8. When I choose the H264 codec works on IOS but does not work on Chrome 71 (Android) or when I choose VP8 works on Chrome 71 (Android) but it does not work on IOS, is there a way that it works on both normally??
v=0
o=- 1548787135566484 1 IN IP4
s=VideoRoom 5678
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS janus
a=ice-lite
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4
a=sendonly
a=mid:audio
a=rtcp-mux
a=ice-ufrag:d3jE
a=ice-pwd:JpX8g/jACKyD9331XVlKC9
a=ice-options:trickle
a=fingerprint:sha-256 A8:99:87:1B:32:F2:7B:70:51:F9:D8:5C:FF:21:16:86:3D:32:59:8B:89:E4:C1:8A:44:FA:47:1A:1A:18:E2:F4
a=setup:actpass
a=rtpmap:111 opus/48000/2
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=ssrc:3270748517 cname:janusaudio
a=ssrc:3270748517 msid:janus janusa0
a=ssrc:3270748517 mslabel:janus
a=ssrc:3270748517 label:janusa0
m=video 9 UDP/TLS/RTP/SAVPF 107
c=IN IP4
a=sendonly
a=mid:video
a=rtcp-mux
a=ice-ufrag:d3jE
a=ice-pwd:JpX8g/jACKyD9331XVlKC9
a=ice-options:trickle
a=fingerprint:sha-256 A8:99:87:1B:32:F2:7B:70:51:F9:D8:5C:FF:21:16:86:3D:32:59:8B:89:E4:C1:8A:44:FA:47:1A:1A:18:E2:F4
a=setup:actpass
a=rtpmap:107 H264/90000
a=fmtp:107 profile-level-id=42e01f;packetization-mode=1
a=rtcp-fb:107 ccm fir
a=rtcp-fb:107 nack
a=rtcp-fb:107 nack pli
a=rtcp-fb:107 goog-remb
a=extmap:4 urn:3gpp:video-orientation
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=ssrc:1373947363 cname:janusvideo
a=ssrc:1373947363 msid:janus janusv0
a=ssrc:1373947363 mslabel:janus
a=ssrc:1373947363 label:janusv0
Regards
I have some doubts that Chrome 71 (Android) doesn't support H.264 WebRTC.
I don't have any Android devices to try it. So you may see an Android device specific issue. iOS doesn't support VP8 which is against the standard.
As this point in time I'd use H.264.
Let's just assume that you have two clients that don't share a common video format.
You could use Janus as media relay and setup a transcode plugin.
https://github.com/chetanbnaik/janus-gateway-transcoder
This will add additional latency because you have to decode and encode and you'd be in for additional power consumption for the relative compute intensive encodes.
Safari Technology Preview now supports the vp8 codec in WebRTC, so it should be available in the next release.
Related
I have made a mode-verto android client, using WebRtc;
Pre-built library: org.webrtc:google-webrtc:1.0.+
libjingle: io.pristine:libjingle:11139#aar
and FreeSwitch but only got success to make uni-directional communication(SIP phone to an android client, voice communication in both devices successfully). But when I try to make a call from an android client to a SIP phone it doesn't work.
Steps:
From Web To mode-verto android Client(Working scenario):
Login Call:
{"method":"login","id":1,"params":{"passwd":"XXX","userVariables":{},"loginParams":{},"login":"1002#XXX.XXX.com","sessid":"0afc3741-97cf-4b59-94a4-57bdcc2f5f17"},"jsonrpc":"2.0"}
Login Call Response:
{"jsonrpc":"2.0","id":1,"result":{"message":"logged in","sessid":"0afc3741-97cf-4b59-94a4-57bdcc2f5f17"}}
{"jsonrpc":"2.0","id":254,"method":"verto.clientReady","params":{"reattached_sessions":[]}}
Call Invitation From Web:
{"jsonrpc":"2.0","id":255,"method":"verto.invite","params":{"callID":"94c79b9e-9aa1-41d6-85be-3f94d71bf4f4","sdp":"v=0\r\no=FreeSWITCH 1633327591 1633327592 IN IP4 192.168.0.1\r\ns=FreeSWITCH\r\nc=IN IP4 192.168.0.1\r\nt=0 0\r\na=msid-semantic: WMS esmOfEYFBQ88Oj5egBp9rex75ApyzBlE\r\nm=audio 16468 RTP/SAVPF 102 9 0 8\r\na=rtpmap:102 opus/48000/2\r\na=fmtp:102 useinbandfec=1; maxaveragebitrate=30000; maxplaybackrate=48000; ptime=20; minptime=10; maxptime=40; stereo=1\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=fingerprint:sha-256 30:D5:C6:44:1E:D6:22:FD:54:D1:0E:E8:7C:B4:E7:AD:93:99:E9:CD:48:D0:6D:B6:28:EE:19:45:83:8A:62:B8\r\na=setup:actpass\r\na=rtcp-mux\r\na=rtcp:16468 IN IP4 192.168.0.1\r\na=ssrc:2708468483 cname:UyjZ27vuNtssDnxJ\r\na=ssrc:2708468483 msid:esmOfEYFBQ88Oj5egBp9rex75ApyzBlE a0\r\na=ssrc:2708468483 mslabel:esmOfEYFBQ88Oj5egBp9rex75ApyzBlE\r\na=ssrc:2708468483 label:esmOfEYFBQ88Oj5egBp9rex75ApyzBlEa0\r\na=ice-ufrag:OMJ6Q73MxiaXJmsu\r\na=ice-pwd:KBkDyFYcZgvtuS29vC5czYOX\r\na=candidate:9757738161 1 udp 2130706431 192.168.0.1 16468 typ host generation 0\r\na=candidate:9757738161 2 udp 2130706431 192.168.0.1 16468 typ host generation 0\r\na=silenceSupp:off - - - -\r\na=ptime:20\r\na=sendrecv\r\nm=video 16470 RTP/SAVPF 96 98 100 102 127 125 108 124 123\r\nb=AS:3072\r\na=rtpmap:96 VP8/90000\r\na=rtpmap:98 VP9/90000\r\na=fmtp:98 profile-id=0\r\na=rtpmap:100 VP9/90000\r\na=fmtp:100 profile-id=2\r\na=rtpmap:102 H264/90000\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:127 H264/90000\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:125 H264/90000\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:108 H264/90000\r\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:124 H264/90000\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f\r\na=rtpmap:123 H264/90000\r\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f\r\na=sendrecv\r\na=fingerprint:sha-256 30:D5:C6:44:1E:D6:22:FD:54:D1:0E:E8:7C:B4:E7:AD:93:99:E9:CD:48:D0:6D:B6:28:EE:19:45:83:8A:62:B8\r\na=setup:actpass\r\na=rtcp-mux\r\na=rtcp:16470 IN IP4 192.168.0.1\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 ccm tmmbr\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 ccm tmmbr\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 ccm tmmbr\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 ccm tmmbr\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 ccm tmmbr\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 ccm tmmbr\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=rtcp-fb:108 ccm fir\r\na=rtcp-fb:108 ccm tmmbr\r\na=rtcp-fb:108 nack\r\na=rtcp-fb:108 nack pli\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 ccm tmmbr\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=rtcp-fb:123 ccm fir\r\na=rtcp-fb:123 ccm tmmbr\r\na=rtcp-fb:123 nack\r\na=rtcp-fb:123 nack pli\r\na=ssrc:1891818205 cname:UyjZ27vuNtssDnxJ\r\na=ssrc:1891818205 msid:esmOfEYFBQ88Oj5egBp9rex75ApyzBlE v0\r\na=ssrc:1891818205 mslabel:esmOfEYFBQ88Oj5egBp9rex75ApyzBlE\r\na=ssrc:1891818205 label:esmOfEYFBQ88Oj5egBp9rex75ApyzBlEv0\r\na=ice-ufrag:pWTWGFjyLZJAyUKz\r\na=ice-pwd:0XZUOcLk08IHnyICkspRXyfz\r\na=candidate:0896075528 1 udp 2130706431 192.168.0.1 16470 typ host generation 0\r\na=candidate:0896075528 2 udp 2130706430 192.168.0.1 16470 typ host generation 0\r\na=end-of-candidates\r\n","caller_id_name":"Extension 1001","caller_id_number":"1001","callee_id_name":"Outbound Call","callee_id_number":"1002","display_direction":"outbound"}}
Call Response with SDP:
{"method":"verto.answer","id":2,"params":{"dialogParams":{"callID":"94c79b9e-9aa1-41d6-85be-3f94d71bf4f4","remote_caller_id_number":"1002","destination_number":"1002","remote_caller_id_name":"1002"},"session_id":"0afc3741-97cf-4b59-94a4-57bdcc2f5f17","sdp":"v=0\r\no=- 4285064094073427202 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=msid-semantic: WMS MediaStream\r\nm=audio 63288 RTP\/SAVPF 102 9 0 8\r\nc=IN IP4 192.168.2.1\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:341193750 1 udp 2122260223 192.168.8.101 49077 typ host generation 0 network-id 3 network-cost 10\r\na=candidate:1510613869 1 udp 2122129151 127.0.0.1 49460 typ host generation 0 network-id 1\r\na=candidate:842163049 1 udp 1686052607 192.168.2.1 63288 typ srflx raddr 192.168.8.101 rport 49077 generation 0 network-id 3 network-cost 10\r\na=ice-ufrag:BfLO\r\na=ice-pwd:RBsUQ\/uNeEiqmPgyvWJBN4vs\r\na=ice-options:trickle renomination\r\na=fingerprint:sha-256 3D:3A:73:40:49:34:6F:E6:F0:17:9F:E6:7F:FE:C1:0D:C0:3D:86:A1:28:39:73:3A:EB:64:67:E4:57:55:EA:C0\r\na=setup:active\r\na=mid:audio\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:102 opus\/48000\/2\r\na=fmtp:102 minptime=10;useinbandfec=1\r\na=rtpmap:9 G722\/8000\r\na=rtpmap:0 PCMU\/8000\r\na=rtpmap:8 PCMA\/8000\r\na=ssrc:2607788540 cname:lwXiQ5hT1hGGiwou\r\na=ssrc:2607788540 msid:MediaStream ARDAMSa0\r\na=ssrc:2607788540 mslabel:MediaStream\r\na=ssrc:2607788540 label:ARDAMSa0\r\nm=video 0 RTP\/SAVPF 96 98 125\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:OxRK\r\na=ice-pwd:LCVdU01PHZJFx4\/dv4j3nqdN\r\na=ice-options:trickle renomination\r\na=fingerprint:sha-256 3D:3A:73:40:49:34:6F:E6:F0:17:9F:E6:7F:FE:C1:0D:C0:3D:86:A1:28:39:73:3A:EB:64:67:E4:57:55:EA:C0\r\na=setup:active\r\na=mid:video\r\na=inactive\r\na=rtcp-mux\r\na=rtpmap:96 VP8\/90000\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:98 VP9\/90000\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=rtpmap:125 H264\/90000\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\n"},"jsonrpc":"2.0"}
Followings are the messages received after successful call invitation response:
{"jsonrpc":"2.0","id":2,"result":{"sessid":"0afc3741-97cf-4b59-94a4-57bdcc2f5f17"}}
{"jsonrpc":"2.0","id":259,"method":"verto.display","params":{"callID":"94c79b9e-9aa1-41d6-85be-3f94d71bf4f4","display_name":"Extension 1001","display_number":"1001","caller_id_name":"Extension 1001","caller_id_number":"1001","callee_id_name":"Outbound Call","callee_id_number":"1002","display_direction":"outbound"}}
{"jsonrpc":"2.0","id":260,"method":"verto.bye","params":{"callID":"94c79b9e-9aa1-41d6-85be-3f94d71bf4f4","causeCode":16,"cause":"NORMAL_CLEARING"}}
In the above scenario, the followings states are CONNECTED:
onStandardizedIceConnectionChange
onIceGatheringChange
onConnectionChange
onIceConnectionChange
mode-verto to Web Platform/SIP (Scenario in which help is required):
Login Call:
{"method":"login","id":1,"params":{"passwd":"XXX","userVariables":{},"loginParams":{},"login":"1002#XXX.XXXX.com","sessid":"9743f047-ba15-47ad-828b-26c57529fcf3"},"jsonrpc":"2.0"}
Login Call Response:
{"jsonrpc":"2.0","id":1,"result":{"message":"logged in","sessid":"9743f047-ba15-47ad-828b-26c57529fcf3"}}
{"jsonrpc":"2.0","id":261,"method":"verto.clientReady","params":{"reattached_sessions":[]}}
Call Invitation:
{"method":"verto.invite","id":2,"params":{"dialogParams":{"callID":"50533ec8-985c-4857-99bf-bcb1b021e558","caller_id_name":"1002","remote_caller_id_number":"1001","destination_number":"1001","remote_caller_id_name":"Outbound Call","useVideo":false,"useStereo":false,"useMic":"any","login":"1002#XXXX.XXXX.com","useCamera":"any","screenShare":false,"tag":"any","caller_id_number":"1002","useSpeak":"any","videoParams":{"minHeight":"720","minFrameRate":30,"minWidth":"1280"}},"sdp":"v=0\r\no=- 1985358600062838354 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio\r\na=msid-semantic: WMS MediaStream\r\nm=audio 60367 UDP\/TLS\/RTP\/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 37.111.135.112\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:341193750 1 udp 2122260223 192.168.2.1 49612 typ host generation 0 network-id 3 network-cost 10\r\na=candidate:1510613869 1 udp 2122129151 127.0.0.1 42121 typ host generation 0 network-id 1\r\na=candidate:842163049 1 udp 1686052607 37.111.135.112 60367 typ srflx raddr 192.168.2.1 rport 49612 generation 0 network-id 3 network-cost 10\r\na=ice-ufrag:DRth\r\na=ice-pwd:6ZrLWyqfDk4vqVPGktrUsCOw\r\na=ice-options:trickle renomination\r\na=fingerprint:sha-256 DF:C1:F2:1E:F9:C6:9F:54:55:CD:A0:78:D5:85:23:B0:C7:E5:6A:C9:48:6C:4D:5E:17:5C:00:D4:F5:D0:D6:BF\r\na=setup:actpass\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http:\/\/www.webrtc.org\/experiments\/rtp-hdrext\/abs-send-time\r\na=extmap:3 http:\/\/www.ietf.org\/id\/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus\/48000\/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC\/16000\r\na=rtpmap:104 ISAC\/32000\r\na=rtpmap:9 G722\/8000\r\na=rtpmap:102 ILBC\/8000\r\na=rtpmap:0 PCMU\/8000\r\na=rtpmap:8 PCMA\/8000\r\na=rtpmap:106 CN\/32000\r\na=rtpmap:105 CN\/16000\r\na=rtpmap:13 CN\/8000\r\na=rtpmap:110 telephone-event\/48000\r\na=rtpmap:112 telephone-event\/32000\r\na=rtpmap:113 telephone-event\/16000\r\na=rtpmap:126 telephone-event\/8000\r\na=ssrc:859436163 cname:6xspDJIe1I+kt4ue\r\na=ssrc:859436163 msid:MediaStream ARDAMSa0\r\na=ssrc:859436163 mslabel:MediaStream\r\na=ssrc:859436163 label:ARDAMSa0\r\n","sessid":"9743f047-ba15-47ad-828b-26c57529fcf3"},"jsonrpc":"2.0"}
Call Invitation Response:
{"jsonrpc":"2.0","id":2,"result":{"message":"CALL CREATED","callID":"50533ec8-985c-4857-99bf-bcb1b021e558","sessid":"9743f047-ba15-47ad-828b-26c57529fcf3"}}
{"jsonrpc":"2.0","id":263,"method":"verto.media","params":{"callID":"50533ec8-985c-4857-99bf-bcb1b021e558","sdp":"v=0\r\no=FreeSWITCH 1633328922 1633328923 IN IP4 172.1.0.165\r\ns=FreeSWITCH\r\nc=IN IP4 172.1.0.165\r\nt=0 0\r\na=msid-semantic: WMS YfVYnQ98r94pqu4N6K4IJDNht8vLsWrg\r\nm=audio 17076 UDP/TLS/RTP/SAVPF 111 110\r\na=rtpmap:111 opus/48000/2\r\na=fmtp:111 useinbandfec=1; minptime=10\r\na=rtpmap:110 telephone-event/48000\r\na=silenceSupp:off - - - -\r\na=ptime:20\r\na=sendrecv\r\na=fingerprint:sha-256 30:D5:C6:44:1E:D6:22:FD:54:D1:0E:E8:7C:B4:E7:AD:93:99:E9:CD:48:D0:6D:B6:28:EE:19:45:83:8A:62:B8\r\na=setup:active\r\na=rtcp-mux\r\na=rtcp:17076 IN IP4 172.1.0.165\r\na=ice-ufrag:VRYvkCDEAYgSKxZD\r\na=ice-pwd:zTJiNNjGMzQ6KDmvlbRwEk05\r\na=candidate:8820384080 1 udp 2130706431 172.1.0.165 17076 typ host generation 0\r\na=end-of-candidates\r\na=ssrc:2909163670 cname:2c4fT3eb39qjtkXq\r\na=ssrc:2909163670 msid:YfVYnQ98r94pqu4N6K4IJDNht8vLsWrg a0\r\na=ssrc:2909163670 mslabel:YfVYnQ98r94pqu4N6K4IJDNht8vLsWrg\r\na=ssrc:2909163670 label:YfVYnQ98r94pqu4N6K4IJDNht8vLsWrga0\r\n"}}
Call Invitation Ans. confirmation Response:
{"jsonrpc":"2.0","id":264,"method":"verto.answer","params":{"callID":"50533ec8-985c-4857-99bf-bcb1b021e558"}}
After this process:
onIceConnectionChange and onStandardizedIceConnectionChange get stuck in CHECKING state and onConnectionChange in CONNECTING state.
and after few seconds, onIceConnectionChange , onStandardizedIceConnectionChange and onConnectionChange states change to FAILED.
On the android client, it takes 30, 40 seconds to gather complete Ice-Candidates, which is a lot.
On exchange of successful SDP's , even after ice candidates completion, onIceConnectionChange and onStandardizedIceConnectionChange states change to Failed.
Also followed these solutions:
WebRTC + IOS + Freeswitch : Can't hear audio
https://stackoverflow.com/a/35881785/10413749
No audio when webrtc mobile clients connected in different network
But still, I do not get what I am doing wrong.
Is there anything I'll be missing which I should check? Any help from the community would be really helpful for me.
Here is sdpOffer:
v=0
o=- 2579350455277549780 1610962064 IN IP4 0.0.0.0
s=-
t=0 0
a=fingerprint:sha-256 04:9B:37:B3:32:6B:FB:23:C0:D6:19:EB:61:85:B6:7F:EB:3A:19:44:DB:C1:5B:B4:B0:15:7A:49:38:46:18:00
a=group:BUNDLE 0 1
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=setup:actpass
a=mid:0
a=ice-ufrag:uYIozschzbybzcjH
a=ice-pwd:xlXliBrswRNYGwKJMWSCHSaGwTQPjHju
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=ssrc:3956969441 cname:xYppXcDkmOafnTrm
a=ssrc:3956969441 msid:xYppXcDkmOafnTrm FUhSMHFRpLUHkYer
a=ssrc:3956969441 mslabel:xYppXcDkmOafnTrm
a=ssrc:3956969441 label:FUhSMHFRpLUHkYer
a=msid:xYppXcDkmOafnTrm FUhSMHFRpLUHkYer
a=sendrecv
m=audio 9 UDP/TLS/RTP/SAVPF 97 98
c=IN IP4 0.0.0.0
a=setup:actpass
a=mid:1
a=ice-ufrag:uYIozschzbybzcjH
a=ice-pwd:xlXliBrswRNYGwKJMWSCHSaGwTQPjHju
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:97 opus/8000/2
a=fmtp:97 ptime=10;minptime=10;useinbandfec=1
a=rtpmap:98 opus/48000/2
a=fmtp:98 ptime=10;minptime=10;useinbandfec=1
a=ssrc:513548820 cname:bRhpvRcAVgBCowya
a=ssrc:513548820 msid:bRhpvRcAVgBCowya XmNrnGRbNleCMODF
a=ssrc:513548820 mslabel:bRhpvRcAVgBCowya
a=ssrc:513548820 label:XmNrnGRbNleCMODF
a=msid:bRhpvRcAVgBCowya XmNrnGRbNleCMODF
a=sendrecv
I don't know why it has broken on Safari.
I got the following error when I called setRemoteDescription only on Safari browser BUT it works fine on other browsers.
Unhandled Promise Rejection: InvalidAccessError: Failed to set remote offer sdp: Failed to set remote video description send parameters.
This has to do with how Safari blocks ICE candidates. To enable them, follow these steps:
In the upper menu:
(1) Safari > Preferences > Advanced > “Show Develop menu in menu bar.” - Shows the "Develop" option in the menu bar.
(2) Develop > WebRTC > “Disable ICE Candidate restrictions” - Disables ICE Candidates restrictions
These enable ICE candidates and should get your app working on Safari.
I have successfully register over SIP but unable to connect with webRTC.
Can any one idea about it how we connect SIP with webRTC?
Please help us we are in trouble.
In order to interoperate between SIP and Webrtc, you need to solve issue on 2 layers:
use the same technology to register on the same server (using SIP)
use the same technology to setup a media session (using SDP with required features)
In the end, both Webrtc and SIP are using SDP to setup a media session and you need to focus on having the same feature support in SDP on both the Webrtc agent and the SIP agent side.
In order to acheive this, you need, :
on webrtc agent side, to register the webrtc agent to a SIP service.
on sip agent side, to understand the SDP setup that will be sent by webrtc agent.
If I'm correct, from your question, you already have the webrtc agent registered to a SIP service? Anyway, a solution, which you may already use, it to use a javascript SIP stack such as JsSIP. This stack is implementing the missing SIP protocol layer for the webrtc agent. It can be used to send a REGISTER over websocket to a SIP service such as kamailio. JsSIP will be also able to send INVITE with SDP generated by Webrtc.
Once you have your webrtc agent registered, you can call the SIP agent.
The next step will be to have a SIP agent able to interoperate with the SDP sent by Webrtc. The SDP from Webrtc requires numerous features to be implemented and negotiated. Otherwise, the SDP negotiation will fail on the Webrtc side.
The requirements for SDP on webrtc are:
- use OPUS codec for audio (PCMU or PCMA may also work)
- use VP8, VP9, H264 for video. (depends on browser?)
- use UDP/TLS/RTP/SAVPF profile (instead of RTP/AVP)
- use DTLS for media encryption
- use RTCP feedback such as GOOG-REMB, TMMBR, PLI, NACK
- use muxing for RTP and RTCP (same socket to be used)
- use muxing for audio and video stream (same socket to be used)
- use ICE to establish and validate streams with LOCAL, STUN and TURN candidates
- a few other codecs or optional extension, like "ssrc" and "extmap" attributes...
Here is an example of an SDP from a webrtc using JsSIP and current Chrome:
INVITE sip:antisip#sip.antisip.com SIP/2.0
Via: SIP/2.0/WSS 23g0dst83l03.invalid;branch=z9hG4bK9183549
Max-Forwards: 69
To: <sip:antisip#sip.antisip.com>
From: "test61" <sip:test61#sip.antisip.com>;tag=ug27evkg8b
Call-ID: fgk6v33jjsmcqkec4hnk
CSeq: 1493 INVITE
Proxy-Authorization: Digest algorithm=MD5, username="test61", realm="sip.antisip.com", nonce="XhRyf14UcVN1NxxGnK1M2SSNNMCCeN28/hp17aOPbPRx6h7r++W5Ng==", uri="sip:antisip#sip.antisip.com", response="801f72fe7a2d95aa21b8b7ab7eb45930", qop=auth, cnonce="bka9v71mqbqu", nc=00000001
Contact: <sip:test61#sip.antisip.com;gr=urn:uuid:01542fc1-e3d6-4e92-a032-5c5378bff6c1>
Content-Type: application/sdp
Session-Expires: 90
Allow: INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO,NOTIFY
Supported: timer,gruu,ice,replaces,outbound
User-Agent: JsSIP 3.3.11
Content-Length: 9992
v=0
o=- 6413630617983761779 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=msid-semantic: WMS WUvtnpqd3NIpvzakhMqR4QQ308BUCsNHi75U
m=audio 62668 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 90.66.179.60
a=rtcp:62672 IN IP4 90.66.179.60
a=candidate:3769397851 1 udp 2122262783 2a01:cb14:7c1:7f00:1d76:e7d4:3237:e96f 62665 typ host generation 0 network-id 3
a=candidate:2805962766 1 udp 2122197247 2a01:cb14:7c1:7f00:f961:60c1:70f1:25a0 62666 typ host generation 0 network-id 4
a=candidate:2999745851 1 udp 2122129151 192.168.56.1 62667 typ host generation 0 network-id 1
a=candidate:4077567720 1 udp 2122063615 192.168.1.10 62668 typ host generation 0 network-id 2
a=candidate:3769397851 2 udp 2122262782 2a01:cb14:7c1:7f00:1d76:e7d4:3237:e96f 62669 typ host generation 0 network-id 3
a=candidate:2805962766 2 udp 2122197246 2a01:cb14:7c1:7f00:f961:60c1:70f1:25a0 62670 typ host generation 0 network-id 4
a=candidate:2999745851 2 udp 2122129150 192.168.56.1 62671 typ host generation 0 network-id 1
a=candidate:4077567720 2 udp 2122063614 192.168.1.10 62672 typ host generation 0 network-id 2
a=candidate:85641020 1 udp 1685855999 90.66.179.60 62668 typ srflx raddr 192.168.1.10 rport 62668 generation 0 network-id 2
a=candidate:85641020 2 udp 1685855998 90.66.179.60 62672 typ srflx raddr 192.168.1.10 rport 62672 generation 0 network-id 2
a=candidate:2922352299 1 tcp 1518283007 2a01:cb14:7c1:7f00:1d76:e7d4:3237:e96f 9 typ host tcptype active generation 0 network-id 3
a=candidate:3921437950 1 tcp 1518217471 2a01:cb14:7c1:7f00:f961:60c1:70f1:25a0 9 typ host tcptype active generation 0 network-id 4
a=candidate:4233069003 1 tcp 1518149375 192.168.56.1 9 typ host tcptype active generation 0 network-id 1
a=candidate:3179889176 1 tcp 1518083839 192.168.1.10 9 typ host tcptype active generation 0 network-id 2
a=candidate:2922352299 2 tcp 1518283006 2a01:cb14:7c1:7f00:1d76:e7d4:3237:e96f 9 typ host tcptype active generation 0 network-id 3
a=candidate:3921437950 2 tcp 1518217470 2a01:cb14:7c1:7f00:f961:60c1:70f1:25a0 9 typ host tcptype active generation 0 network-id 4
a=candidate:4233069003 2 tcp 1518149374 192.168.56.1 9 typ host tcptype active generation 0 network-id 1
a=candidate:3179889176 2 tcp 1518083838 192.168.1.10 9 typ host tcptype active generation 0 network-id 2
a=ice-ufrag:8hGn
a=ice-pwd:7nXTzHnYYJqjFn/PuIQs0M74
a=ice-options:trickle
a=fingerprint:sha-256 BC:82:61:35:EA:5B:A5:26:05:82:04:D8:59:4C:38:5D:C9:2A:A2:FB:3C:D1:4D:B3:F0:30:51:15:12:35:09:53
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:WUvtnpqd3NIpvzakhMqR4QQ308BUCsNHi75U 40826d93-0424-428b-9d5e-c75e8529f908
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
a=ssrc:1958040920 cname:YJ7EvDTAqjZBMG5q
a=ssrc:1958040920 msid:WUvtnpqd3NIpvzakhMqR4QQ308BUCsNHi75U 40826d93-0424-428b-9d5e-c75e8529f908
a=ssrc:1958040920 mslabel:WUvtnpqd3NIpvzakhMqR4QQ308BUCsNHi75U
a=ssrc:1958040920 label:40826d93-0424-428b-9d5e-c75e8529f908
m=video 62676 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116
c=IN IP4 90.66.179.60
a=rtcp:62680 IN IP4 90.66.179.60
a=candidate:3769397851 1 udp 2122262783 2a01:cb14:7c1:7f00:1d76:e7d4:3237:e96f 62673 typ host generation 0 network-id 3
a=candidate:2805962766 1 udp 2122197247 2a01:cb14:7c1:7f00:f961:60c1:70f1:25a0 62674 typ host generation 0 network-id 4
a=candidate:2999745851 1 udp 2122129151 192.168.56.1 62675 typ host generation 0 network-id 1
a=candidate:4077567720 1 udp 2122063615 192.168.1.10 62676 typ host generation 0 network-id 2
a=candidate:3769397851 2 udp 2122262782 2a01:cb14:7c1:7f00:1d76:e7d4:3237:e96f 62677 typ host generation 0 network-id 3
a=candidate:2805962766 2 udp 2122197246 2a01:cb14:7c1:7f00:f961:60c1:70f1:25a0 62678 typ host generation 0 network-id 4
a=candidate:2999745851 2 udp 2122129150 192.168.56.1 62679 typ host generation 0 network-id 1
a=candidate:4077567720 2 udp 2122063614 192.168.1.10 62680 typ host generation 0 network-id 2
a=candidate:85641020 1 udp 1685855999 90.66.179.60 62676 typ srflx raddr 192.168.1.10 rport 62676 generation 0 network-id 2
a=candidate:85641020 2 udp 1685855998 90.66.179.60 62680 typ srflx raddr 192.168.1.10 rport 62680 generation 0 network-id 2
a=candidate:2922352299 1 tcp 1518283007 2a01:cb14:7c1:7f00:1d76:e7d4:3237:e96f 9 typ host tcptype active generation 0 network-id 3
a=candidate:3921437950 1 tcp 1518217471 2a01:cb14:7c1:7f00:f961:60c1:70f1:25a0 9 typ host tcptype active generation 0 network-id 4
a=candidate:4233069003 1 tcp 1518149375 192.168.56.1 9 typ host tcptype active generation 0 network-id 1
a=candidate:3179889176 1 tcp 1518083839 192.168.1.10 9 typ host tcptype active generation 0 network-id 2
a=candidate:2922352299 2 tcp 1518283006 2a01:cb14:7c1:7f00:1d76:e7d4:3237:e96f 9 typ host tcptype active generation 0 network-id 3
a=candidate:3921437950 2 tcp 1518217470 2a01:cb14:7c1:7f00:f961:60c1:70f1:25a0 9 typ host tcptype active generation 0 network-id 4
a=candidate:4233069003 2 tcp 1518149374 192.168.56.1 9 typ host tcptype active generation 0 network-id 1
a=candidate:3179889176 2 tcp 1518083838 192.168.1.10 9 typ host tcptype active generation 0 network-id 2
a=ice-ufrag:8hGn
a=ice-pwd:7nXTzHnYYJqjFn/PuIQs0M74
a=ice-options:trickle
a=fingerprint:sha-256 BC:82:61:35:EA:5B:A5:26:05:82:04:D8:59:4C:38:5D:C9:2A:A2:FB:3C:D1:4D:B3:F0:30:51:15:12:35:09:53
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07
a=extmap:9 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:WUvtnpqd3NIpvzakhMqR4QQ308BUCsNHi75U 654d0876-4021-4443-924c-80a0a5395492
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:122 rtx/90000
a=fmtp:122 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:124 H264/90000
a=rtcp-fb:124 goog-remb
a=rtcp-fb:124 transport-cc
a=rtcp-fb:124 ccm fir
a=rtcp-fb:124 nack
a=rtcp-fb:124 nack pli
a=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=124
a=rtpmap:123 H264/90000
a=rtcp-fb:123 goog-remb
a=rtcp-fb:123 transport-cc
a=rtcp-fb:123 ccm fir
a=rtcp-fb:123 nack
a=rtcp-fb:123 nack pli
a=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=123
a=rtpmap:114 red/90000
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000
a=ssrc-group:FID 1470715227 2811192556
a=ssrc:1470715227 cname:YJ7EvDTAqjZBMG5q
a=ssrc:1470715227 msid:WUvtnpqd3NIpvzakhMqR4QQ308BUCsNHi75U 654d0876-4021-4443-924c-80a0a5395492
a=ssrc:1470715227 mslabel:WUvtnpqd3NIpvzakhMqR4QQ308BUCsNHi75U
a=ssrc:1470715227 label:654d0876-4021-4443-924c-80a0a5395492
a=ssrc:2811192556 cname:YJ7EvDTAqjZBMG5q
a=ssrc:2811192556 msid:WUvtnpqd3NIpvzakhMqR4QQ308BUCsNHi75U 654d0876-4021-4443-924c-80a0a5395492
a=ssrc:2811192556 mslabel:WUvtnpqd3NIpvzakhMqR4QQ308BUCsNHi75U
a=ssrc:2811192556 label:654d0876-4021-4443-924c-80a0a5395492
If you wish to interoperate with a SIP agent, this SIP agent, on other side, MUST be compliant with most of the features in the SDP.
The workaround, to call a basic SIP User-Agent without all the features is to have a gateway in the middle (such as asterisk or freeswitch?). However, this solution won't be the best as you will loose the benefit of all features in SDP (end to end encryption, best media path, realtime bandwidth negotiation, video loss management, etc...)
SIP and WebRTC are different protocols (or in WebRTC's case a different family of protocols). WebRTC does not include SIP so there is no way for you to directly connect a SIP client to a WebRTC server or vice-versa.
What you can do is use a server that understands both protocols, such as Asterisk or FreeSWITCH, to act as a bridge.
Use Janus WebRTC Server - janus-webrtc-gateway-as-a-sip-gateway
How to use Janus for for SIP to WEBRTC
I'm trying to establish webrtc connection between browser and media server. But, in reply to Media server offer, Firefox chooses VP8 codec instead H264. Unfortunately, Media server not compatible with VP8 now and supports only H264. How can I make Firefox to use compatible format with Media Server?
Remote SDP (offer):
v=0
o=Flussonic 1468826141836803755 0 IN IP4 0.0.0.0
s=-
t=0 0
a=sendrecv
a=fingerprint:sha-256C7:B3:54:AA:EB:53:21:B0:19:81:D6:29:F8:71:71:F3:1C:36:AC:DA:E9:43:8A:4B:96:C2:31:E3:A2:92:3D:95
a=group:BUNDLE video_t1
a=ice-options:trickle
a=msid-semantic:WMS *
m=video 9 UDP/TLS/RTP/SAVPF 126
c=IN IP4 0.0.0.0
a=bundle-only
a=sendrecv
a=fmtp:126 profile-level-id=64e01f;level-asymmetry-allowed=0;sprop-parameter-sets=Z2QAH6wrUCgC3IAAAAABZ2QAH6wrUCgC3IAAAAABZ2QAH6wrUCgC3IA=,aO48MA==;packetization-mode=1
a=ice-pwd:804089D4B00B2DF987C9B443387755E8
a=ice-ufrag:E39A4B11
a=mid:video_t1
a=msid:{ffe2aa2b-d835-478f-abcb-ab35424e2eb4} {9547d2eb-2fd4-427d-986c-a579646ecd29}
a=rtcp-fb:126 nack pli
a=rtcp-fb:126 ccm fir
a=rtcp-mux
a=rtpmap:126 H264/90000
a=setup:actpass
a=ssrc:4070073620 cname:{ef2d113f-c17c-40ab-bf9c-67c9dcb9eb20}
Local SDP (answer):
v=0
o=mozilla...THIS_IS_SDPARTA-47.0.1 2896632948472560668 0 IN IP4 0.0.0.0
s=-
t=0 0
a=sendrecv
a=fingerprint:sha-256 0D:FC:13:73:48:21:B0:16:79:49:62:FC:64:D6:E2:2B:66:EA:FA:92:5A:15:BD:F4:92:ED:29:22:9E:0A:9E:3F
a=ice-options:trickle
a=msid-semantic:WMS *
m=video 0 UDP/TLS/RTP/SAVPF 120
c=IN IP4 0.0.0.0
a=inactive
a=end-of-candidates
a=rtpmap:120 VP8/90000
Firefox version: 47.0.1
OpenH264 version: 1.5.3
I also meet the same problem.
I tried the followings:
(1) Generate an additional H.264 capability including "profile-level-id=42e01f"
(2) Assign the description above at top of video block of SDP
After test it works - answered SDP with H.264 and both side got the media streams each other.
(Firefox version: 55.0.3, OpenH264 version:1.6)
HOWEVER,
At Chrome (60.0.3112.113) I got "488 Not Acceptable Here" from the answerer,
and I tried to changed the position of added H.264 description to the bottom of video capabilities,
it is solved but for case of FireFox it failed.
So far I still have no idea on this...
Firefox is rejecting your offer, the port in the m-line is set to 0.
You probably need an fmtp line describing your h264 profile level id at least (as well as level asymmetry and packetization mode)
You can make Firefox to prioritize H.264.
In the about::config, search for h264
Set media.peerconnection.video.h264_enabled to true.
Set media.navigator.video.preferred_codec to 126 (this is the code for H.264). Create this entry if doesn't exists.
I'm able to record video+audio using Kurento Media Server. I'm having problems with recording audio-only stream. From How to use kurento-media-server for audio only stream? understand that the answer SDP has to be modified.
Currently I'm adding MediaStream with only audio tracks to the PeerConnection. On the server side before sending back answer SDP, I modify it. I tried removing
anything below (including) m=video
anything below (including) a=mid:video
In both cases the browser-side PeerConnection#signalingState stayed in have-local-offer.
What to change in the answer SDP that the media stream would start flowing and Kurento would start recording audio-only stream?
Here's the original answer SDP (that the removals were made from) from WebRtcEndpoint#processoffer:
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
EDIT:
After a suggestion from kurento google group it appears there's no need for modifying the SDP. At least with Kurento 6.
I got audio-only working (with both audio-only MediaStream from browser and also audio+video MediaStream from browser). For that (example code in Ruby):
Specify MediaProfileSpecType in RecorderEndpoint builderRecorderEndpoint::Builder.new(#pipeline, location).withMediaProfile(org.kurento.client.MediaProfileSpecType::WEBM_AUDIO_ONLY).build()
Specify MediaType when connecting recorder endpoint (#source is WebRtcEndpoint):
#source.connect(#recorder, org.kurento.client.MediaType::AUDIO)
You have to different options here. I'll assume you have a webrtcEp and a recoderEp
Send audio and video from the client, but record only video: You'll be sending both, but have to instruct the recorder to store only audio
RecorderEndpoint recoderEp = new RecorderEndpoint.Builder(pipeline, "URI_HERE").withMediaProfile(MediaProfileSpecType.WEBM_AUDIO_ONLY).build();
webrtcEp.connect(recorderEp, MediaProfile.AUDIO);
Send only audio: Setting the video property of the getUserMediaoptions to false should send only audio. If it doesn't, that means there is a bug in the webrtc endpoint's negotiation in the media server. We have a similar scenario, but only sending video, and it's working. If it doesn't please report that so we can fix it.
EDIT #1: In any case, it is always convenient to specify the type of media that is going to be recorded, or that two endpoint are going to exchange through the connect method, so what is written in the first bullet applies to both.
EDIT #2 You definitely need to specify MediaProfileSpecType when creating the recorder
You can put the port of the Video Stream to Zero. That should indicate that the stream is being rejected or disabled from further use during the session.
m=video 0 RTP/SAVPF 100