Я искал способ изменить кодек в реализации WebRTC в Chrome, но, похоже, нет способа.
Как изменить используемый по умолчанию кодек (аудио или видео) в соединении WebRTCpeer в Chrome?
Я искал способ изменить кодек в реализации WebRTC в Chrome, но, похоже, нет способа.
Как изменить используемый по умолчанию кодек (аудио или видео) в соединении WebRTCpeer в Chrome?
Да, вы можете изменить кодек на любой, какой захотите... если Chrome его поддерживает. На данный момент в отношении звука поддерживаются только следующие кодеки: PCMA, PCMU, ISAC и OPUS (по умолчанию). Для видео у вас есть VP8 (также H264 в некоторых системах с FireFox).
Чтобы использовать любой из этих кодеков по умолчанию, вы должны изменить свой SDP, прежде чем настраивать его локально в своем одноранговом соединении и отправлять свое предложение/ответ. Я успешно протестировал, заставив Chrome по умолчанию отправлять PCMA вместо OPUS.
Например:
Скажем, у вас есть раздел аудио SDP по умолчанию, который выглядит следующим образом (примечания в скобках не являются частью sdp)
m=audio<media> 49353<port> RTP/SAVPF<proto> 111 103 104 0 8 106 105 13 126 <rtpformats>
c=IN<nettype> IP4<addrtype> 192.168.0.13<address>
a=rtcp:49353<port> IN<nettype> IP4<addresstype> privateIP<connection address>
a=candidate:1204296370 1 udp 2122260223 privateIP 49353 typ host generation 0 <audioIceCandidate>
a=candidate:1204296370 2 udp 2122260223 privateIP 49353 typ host generation 0
a=candidate:155969090 1 tcp 1518280447 privateIP 0 typ host generation 0
a=candidate:155969090 2 tcp 1518280447 privateIP 0 typ host generation 0
a=ice-ufrag:E7VFzFythTIOaQ6X <ice username>
a=ice-pwd:ZMHFqqXEA8JLjItZcRN4FZDJ <ice-password>
a=ice-options:google-ice <iceoptions>
a=fingerprint:sha-256<encryptType> 66:2D:43:3A:31:7B:46:56:50:D7:CC:75:80:79:5D:88:7D:5D:1B:0E:C7:E6:F9:C4:68:6D:51:7F:4B:32:97:A1<print>
a=setup:actpass <dtls setup mode>
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level <extention map>
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv <mediamode>
a=rtcp-mux <says 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:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
Если вы хотите использовать ТОЛЬКО PCMA, вы должны изменить строку m=audio
на следующую: m=audio 49353 RTP/SAVPF 8
таким образом будет учитываться только полезная нагрузка PCMA. Затем вам нужно удалить все строки rtpmap, которые не соответствуют этой полезной нагрузке, то есть любые a=rtpmap:
, где следующий символ НЕ является 8. Если вы установите этот модифицированный sdp локально и отправите его своему узлу (и если они ПОДДЕРЖИВАЮТ PCMA.. .не обязательно должен быть для них по умолчанию, поскольку переговоры заставят использовать PCMA, если вы только предложите его), тогда PCMA будет вашим аудиокодеком, а не OPUS.
Пара отступлений:
createOffer
и createAnswer
однорангового соединения.fmtp
необходимо для h264, так как профили важны и, возможно, sprop-parameter-sets
).