| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | #!/usr/bin/env python3  # -*- coding: utf-8 -*-  """@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.@AUTHOR: ASJRD018@NAME: Ansjer@software: PyCharm@DATE: 2018/6/4 13:42@Version: python3.6@MODIFY DECORD:ansjer dev@file: m3u8generate.py@Contact: chanjunkai@163.com"""import logginglogger = logging.getLogger(__name__)class PlaylistGenerator(object):    def __init__(self, playlist_entries=None, version=3):        if playlist_entries == None:            # raise StandardError            pass        self.end_playlist = True        self.playlist_entries = playlist_entries        self.version = version        self.sequence = 0        self.duration = self.duration()    def _generate_playlist(self):        playlist = "{}\n{}{}".format(self._m3u8_header_template(), self._generate_playlist_entries(), self._end_list())        return playlist    def _generate_playlist_entries(self):        playlist = ""        for entry in self.playlist_entries:            playlist += "#EXTINF:{duration},\n{media}\n".format(duration=float(entry['duration']), media=(entry['name']))        return playlist.replace(" ", "")    def _generate(self):        return self._generate_playlist()    def _m3u8_header_template(self):        header = "#EXTM3U\n#EXT-X-VERSION:{version}\n#EXT-X-TARGETDURATION:{duration}\n#EXT-X-PLAYLIST-TYPE:VOD".format(version=self.version,duration=self.duration).strip()        # header = "#EXTM3U\n#EXT-X-VERSION:{version}\n#EXT-X-MEDIA-SEQUENCE:{sequence}\n#EXT-X-TARGETDURATION:{duration}\n#EXT-X-PLAYLIST-TYPE:VOD".format(version=self.version, sequence=self.sequence, duration=self.duration).strip()        # if self.end_playlist:        #     return "{}\n#EXT-X-ENDLIST".format(header)        # else:        #     return header        return header    def _end_list(self):        return "#EXT-X-ENDLIST"    def duration(self):        duration_total = 0        for entry in self.playlist_entries:            if 'duration' in entry:                try:                    duration_total += float(entry['duration'])                except Exception as e:                    logger.exception(e)        return duration_total    def generate(self):        """        This is a proxy for _generate makes it        difficult to edit the real method for future.        """        return self._generate()## playlist_entries = [#     {#         'name':  "Awesomevideo_001.mp4",#         'duration': '10.04',#     },#     {#         'name': "xxx.ts",#         'duration': '30'#     }## ]# playlist = PlaylistGenerator(playlist_entries).generate()# ## print(playlist)
 |