class M3u8::Writer

Writer provides generation of text output of playlists in m3u8 format

Attributes

io[RW]

Public Class Methods

new(io) click to toggle source
# File lib/m3u8/writer.rb, line 7
def initialize(io)
  @io = io
end

Public Instance Methods

write(playlist) click to toggle source
# File lib/m3u8/writer.rb, line 11
def write(playlist)
  validate(playlist)
  write_header(playlist)

  playlist.items.each do |item|
    io.puts item.to_s
  end

  write_footer(playlist)
end
write_header(playlist) click to toggle source
# File lib/m3u8/writer.rb, line 27
def write_header(playlist)
  io.puts '#EXTM3U'
  if playlist.master?
    write_master_playlist_header(playlist)
  else
    write_media_playlist_header(playlist)
  end
end

Private Instance Methods

target_duration_format(playlist) click to toggle source
# File lib/m3u8/writer.rb, line 38
def target_duration_format(playlist)
  format('#EXT-X-TARGETDURATION:%d', playlist.target)
end
validate(playlist) click to toggle source
# File lib/m3u8/writer.rb, line 42
def validate(playlist)
  return if playlist.valid?
  raise PlaylistTypeError, 'Playlist is invalid.'
end
write_cache_tag(cache) click to toggle source
# File lib/m3u8/writer.rb, line 47
def write_cache_tag(cache)
  return if cache.nil?

  io.puts "#EXT-X-ALLOW-CACHE:#{cache ? 'YES' : 'NO'}"
end
write_discontinuity_sequence_tag(sequence) click to toggle source
# File lib/m3u8/writer.rb, line 53
def write_discontinuity_sequence_tag(sequence)
  return if sequence.nil?

  io.puts "#EXT-X-DISCONTINUITY-SEQUENCE:#{sequence}"
end
write_independent_segments_tag(independent_segments) click to toggle source
# File lib/m3u8/writer.rb, line 59
def write_independent_segments_tag(independent_segments)
  return unless independent_segments

  io.puts '#EXT-X-INDEPENDENT-SEGMENTS'
end
write_master_playlist_header(playlist) click to toggle source
# File lib/m3u8/writer.rb, line 65
def write_master_playlist_header(playlist)
  write_version_tag(playlist.version)
  write_independent_segments_tag(playlist.independent_segments)
end
write_media_playlist_header(playlist) click to toggle source
# File lib/m3u8/writer.rb, line 70
def write_media_playlist_header(playlist)
  io.puts "#EXT-X-PLAYLIST-TYPE:#{playlist.type}" unless playlist.type.nil?
  write_version_tag(playlist.version)
  write_independent_segments_tag(playlist.independent_segments)
  io.puts '#EXT-X-I-FRAMES-ONLY' if playlist.iframes_only
  io.puts "#EXT-X-MEDIA-SEQUENCE:#{playlist.sequence}"
  write_discontinuity_sequence_tag(playlist.discontinuity_sequence)
  write_cache_tag(playlist.cache)
  io.puts target_duration_format(playlist)
end
write_version_tag(version) click to toggle source
# File lib/m3u8/writer.rb, line 81
def write_version_tag(version)
  return if version.nil?

  io.puts "#EXT-X-VERSION:#{version}"
end