Exemple #1
0
    def dumps(self, last_segment):
        output = []
        if last_segment and self.key != last_segment.key:
            output.append(str(self.key))
            output.append('\n')
        else:
            # The key must be checked anyway now for the first segment
            if self.key and last_segment is None:
                output.append(str(self.key))
                output.append('\n')

        if self.discontinuity:
            output.append('#EXT-X-DISCONTINUITY\n')
            if self.program_date_time:
                output.append('#EXT-X-PROGRAM-DATE-TIME:%s\n' %
                              format_date_time(self.program_date_time))
        if self.cue_out:
            output.append('#EXT-X-CUE-OUT-CONT\n')
        output.append('#EXTINF:%s,' % int_or_float_to_string(self.duration))
        if self.title:
            output.append(quoted(self.title))

        output.append('\n')

        if self.byterange:
            output.append('#EXT-X-BYTERANGE:%s\n' % self.byterange)

        output.append(self.uri)

        return ''.join(output)
Exemple #2
0
    def dumps(self):
        '''
        Returns the current m3u8 as a string.
        You could also use unicode(<this obj>) or str(<this obj>)
        '''
        output = ['#EXTM3U']
        if self.is_independent_segments:
            output.append('#EXT-X-INDEPENDENT-SEGMENTS')
        if self.media_sequence:
            output.append('#EXT-X-MEDIA-SEQUENCE:' + str(self.media_sequence))
        if self.allow_cache:
            output.append('#EXT-X-ALLOW-CACHE:' + self.allow_cache.upper())
        if self.version:
            output.append('#EXT-X-VERSION:' + self.version)
        if self.target_duration:
            output.append('#EXT-X-TARGETDURATION:' +
                          int_or_float_to_string(self.target_duration))
        if self.program_date_time is not None:
            output.append('#EXT-X-PROGRAM-DATE-TIME:' + format_date_time(self.program_date_time))
        if not (self.playlist_type is None or self.playlist_type == ''):
            output.append('#EXT-X-PLAYLIST-TYPE:%s' % str(self.playlist_type).upper())
        if self.is_i_frames_only:
            output.append('#EXT-X-I-FRAMES-ONLY')
        if self.is_variant:
            if self.media:
                output.append(str(self.media))
            output.append(str(self.playlists))
            if self.iframe_playlists:
                output.append(str(self.iframe_playlists))
        output.append(str(self.segments))

        if self.is_endlist:
            output.append('#EXT-X-ENDLIST')

        return '\n'.join(output)
Exemple #3
0
    def dumps(self, last_segment=None):
        output = []

        if not last_segment and self.key is not None:
            output.append(str(self.key))
            output.append('\n')

        elif last_segment and self.key != last_segment.key:
            output.append(str(self.key))
            output.append('\n')

        if self.discontinuity:
            output.append('#EXT-X-DISCONTINUITY\n')
            if self.program_date_time:
                output.append('#EXT-X-PROGRAM-DATE-TIME:%s\n' %
                              parser.format_date_time(self.program_date_time))
        if self.cue_out:
            output.append('#EXT-X-CUE-OUT-CONT\n')
        output.append('#EXTINF:%s,' % int_or_float_to_string(self.duration))
        if self.title:
            output.append(quoted(self.title))

        output.append('\n')

        if self.byterange:
            output.append('#EXT-X-BYTERANGE:%s\n' % self.byterange)

        output.append(self.uri)

        return ''.join(output)
