@@ -22,7 +22,8 @@ defmodule LiveExWebRTC.Publisher do
22
22
* `streams:audio:#{publisher_id}:#{audio_track_id}` - for receiving audio packets
23
23
* `streams:video:#{publisher_id}:#{video_track_id}:#{layer}` - for receiving video packets.
24
24
The message is in form of `{:live_ex_webrtc, :video, "l" | "m" | "h", ExRTP.Packet.t()}` or
25
- `{:live_ex_webrtc, :audio, ExRTP.Packet.t()}`
25
+ `{:live_ex_webrtc, :audio, ExRTP.Packet.t()}`. Packets for non-simulcast video tracks are always
26
+ sent with "h" identifier.
26
27
* `streams:info:#{publisher.id}"` - for receiving information about publisher tracks and their layers.
27
28
The message is in form of: `{:live_ex_webrtc, :info, audio_track :: ExWebRTC.MediaStreamTrack.t(), video_track :: ExWebRTC.MediaStreamTrack.t()}`.
28
29
* `publishers:#{publisher_id}` for sending keyframe request.
@@ -126,6 +127,7 @@ defmodule LiveExWebRTC.Publisher do
126
127
@ type on_packet ::
127
128
( publisher_id :: String . t ( ) ,
128
129
packet_type :: :audio | :video ,
130
+ layer :: nil | "l" | "m" | "h" ,
129
131
packet :: ExRTP.Packet . t ( ) ,
130
132
socket :: Phoenix.LiveView.Socket . t ( ) ->
131
133
packet :: ExRTP.Packet . t ( ) )
@@ -510,6 +512,7 @@ defmodule LiveExWebRTC.Publisher do
510
512
socket =
511
513
receive do
512
514
{ ^ ref , % Publisher { id: ^ pub_id } = publisher } ->
515
+ Process . send_after ( self ( ) , :streams_info , 1000 )
513
516
codecs = publisher . video_codecs || PeerConnection.Configuration . default_video_codecs ( )
514
517
publisher = % Publisher { publisher | simulcast_supported?: simulcast_supported? ( codecs ) }
515
518
assign ( socket , publisher: publisher )
@@ -548,15 +551,15 @@ defmodule LiveExWebRTC.Publisher do
548
551
def handle_info ( { :ex_webrtc , _pc , { :rtp , track_id , rid , packet } } , socket ) do
549
552
% { publisher: publisher } = socket . assigns
550
553
551
- kind =
554
+ { kind , rid } =
552
555
case publisher do
553
- % Publisher { video_track: % { id: ^ track_id } } -> :video
554
- % Publisher { audio_track: % { id: ^ track_id } } -> :audio
556
+ % Publisher { video_track: % { id: ^ track_id } } -> { :video , rid || "h" }
557
+ % Publisher { audio_track: % { id: ^ track_id } } -> { :audio , nil }
555
558
end
556
559
557
560
packet =
558
561
if publisher . on_packet ,
559
- do: publisher . on_packet . ( publisher . id , kind , packet , socket ) ,
562
+ do: publisher . on_packet . ( publisher . id , kind , rid , packet , socket ) ,
560
563
else: packet
561
564
562
565
if publisher . record? , do: Recorder . record ( publisher . recorder , track_id , nil , packet )
@@ -565,7 +568,7 @@ defmodule LiveExWebRTC.Publisher do
565
568
case kind do
566
569
:audio -> { "" , { :live_ex_webrtc , kind , packet } }
567
570
# for non simulcast tracks, push everything with "h" identifier
568
- :video -> { ":#{ rid || "h" } " , { :live_ex_webrtc , kind , rid || "h" , packet } }
571
+ :video -> { ":#{ rid } " , { :live_ex_webrtc , kind , rid , packet } }
569
572
end
570
573
571
574
PubSub . broadcast ( publisher . pubsub , "streams:#{ kind } :#{ publisher . id } :#{ track_id } #{ layer } " , msg )
@@ -681,8 +684,6 @@ defmodule LiveExWebRTC.Publisher do
681
684
video_track: video_track
682
685
}
683
686
684
- Process . send_after ( self ( ) , :streams_info , 1_000 )
685
-
686
687
{ :noreply ,
687
688
socket
688
689
|> assign ( publisher: new_publisher )
0 commit comments