@@ -162,8 +162,9 @@ defmodule ExWebRTC.PeerConnection.Configuration do
162
162
# This function doesn't check if rtcp-fb is supported.
163
163
# Instead, `supported_rtcp_fb?` has to be used to filter out
164
164
# rtcp-fb that are not supported.
165
+ # TODO: this function doesn't compare fmtp at all
165
166
Enum . any? ( config . audio_codecs ++ config . video_codecs , fn supported_codec ->
166
- % { supported_codec | rtcp_fbs: codec . rtcp_fbs } == codec
167
+ % { supported_codec | rtcp_fbs: codec . rtcp_fbs , sdp_fmtp_line: codec . sdp_fmtp_line } == codec
167
168
end )
168
169
end
169
170
@@ -228,90 +229,56 @@ defmodule ExWebRTC.PeerConnection.Configuration do
228
229
{ audio_codecs , video_codecs }
229
230
end
230
231
231
- defp update_codecs (
232
- [ % { mime_type: "audio/" <> _ } = codec | sdp_codecs ] ,
233
- audio_codecs ,
234
- video_codecs
235
- ) do
236
- audio_codec =
237
- audio_codecs
238
- |> Stream . with_index ( )
239
- |> Enum . find ( fn { audio_codec , _idx } ->
240
- # For the time of comparision, assume the same payload type and rtcp_fbs.
232
+ defp update_codecs ( [ sdp_codec | sdp_codecs ] , audio_codecs , video_codecs ) do
233
+ type =
234
+ case sdp_codec . mime_type do
235
+ "audio/" <> _ -> :audio
236
+ "video/" <> _ -> :video
237
+ end
238
+
239
+ codecs = if type == :audio , do: audio_codecs , else: video_codecs
240
+
241
+ codec =
242
+ codecs
243
+ |> Enum . with_index ( )
244
+ |> Enum . find ( fn { codec , _idx } ->
245
+ # For the time of comparision, assume the same payload type and rtcp_fbs and fmtp.
241
246
# We don't want to take into account rtcp_fbs as they can be negotiated
242
247
# i.e. we can reject those that are not supported by us.
243
- fmtp =
244
- if audio_codec . sdp_fmtp_line != nil and codec . sdp_fmtp_line != nil do
245
- % FMTP { audio_codec . sdp_fmtp_line | pt: codec . payload_type }
246
- else
247
- audio_codec . sdp_fmtp_line
248
- end
249
-
250
- audio_codec = % RTPCodecParameters {
251
- audio_codec
252
- | payload_type: codec . payload_type ,
253
- sdp_fmtp_line: fmtp ,
254
- rtcp_fbs: codec . rtcp_fbs
248
+ codec = % RTPCodecParameters {
249
+ codec
250
+ | payload_type: sdp_codec . payload_type ,
251
+ sdp_fmtp_line: sdp_codec . sdp_fmtp_line ,
252
+ rtcp_fbs: sdp_codec . rtcp_fbs
255
253
}
256
254
257
- audio_codec == codec
255
+ codec == sdp_codec
258
256
end )
259
257
260
- case audio_codec do
258
+ case codec do
261
259
nil ->
262
260
update_codecs ( sdp_codecs , audio_codecs , video_codecs )
263
261
264
- { audio_codec , idx } ->
265
- audio_codec = % RTPCodecParameters {
266
- audio_codec
267
- | payload_type: codec . payload_type ,
268
- sdp_fmtp_line: codec . sdp_fmtp_line
269
- }
270
-
271
- audio_codecs = List . insert_at ( audio_codecs , idx , audio_codec )
272
- update_codecs ( sdp_codecs , audio_codecs , video_codecs )
273
- end
274
- end
275
-
276
- defp update_codecs (
277
- [ % { mime_type: "video/" <> _ } = codec | sdp_codecs ] ,
278
- audio_codecs ,
279
- video_codecs
280
- ) do
281
- video_codec =
282
- video_codecs
283
- |> Stream . with_index ( )
284
- |> Enum . find ( fn { video_codec , _idx } ->
262
+ { codec , idx } ->
285
263
fmtp =
286
- if video_codec . sdp_fmtp_line != nil and codec . sdp_fmtp_line != nil do
287
- % FMTP { video_codec . sdp_fmtp_line | pt: codec . payload_type }
264
+ if codec . sdp_fmtp_line != nil do
265
+ % { codec . sdp_fmtp_line | pt: sdp_codec . payload_type }
288
266
else
289
- video_codec . sdp_fmtp_line
267
+ nil
290
268
end
291
269
292
- video_codec = % RTPCodecParameters {
293
- video_codec
294
- | payload_type: codec . payload_type ,
295
- sdp_fmtp_line: fmtp ,
296
- rtcp_fbs: codec . rtcp_fbs
270
+ codec = % RTPCodecParameters {
271
+ codec
272
+ | payload_type: sdp_codec . payload_type ,
273
+ sdp_fmtp_line: fmtp
297
274
}
298
275
299
- video_codec == codec
300
- end )
301
-
302
- case video_codec do
303
- nil ->
304
- update_codecs ( sdp_codecs , audio_codecs , video_codecs )
305
-
306
- { video_codec , idx } ->
307
- video_codec = % RTPCodecParameters {
308
- video_codec
309
- | payload_type: codec . payload_type ,
310
- sdp_fmtp_line: codec . sdp_fmtp_line
311
- }
276
+ codecs = List . insert_at ( codecs , idx , codec )
312
277
313
- video_codecs = List . insert_at ( video_codecs , idx , video_codec )
314
- update_codecs ( sdp_codecs , audio_codecs , video_codecs )
278
+ case type do
279
+ :audio -> update_codecs ( sdp_codecs , codecs , video_codecs )
280
+ :video -> update_codecs ( sdp_codecs , audio_codecs , codecs )
281
+ end
315
282
end
316
283
end
317
284
0 commit comments