Exemple #4
0
    def dumps(self):
        '''
        Returns the current m3u8 as a string.
        You could also use unicode(<this obj>) or str(<this obj>)
        '''
        output = ['#EXTM3U']
        if self.media_sequence > 0:
            output.append('#EXT-X-MEDIA-SEQUENCE:' + str(self.media_sequence))
        if self.allow_cache:
            output.append('#EXT-X-ALLOW-CACHE:' + self.allow_cache.upper())
        if self.version:
            output.append('#EXT-X-VERSION:' + self.version)
        if self.key:
            output.append(str(self.key))
        if self.target_duration:
            output.append('#EXT-X-TARGETDURATION:' + int_or_float_to_string(self.target_duration))
        if self.program_date_time is not None:
            output.append('#EXT-X-PROGRAM-DATE-TIME:' + parser.format_date_time(self.program_date_time))
        if not (self.playlist_type is None or self.playlist_type == ''):
            output.append(
                '#EXT-X-PLAYLIST-TYPE:%s' % str(self.playlist_type).upper())
        if self.is_i_frames_only:
            output.append('#EXT-X-I-FRAMES-ONLY')
        if self.is_variant:
            for media in self.media:
                media_out = []

                if media.uri:
                    media_out.append('URI=' + quoted(media.uri))
                if media.type:
                    media_out.append('TYPE=' + media.type)
                if media.group_id:
                    media_out.append('GROUP-ID=' + quoted(media.group_id))
                if media.language:
                    media_out.append('LANGUAGE=' + quoted(media.language))
                if media.name:
                    media_out.append('NAME=' + quoted(media.name))
                if media.default:
                    media_out.append('DEFAULT=' + media.default)
                if media.autoselect:
                    media_out.append('AUTOSELECT=' + media.autoselect)
                if media.forced:
                    media_out.append('FORCED=' + media.forced)
                if media.characteristics:
                    media_out.append('CHARACTERISTICS=' + quoted(media.characteristics))

                output.append('#EXT-X-MEDIA:' + ','.join(media_out))
            output.append(str(self.playlists))
            if self.iframe_playlists:
                output.append(str(self.iframe_playlists))

        output.append(str(self.segments))

        if self.is_endlist:
            output.append('#EXT-X-ENDLIST')

        return '\n'.join(output)
Exemple #5
0
    def dumps(self, last_segment):
        output = []


        if last_segment and self.key != last_segment.key:
            output.append(str(self.key))
            output.append('\n')
        else:
            # The key must be checked anyway now for the first segment
            if self.key and last_segment is None:
                output.append(str(self.key))
                output.append('\n')

        if last_segment and self.init_section != last_segment.init_section:
            if not self.init_section:
                raise MalformedPlaylistError(
                    "init section can't be None if previous is not None")
            output.append(str(self.init_section))
            output.append('\n')
        else:
            if self.init_section and last_segment is None:
                output.append(str(self.init_section))
                output.append('\n')

        if self.discontinuity:
            output.append('#EXT-X-DISCONTINUITY\n')
        if self.program_date_time:
            output.append('#EXT-X-PROGRAM-DATE-TIME:%s\n' %
                          format_date_time(self.program_date_time))

        if self.cue_out_start:
            output.append('#EXT-X-CUE-OUT{}\n'.format(
                (':' + self.scte35_duration) if self.scte35_duration else ''))
        elif self.cue_out:
            output.append('#EXT-X-CUE-OUT-CONT\n')
        if self.cue_in:
            output.append('#EXT-X-CUE-IN\n')

        if self.parts:
            output.append(str(self.parts))
            output.append('\n')

        if self.uri:
            if self.duration is not None:
                output.append('#EXTINF:%s,' % int_or_float_to_string(self.duration))
                if self.title:
                    output.append(self.title)
                output.append('\n')

            if self.byterange:
                output.append('#EXT-X-BYTERANGE:%s\n' % self.byterange)

            output.append(self.uri)

        return ''.join(output)
