Видеокодер webrtc, синхронизирующийся через sdp

У меня есть приложение webrtc, которое использует h264 / 90000 для потокового видео.
Мое предложение sdp

`type: offer, sdp: v=0
o=- 6487162123143986811 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video data
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:6END
a=ice-pwd:qh8ZHjSd/8EiNkVnrfm0etc6
a=ice-options:trickle
a=fingerprint:sha-256 7D:A0:DD:31:74:EC:CC:29:71:EB:02:75:81:0A:98:48:50:31:A3:FF:2E:1E:16:04:12:AF:61:E8:1E:38:10:F2
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 stereo=1;sprop-stereo=1;cbr=0
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
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 124 127 123 125 107 108
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:6END
a=ice-pwd:qh8ZHjSd/8EiNkVnrfm0etc6
a=ice-options:trickle
a=fingerprint:sha-256 7D:A0:DD:31:74:EC:CC:29:71:EB:02:75:81:0A:98:48:50:31:A3:FF:2E:1E:16:04:12:AF:61:E8:1E:38:10:F2
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:3gpp:video-orientation
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 H264/90000
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-fb:100 transport-cc
a=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:102 H264/90000
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:124 rtx/90000
a=fmtp:124 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:123 rtx/90000
a=fmtp:123 apt=127
a=rtpmap:125 red/90000
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 ulpfec/90000
m=application 9 DTLS/SCTP 5000
c=IN IP4 0.0.0.0
a=ice-ufrag:6END
a=ice-pwd:qh8ZHjSd/8EiNkVnrfm0etc6
a=ice-options:trickle
a=fingerprint:sha-256 7D:A0:DD:31:74:EC:CC:29:71:EB:02:75:81:0A:98:48:50:31:A3:FF:2E:1E:16:04:12:AF:61:E8:1E:38:10:F2
a=setup:actpass
a=mid:data
a=sctpmap:5000 webrtc-datachannel 1024`

H264 / 90000 имеет 3 закусочных.
a = rtpmap: 100 H264 / 90000, a = rtpmap: 102 H264 / 90000 и a = rtpmap: 127 H264 / 90000

На стороне сервера, прежде чем установить этот sdp для удаленного описания, я обновил

m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 124 127 123 125 107 108
в

m=video 9 UDP/TLS/RTP/SAVPF 100 96 97 98 99 101 102 124 127 123 125 107 108

чтобы убедиться, что он использует a=rtpmap:100 H264/90000 запись для видео носителей. Я всегда использую первую запись h264 / 90000 a=rtpmap:100 H264/90000 в качестве видео-медиа.

Этот код работал нормально. Но теперь я получаю розовый экран в моем элементе видео

После создания ответа я получил локальное описание серверной части:
m=video 9 UDP/TLS/RTP/SAVPF 102 96 97 124 125 107 108
Это показывает, что 102 (a = rtpmap: 102 H264 / 90000) используется для видео носителей.
Он показывает полностью розовый экран в браузере. Более того, аудио и канал передачи данных по-прежнему работают нормально.

Пожалуйста, помогите мне узнать, как мне узнать, какая запись h264 / 90000 будет использоваться в локальном описании сервера.

0

Решение

Это работает для меня.

Если кодировщик (который вы хотите использовать) имеет разные значения в sdp, все его значения должны иметь большее предпочтение, чем другие, т. Е. Есть три значения для H264 / 90000, m = video должно иметь значение

m=video 9 UDP/TLS/RTP/SAVPF 100 102 127 96 97 98 99 101 124 123 125 107 108

Один вопрос не решен, поэтому есть три разных значения для H264 / 90000.

0

Другие решения

Предлагается несколько линий H264, поскольку профили кодирования отличаются. Это строка, которая выглядит так:

a=fmtp:125 profile-level-id=42e01f

42e01f обозначает Ограниченный базовый уровень (для получения дополнительной информации об этом, проверьте этот пост на стек переполнения)

Таким образом, если поддерживается несколько профилей для H264, вы увидите несколько a=rtpmap:XXX H264/90000 линии, но с разными profile-level-id:

m=video 17456 RTP/AVP 100 102 127
a=rtpmap:100 H264/90000
a=fmtp:100 profile-level-id=42e00a
:               :
a=rtpmap:102 H264/90000
a=fmtp:102 profile-level-id=42e01f
:               :
a=rtpmap:127 H264/90000
a=fmtp:127 profile-level-id=640c1f
0

По вопросам рекламы [email protected]