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