Exemple #6
0
    def dumps(self):
        '''
        Returns the current m3u8 as a string.
        You could also use unicode(<this obj>) or str(<this obj>)
        '''
        output = ['#EXTM3U']
        if self.is_independent_segments:
            output.append('#EXT-X-INDEPENDENT-SEGMENTS')
        if self.media_sequence:
            output.append('#EXT-X-MEDIA-SEQUENCE:' + str(self.media_sequence))
        if self.discontinuity_sequence:
            output.append('#EXT-X-DISCONTINUITY-SEQUENCE:{}'.format(
                int_or_float_to_string(self.discontinuity_sequence)))
        if self.allow_cache:
            output.append('#EXT-X-ALLOW-CACHE:' + self.allow_cache.upper())
        if self.version:
            output.append('#EXT-X-VERSION:' + self.version)
        if self.target_duration:
            output.append('#EXT-X-TARGETDURATION:' +
                          int_or_float_to_string(self.target_duration))
        if self.program_date_time is not None:
            output.append('#EXT-X-PROGRAM-DATE-TIME:' +
                          format_date_time(self.program_date_time))
        if not (self.playlist_type is None or self.playlist_type == ''):
            output.append('#EXT-X-PLAYLIST-TYPE:%s' %
                          str(self.playlist_type).upper())
        if self.start:
            output.append(str(self.start))
        if self.is_i_frames_only:
            output.append('#EXT-X-I-FRAMES-ONLY')
        if self.segment_map:
            map_output = []
            if self.segment_map.get('uri'):
                map_output.append('URI=' + quoted(self.segment_map['uri']))
            if self.segment_map.get('byterange'):
                map_output.append('BYTERANGE=' + self.segment_map['byterange'])
            output.append('#EXT-X-MAP:' + ','.join(map_output))
        if self.is_variant:
            if self.media:
                output.append(str(self.media))
            output.append(str(self.playlists))
            if self.iframe_playlists:
                output.append(str(self.iframe_playlists))
        output.append(str(self.segments))

        if self.is_endlist:
            output.append('#EXT-X-ENDLIST')

        return '\n'.join(output)
Exemple #7
0
    def dumps_lines(self, last_segment=None):
        if last_segment:
            if self.key != last_segment.key:
                yield str(self.key)

        if self.discontinuity:
            yield '#EXT-X-DISCONTINUITY'
            if self.program_date_time:
                yield '#EXT-X-PROGRAM-DATE-TIME:%s' % parser.format_date_time(self.program_date_time)
        if self.cue_out:
            yield '#EXT-X-CUE-OUT-CONT'
        yield '#EXTINF:%s,%s' % (int_or_float_to_string(self.duration), quoted(self.title) if self.title else '')

        if self.byterange:
            yield '#EXT-X-BYTERANGE:%s' % self.byterange

        yield self.uri
        yield ''
Exemple #8
0
    def dumps(self):
        '''
        Returns the current m3u8 as a string.
        You could also use unicode(<this obj>) or str(<this obj>)
        '''
        output = ['#EXTM3U']
        if self.is_independent_segments:
            output.append('#EXT-X-INDEPENDENT-SEGMENTS')
        if self.media_sequence:
            output.append('#EXT-X-MEDIA-SEQUENCE:' + str(self.media_sequence))
        if self.allow_cache:
            output.append('#EXT-X-ALLOW-CACHE:' + self.allow_cache.upper())
        if self.version:
            output.append('#EXT-X-VERSION:' + self.version)
        if self.key:
            output.append(str(self.key))
        if self.target_duration:
            output.append('#EXT-X-TARGETDURATION:' +
                          int_or_float_to_string(self.target_duration))
        if self.program_date_time is not None:
            output.append('#EXT-X-PROGRAM-DATE-TIME:' +
                          parser.format_date_time(self.program_date_time))
        if not (self.playlist_type is None or self.playlist_type == ''):
            output.append('#EXT-X-PLAYLIST-TYPE:%s' %
                          str(self.playlist_type).upper())
        if self.is_i_frames_only:
            output.append('#EXT-X-I-FRAMES-ONLY')
        if self.is_variant:
            if self.media:
                output.append(str(self.media))
            output.append(str(self.playlists))
            if self.iframe_playlists:
                output.append(str(self.iframe_playlists))

        output.append(str(self.segments))

        if self.is_endlist:
            output.append('#EXT-X-ENDLIST')

        return '\n'.join(output)
