Sha256: c02b9d78fba59c23274cc84ad38f566a4b3fef5074ac20077a4d2de0b21c75b4
Contents?: true
Size: 2 KB
Versions: 3
Compression:
Stored size: 2 KB
Contents
module M3u8 class PlaylistItem attr_accessor :program_id, :width, :height, :codecs, :bitrate, :playlist, :audio, :level, :profile MISSING_CODEC_MESSAGE = 'Audio or video codec info should be provided.' def initialize(params = {}) params.each do |key, value| instance_variable_set("@#{key}", value) end end def resolution return if width.nil? "#{width}x#{height}" end def codecs return @codecs unless @codecs.nil? audio_codec = audio_codec audio video_codec = video_codec profile, level if video_codec.nil? return audio_codec else if audio_codec.nil? return video_codec else return "#{video_codec},#{audio_codec}" end end end def to_s validate "#EXT-X-STREAM-INF:PROGRAM-ID=#{program_id},#{resolution_format}" + %(CODECS="#{codecs}",BANDWIDTH=#{bitrate}\n#{playlist}) end private def validate fail MissingCodecError, MISSING_CODEC_MESSAGE if codecs.nil? end def resolution_format return if resolution.nil? "RESOLUTION=#{resolution}," end def audio_codec(audio) return if audio.nil? return 'mp4a.40.2' if audio.downcase == 'aac-lc' return 'mp4a.40.5' if audio.downcase == 'he-aac' return 'mp4a.40.34' if audio.downcase == 'mp3' end def video_codec(profile, level) return if profile.nil? || level.nil? profile = profile.downcase return 'avc1.66.30' if profile == 'baseline' && level == 3.0 return 'avc1.42001f' if profile == 'baseline' && level == 3.1 return 'avc1.77.30' if profile == 'main' && level == 3.0 return 'avc1.4d001f' if profile == 'main' && level == 3.1 return 'avc1.4d0028' if profile == 'main' && level == 4.0 return 'avc1.64001f' if profile == 'high' && level == 3.1 return 'avc1.640028' if profile == 'high' && (level == 4.0 || level == 4.1) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
m3u8-0.3.1 | lib/m3u8/playlist_item.rb |
m3u8-0.3.0 | lib/m3u8/playlist_item.rb |
m3u8-0.2.1 | lib/m3u8/playlist_item.rb |