Skip to content

Commit fb10c29

Browse files
authored
Merge branch 'master' into release/v0.2.0
2 parents e64b525 + 1beb189 commit fb10c29

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

lib/ex_hls/demuxing_engine/mpeg_ts.ex

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,37 @@ defmodule ExHLS.DemuxingEngine.MPEGTS do
148148
end
149149
end
150150

151+
defp maybe_read_tden_tag(demuxer, packet_pts) do
152+
withl no_id3_stream:
153+
{id3_track_id, _stream_description} <-
154+
demuxer.pmt.streams
155+
|> Enum.find(fn {_pid, stream_description} ->
156+
stream_description.stream_type == :METADATA_IN_PES
157+
end),
158+
no_id3_data: {[id3], demuxer} <- Demuxer.take(demuxer, id3_track_id),
159+
id3_not_in_timerange: true <- id3.pts <= packet_pts do
160+
{parse_tden_tag(id3.data), demuxer}
161+
else
162+
no_id3_stream: nil -> {nil, demuxer}
163+
no_id3_data: {[], updated_demuxer} -> {nil, updated_demuxer}
164+
id3_not_in_timerange: false -> {nil, demuxer}
165+
end
166+
end
167+
168+
defp parse_tden_tag(payload) do
169+
# UTF-8 encoding
170+
encoding = 3
171+
172+
with {pos, _len} <- :binary.match(payload, "TDEN"),
173+
<<_skip::binary-size(pos), "TDEN", tden::binary>> <- payload,
174+
<<size::integer-size(4)-unit(8), _flags::16, ^encoding::8, text::binary-size(size - 2),
175+
0::8, _rest::binary>> <- tden do
176+
text
177+
else
178+
_error -> nil
179+
end
180+
end
181+
151182
# value returned by Demuxer is represented in nanoseconds
152183
defp packet_ts_to_millis(ts), do: div(ts, 1_000_000)
153184

0 commit comments

Comments
 (0)