Exemple #9
0
    def dumps(self, last_segment):
        output = []

        if last_segment and self.key != last_segment.key:
            output.append(str(self.key))
            output.append('\n')
        else:
            # The key must be checked anyway now for the first segment
            if self.key and last_segment is None:
                output.append(str(self.key))
                output.append('\n')

        if self.discontinuity:
            output.append('#EXT-X-DISCONTINUITY\n')
        if self.program_date_time:
            output.append('#EXT-X-PROGRAM-DATE-TIME:%s\n' %
                          format_date_time(self.program_date_time))
        if self.cue_out:
            output.append('#EXT-X-CUE-OUT-CONT\n')

        if self.parts:
            output.append(str(self.parts))
            output.append('\n')

        if self.uri:
            if self.duration is not None:
                output.append('#EXTINF:%s,' %
                              int_or_float_to_string(self.duration))
                if self.title:
                    output.append(self.title)
                output.append('\n')

            if self.byterange:
                output.append('#EXT-X-BYTERANGE:%s\n' % self.byterange)

            output.append(self.uri)

        return ''.join(output)
Exemple #10
0
    def dumps(self, last_segment):
        output = []
        if last_segment and self.key != last_segment.key:
            output.append(str(self.key))
            output.append('\n')

        if self.discontinuity:
            output.append('#EXT-X-DISCONTINUITY\n')
            output.append('#EXT-X-PROGRAM-DATE-TIME:%s\n' %
                          parser.format_date_time(self.program_date_time))

        output.append('#EXTINF:%s,' % int_or_float_to_string(self.duration))
        if self.title:
            output.append(quoted(self.title))

        output.append('\n')

        if self.byterange:
            output.append('#EXT-X-BYTERANGE:%s\n' % self.byterange)

        output.append(self.uri)

        return ''.join(output)
Exemple #11
0
    def dumps_lines(self):
        '''
        Returns the current m3u8 as a sequence of lines.
        '''
        yield ['#EXTM3U']
        if self.is_independent_segments:
            yield '#EXT-X-INDEPENDENT-SEGMENTS'
        if self.media_sequence > 0:
            yield '#EXT-X-MEDIA-SEQUENCE:' + str(self.media_sequence)
        if self.allow_cache:
            yield '#EXT-X-ALLOW-CACHE:' + self.allow_cache.upper()
        if self.version:
            yield '#EXT-X-VERSION:' + self.version
        if self.target_duration:
            yield '#EXT-X-TARGETDURATION:' + int_or_float_to_string(self.target_duration)
        if self.program_date_time is not None:
            yield '#EXT-X-PROGRAM-DATE-TIME:' + parser.format_date_time(self.program_date_time)
        if not (self.playlist_type is None or self.playlist_type == ''):
            yield '#EXT-X-PLAYLIST-TYPE:%s' % str(self.playlist_type).upper()
        if self.is_i_frames_only:
            yield '#EXT-X-I-FRAMES-ONLY'
        if self.is_variant:
            if self.media:
                yield str(self.media)
            yield str(self.playlists)
            if self.iframe_playlists:
                yield str(self.iframe_playlists)

        currentKey = None
        for segment in self.segments:
            yield segment.toStr(currentKey)
            currentKey = segment.key
        currentKey = None

        if self.is_endlist:
            yield '#EXT-X-ENDLIST'
