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 logging
- logger = 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)
|