m3u8generate.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: Ansjer
  7. @software: PyCharm
  8. @DATE: 2018/6/4 13:42
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: m3u8generate.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. import logging
  15. logger = logging.getLogger(__name__)
  16. class PlaylistGenerator(object):
  17. def __init__(self, playlist_entries=None, version=3):
  18. if playlist_entries == None:
  19. # raise StandardError
  20. pass
  21. self.end_playlist = True
  22. self.playlist_entries = playlist_entries
  23. self.version = version
  24. self.sequence = 0
  25. self.duration = self.duration()
  26. def _generate_playlist(self):
  27. playlist = "{}\n{}{}".format(self._m3u8_header_template(), self._generate_playlist_entries(), self._end_list())
  28. return playlist
  29. def _generate_playlist_entries(self):
  30. playlist = ""
  31. for entry in self.playlist_entries:
  32. playlist += "#EXTINF:{duration}\n{media}\n".format(duration=float(entry['duration']), media=(entry['name']))
  33. return playlist.replace(" ", "")
  34. def _generate(self):
  35. return self._generate_playlist()
  36. def _m3u8_header_template(self):
  37. 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()
  38. # 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()
  39. # if self.end_playlist:
  40. # return "{}\n#EXT-X-ENDLIST".format(header)
  41. # else:
  42. # return header
  43. return header
  44. def _end_list(self):
  45. return "#EXT-X-ENDLIST"
  46. def duration(self):
  47. duration_total = 0
  48. for entry in self.playlist_entries:
  49. if 'duration' in entry:
  50. try:
  51. duration_total += float(entry['duration'])
  52. except Exception as e:
  53. logger.exception(e)
  54. return duration_total
  55. def generate(self):
  56. """ This is a proxy for _generate makes it
  57. difficult to edit the real method for future."""
  58. return self._generate()