Exemple #12
0
    def dumps(self, last_segment):
        output = []


        if last_segment and self.key != last_segment.key:
            output.append(str(self.key))
            output.append('\n')
        else:
            # The key must be checked anyway now for the first segment
            if self.key and last_segment is None:
                output.append(str(self.key))
                output.append('\n')

        if last_segment and self.init_section != last_segment.init_section:
            if not self.init_section:
                raise MalformedPlaylistError(
                    "init section can't be None if previous is not None")
            output.append(str(self.init_section))
            output.append('\n')
        else:
            if self.init_section and last_segment is None:
                output.append(str(self.init_section))
                output.append('\n')

        if self.discontinuity:
            output.append('#EXT-X-DISCONTINUITY\n')
        if self.program_date_time:
            output.append('#EXT-X-PROGRAM-DATE-TIME:%s\n' %
                          format_date_time(self.program_date_time))

        if len(self.dateranges):
            output.append(str(self.dateranges))
            output.append('\n')

        if self.cue_out_start:
            output.append('#EXT-X-CUE-OUT{}\n'.format(
                (':' + self.scte35_duration) if self.scte35_duration else ''))
        elif self.cue_out:
            output.append('#EXT-X-CUE-OUT-CONT\n')
        if self.cue_in:
            output.append('#EXT-X-CUE-IN\n')

        if self.parts:
            output.append(str(self.parts))
            output.append('\n')

        if self.uri:
            if self.extra_tags:
                for tag in self.extra_tags:
                    output.append(tag)
                    output.append('\n')

            if self.duration is not None:
                output.append('#EXTINF:%s,' % number_to_string(self.duration))
                if self.channel_number:
                    output.append('%s - ' % number_to_string(self.channel_number))
                if self.title:
                    output.append(self.title)
                output.append('\n')

            if self.icon_url is not None or self.xmltv_id is not None or self.language is not None or len(self.tags) > 0:
                #EXTTV:tag[,tag,tag...];language;XMLTV id[;icon URL]

                output.append('#EXTTV:%s;%s;%s' % (
                    ",".join(self.tags),
                    self.language if self.language is not None else "",
                    self.xmltv_id if self.xmltv_id is not None else ""
                ))
                if self.icon_url is not None:
                    output.append(';%s' % self.icon_url)
                output.append('\n')

            if self.byterange:
                output.append('#EXT-X-BYTERANGE:%s\n' % self.byterange)

            if self.gap_tag:
                output.append('#EXT-X-GAP\n')

            output.append(self.uri)

        return ''.join(output)
Exemple #13
0
    def dumps(self, last_segment):
        output = []

        if last_segment and self.key != last_segment.key:
            output.append(str(self.key))
            output.append('\n')
        else:
            # The key must be checked anyway now for the first segment
            if self.key and last_segment is None:
                output.append(str(self.key))
                output.append('\n')

        if last_segment and self.init_section != last_segment.init_section:
            if not self.init_section:
                raise MalformedPlaylistError(
                    "init section can't be None if previous is not None")
            output.append(str(self.init_section))
            output.append('\n')
        else:
            if self.init_section and last_segment is None:
                output.append(str(self.init_section))
                output.append('\n')

        if self.discontinuity:
            output.append('#EXT-X-DISCONTINUITY\n')
        if self.program_date_time:
            output.append('#EXT-X-PROGRAM-DATE-TIME:%s\n' %
                          format_date_time(self.program_date_time))

        if len(self.dateranges):
            output.append(str(self.dateranges))
            output.append('\n')

        if self.cue_out_start:
            output.append('#EXT-X-CUE-OUT{}\n'.format((
                ':' + self.scte35_duration) if self.scte35_duration else ''))
        elif self.cue_out:
            output.append('#EXT-X-CUE-OUT-CONT\n')
        if self.cue_in:
            output.append('#EXT-X-CUE-IN\n')

        if self.parts:
            output.append(str(self.parts))
            output.append('\n')

        if self.uri:
            if self.duration is not None:
                props_dumped = ''
                if self.additional_props:
                    props_dumped = ' '.join(
                        '{0}="{1}"'.format(key, value)
                        for key, value in self.additional_props.items())
                    props_dumped = " {0}".format(props_dumped)

                output.append('#EXTINF:%s%s,' %
                              (number_to_string(self.duration), props_dumped))
                if self.title:
                    output.append(self.title)
                output.append('\n')

            if self.byterange:
                output.append('#EXT-X-BYTERANGE:%s\n' % self.byterange)

            if self.gap_tag:
                output.append('#EXT-X-GAP\n')

            if self.grp:
                output.append("{}:{}\n".format(extgrp, self.grp))

            if self.vlcopt:
                for item in self.vlcopt:
                    output.append("{}:{}\n".format(extvlcopt, item))

            output.append(self.uri)

        return ''.join(output)