И это всё МОЁ

Как устанавливается связь между 2 клиентами. Они обмениваются SDP, в котором описаны все поддерживаемые ими аудио\видео кодеки, а также уточненными параметрами этих кодеков. Вопрос в том, как именно выбирается кодек, если их перечислено несколько.

Вот допустим такая схема: pc1(только передает sendonly), p2(только принимает). pc1 генерирует SDP(createOffer) и передает его pc2. Как pc2 понимает каким именно кодеком будет кодировать поток pc1?

Пример реального SDP, который генерирует Chrome

c=IN IP4 0.0.0.0
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
a=sendonly
a=rtpmap:111 opus/48000/2
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
...
m=video 9 UDP/TLS/RTP/SAVPF 108 96 98 100 102 104 106 110 112 97 99 101 103 105 107 109 111
...
a=rtpmap:108 H264/90000
a=rtpmap:96 VP8/90000
a=rtpmap:98 VP9/90000
a=rtpmap:100 VP9/90000
a=fmtp:100 profile-id=2
a=rtpmap:102 H264/90000


a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=fmtp:104 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
...
a=ssrc-group:FID 3916163788 593508736
a=ssrc:3916163788 cname:p2nRRSLsnzsCF8Xo
a=ssrc:3916163788 msid:9kHOR4nvbuRqbb0GWVQiybJbgMiOilZHabEW 69e2e9ce-ccc2-414c-8336-71e54f24fd62
a=ssrc:3916163788 mslabel:9kHOR4nvbuRqbb0GWVQiybJbgMiOilZHabEW
a=ssrc:3916163788 label:69e2e9ce-ccc2-414c-8336-71e54f24fd62
a=ssrc:593508736 cname:p2nRRSLsnzsCF8Xo
a=ssrc:593508736 msid:9kHOR4nvbuRqbb0GWVQiybJbgMiOilZHabEW 69e2e9ce-ccc2-414c-8336-71e54f24fd62
a=ssrc:593508736 mslabel:9kHOR4nvbuRqbb0GWVQiybJbgMiOilZHabEW
a=ssrc:593508736 label:69e2e9ce-ccc2-414c-8336-71e54f24fd62


Как видно из SDP, поддерживаемые аудио\видео кодеки перечислены в
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
m=video 9 UDP/TLS/RTP/SAVPF 108 96 98 100 102 104 106 110 112 97 99 101 103 105 107 109 111


В частности audio в порядке приоритета
opus/48000/2
ISAC/16000
ISAC/32000
...


Видео
H264/90000(level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f)
VP8/90000
VP9/90000
VP9/90000(profile-id=2)
H264/90000(level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f)
...


Как приемник (pc2) поймет какой именно кодек выбрал кодировщик(pc1)? В этом частном случае были выбраны первые кодеки (opus и H264). Но ведь перечислены и другие. Если кодек выбирается тупо первым из перечисления, то зачем тогда описывать другие? Не понятно








 , , ,