How to generate multiple rtpmap for video/audio capabilities on SDP offer for peer via gstreamer webrtcbin (gst_parse_launch(2) pipeline)? I mean somehow describe in offer which codecs supported by initiator.
I have tried to concatenate resources via "tee", actually on offer. I've got multiple video resources, also the answer looks like good for me, but gst-plugins-bad parser for answer had rejected it with error:
WARN webrtcbin gstwebrtcbin.c:5857:_set_description_task:<sendrecv> returning error: media 1 is missing or contains an empty ice-ufrag attribute
Actual pipeline:
"webrtcbin name=sendrecv "
"v4l2src device=/dev/video1 io-mode=dmabuf ! videoflip method=rotate-180 "
"! video/x-raw,framerate=30/1,width=640,height=480 ! videoscale ! videoconvert "
"! tee name=vEncTee "
"vEncTee. ! queue ! openh264enc usage-type=camera enable-frame-skip=0 multi-thread=4 qos=1 enable-denoise=1 slice-mode=auto complexity=high "
"! video/x-h264,level=(string)3.2,profile=baseline ! h264parse ! rtph264pay ! queue ! sendrecv. "
"vEncTee. ! queue ! vp8enc deadline=1 end-usage=vbr cpu-used=4 threads=4 target-bitrate=0 ! rtpvp8pay ! queue ! sendrecv. "
"alsasrc device=\"hw:0\\,0\" "
//"! audio/x-raw,format=S16LE,rate=8000 "
"! audioconvert ! audioresample ! mulawenc ! rtppcmupay ! "
"queue ! sendrecv. "
Actual generated offer:
v=0
o=- 3421118797864115191 0 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-options:trickle
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=setup:actpass
a=ice-ufrag:XXXXX
a=ice-pwd:XXXXX
a=rtcp-mux
a=rtcp-rsize
a=sendrecv
a=rtpmap:96 H264/90000
a=rtcp-fb:96 nack pli
a=rtcp-fb:96 transport-cc
a=framerate:30
a=fmtp:96 packetization-mode=1;sprop-parameter-sets=Z0LAIIyNQOBKyywDwiEagA==,aM48gA==;profile-level-id=42c020;level-asymmetry-allowed=1
a=ssrc:XXXXX msid:userXXXXX@host-XXXXX webrtctransceiver0
a=ssrc:XXXXX cname:userXXXXX@host-XXXXX
a=mid:video0
a=fingerprint:sha-256 XXXXX
a=rtcp-mux-only
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=setup:actpass
a=ice-ufrag:XXXXX
a=ice-pwd:XXXXX
a=rtcp-mux
a=rtcp-rsize
a=sendrecv
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 nack pli
a=rtcp-fb:96 transport-cc
a=framerate:30
a=ssrc:XXXXX msid:userXXXXX@host-XXXXX webrtctransceiver1
a=ssrc:XXXXX cname:userXXXXX@host-XXXXX
a=mid:video1
a=fingerprint:sha-256 XXXXX
a=rtcp-mux-only
m=audio 9 UDP/TLS/RTP/SAVPF 0
c=IN IP4 0.0.0.0
a=setup:actpass
a=ice-ufrag:XXXXX
a=ice-pwd:XXXXX
a=rtcp-mux
a=rtcp-rsize
a=sendrecv
a=rtpmap:0 PCMU/8000
a=rtcp-fb:0 transport-cc
a=ssrc:XXXXX msid:userXXXXX@host-XXXXX webrtctransceiver2
a=ssrc:XXXXX cname:userXXXXX@host-XXXXX
a=mid:audio2
a=fingerprint:sha-256 XXXXX
a=rtcp-mux-only
Actual answer:
v=0
o=- 6557650022944818593 2 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS com.XXXXX
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:5o+B
a=ice-pwd:XXXXX
a=ice-options:trickle renomination
a=fingerprint:sha-256 XXXXX
a=setup:active
a=mid:video0
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 nack pli
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
m=video 0 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=mid:video1
**a=inactive**
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 nack pli
m=audio 9 UDP/TLS/RTP/SAVPF 0
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:Q3TK
a=ice-pwd:XXXXX
a=ice-options:trickle renomination
a=fingerprint:sha-256 XXXXX
a=setup:active
a=mid:audio2
a=sendrecv
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=ssrc:XXXXX cname:XXXXX
a=ssrc:XXXXX msid:com.XXXXX
a=ssrc:XXXXX mslabel:com.XXXXX
a=ssrc:XXXXX label:com.XXXXX
I can see the reason of bad parsing result, that is no ice-ufrag in video1 media resource and on answer. I can see some a=inactive on video1 resource. I think, that is regarding bad offer generation. I think my way is wrong, can someone help me on this question, how to generate offer correctly?