@@ -86,8 +86,8 @@ defmodule LiveExWebRTC.Publisher do
86
86
defstruct id: nil ,
87
87
pc: nil ,
88
88
streaming?: false ,
89
- audio_track_id : nil ,
90
- video_track_id : nil ,
89
+ audio_track : nil ,
90
+ video_track : nil ,
91
91
on_packet: nil ,
92
92
on_connected: nil ,
93
93
pubsub: nil ,
@@ -352,12 +352,20 @@ defmodule LiveExWebRTC.Publisher do
352
352
353
353
@ impl true
354
354
def handle_info ( { :live_ex_webrtc , :keyframe_req , layer } , socket ) do
355
- # FIXME consider non-simulcast case
356
355
% { publisher: publisher } = socket . assigns
357
356
357
+ # Non-simulcast tracks are always sent with "h" identifier
358
+ # Hence, when we receive a keyframe request for "h", we must
359
+ # check whether it's simulcast track or not.
360
+ layer =
361
+ if layer == "h" and publisher . video_track . rids == nil do
362
+ nil
363
+ else
364
+ layer
365
+ end
366
+
358
367
if pc = publisher . pc do
359
- Logger . warning ( "Sending keyframe request: #{ layer } " )
360
- :ok = PeerConnection . send_pli ( pc , publisher . video_track_id , layer )
368
+ :ok = PeerConnection . send_pli ( pc , publisher . video_track . id , layer )
361
369
end
362
370
363
371
{ :noreply , socket }
@@ -368,7 +376,7 @@ defmodule LiveExWebRTC.Publisher do
368
376
% { publisher: publisher } = socket . assigns
369
377
370
378
case publisher do
371
- % Publisher { video_track_id: ^ track_id } ->
379
+ % Publisher { video_track: video_track } when video_track . id == track_id ->
372
380
packet =
373
381
if publisher . on_packet ,
374
382
do: publisher . on_packet . ( publisher . id , :video , packet , socket ) ,
@@ -383,7 +391,7 @@ defmodule LiveExWebRTC.Publisher do
383
391
384
392
{ :noreply , socket }
385
393
386
- % Publisher { audio_track_id: ^ track_id } ->
394
+ % Publisher { audio_track: audio_track } when audio_track . id == track_id ->
387
395
PubSub . broadcast (
388
396
publisher . pubsub ,
389
397
"streams:audio:#{ publisher . id } " ,
@@ -447,8 +455,8 @@ defmodule LiveExWebRTC.Publisher do
447
455
new_publisher = % Publisher {
448
456
publisher
449
457
| pc: pc ,
450
- audio_track_id : audio_track . id ,
451
- video_track_id : video_track . id
458
+ audio_track : audio_track ,
459
+ video_track : video_track
452
460
}
453
461
454
462
{ :noreply ,
0 commit comments