pylav.extension.m3u package#
Submodules#
pylav.extension.m3u.base module#
- async pylav.extension.m3u.base.load(self, uri, timeout=None, headers=None, custom_tags_parser=None, http_client=<pylav.extension.m3u.http_client.DefaultHTTPClient object>, verify_ssl=True)[source]#
Retrieves the content from a given URI and returns a M3U8 object. Raises ValueError if invalid content or IOError if request fails.
pylav.extension.m3u.http_client module#
pylav.extension.m3u.mixins module#
pylav.extension.m3u.models module#
- class pylav.extension.m3u.models.ContentSteering(base_uri, server_uri, pathway_id=None)[source]#
Bases:
BasePathMixin
- base_uri#
- uri#
- class pylav.extension.m3u.models.IFramePlaylist(base_uri, uri, iframe_stream_info)[source]#
Bases:
BasePathMixin
- base_uri#
- uri#
- class pylav.extension.m3u.models.InitializationSection(base_uri, uri, byterange=None)[source]#
Bases:
BasePathMixin
- base_uri#
- tag = '#EXT-X-MAP'#
- uri#
- class pylav.extension.m3u.models.Key(method, base_uri, uri=None, iv=None, keyformat=None, keyformatversions=None, **kwargs)[source]#
Bases:
BasePathMixin
- base_uri#
- tag = '#EXT-X-KEY'#
- uri#
- class pylav.extension.m3u.models.M3U8(content=None, base_path=None, base_uri=None, strict=False, custom_tags_parser=None)[source]#
Bases:
object
- allow_cache#
- property base_path#
- property base_uri#
- content_steering#
- data#
- discontinuity_sequence#
- dumps()[source]#
Returns the current m3u8 as a string. You could also use unicode(<this obj>) or str(<this obj>)
- files#
- iframe_playlists#
- is_endlist#
- is_i_frames_only#
- is_independent_segments#
- is_variant#
- keys#
- media#
- media_sequence#
- part_inf#
- playlist_type#
- playlists#
- preload_hint#
- rendition_reports#
- segment_map#
- segments#
- server_control#
- session_data#
- session_keys#
- simple_attributes = (('is_variant', 'is_variant'), ('is_endlist', 'is_endlist'), ('is_i_frames_only', 'is_i_frames_only'), ('target_duration', 'targetduration'), ('media_sequence', 'media_sequence'), ('program_date_time', 'program_date_time'), ('is_independent_segments', 'is_independent_segments'), ('version', 'version'), ('allow_cache', 'allow_cache'), ('playlist_type', 'playlist_type'), ('discontinuity_sequence', 'discontinuity_sequence'))#
- skip#
- start#
- target_duration#
- version#
- class pylav.extension.m3u.models.Media(uri=None, type=None, group_id=None, language=None, name=None, default=None, autoselect=None, forced=None, characteristics=None, channels=None, assoc_language=None, instream_id=None, base_uri=None, **extras)[source]#
Bases:
BasePathMixin
- base_uri#
- uri#
- class pylav.extension.m3u.models.MediaList(iterable=(), /)[source]#
Bases:
TagList
,GroupedBasePathMixin
- property uri#
- class pylav.extension.m3u.models.PartInformation(part_target=None)[source]#
Bases:
object
- part_target#
- class pylav.extension.m3u.models.PartialSegment(base_uri, uri, duration, program_date_time=None, current_program_date_time=None, byterange=None, independent=None, gap=None, dateranges=None, gap_tag=None)[source]#
Bases:
BasePathMixin
- base_uri#
- byterange#
- current_program_date_time#
- dateranges#
- duration#
- gap#
- gap_tag#
- independent#
- program_date_time#
- uri#
- class pylav.extension.m3u.models.PartialSegmentList(iterable=(), /)[source]#
Bases:
list
,GroupedBasePathMixin
- class pylav.extension.m3u.models.Playlist(uri, stream_info, media, base_uri)[source]#
Bases:
BasePathMixin
- base_uri#
- uri#
- class pylav.extension.m3u.models.PlaylistList(iterable=(), /)[source]#
Bases:
TagList
,GroupedBasePathMixin
- class pylav.extension.m3u.models.PreloadHint(type, base_uri, uri, byterange_start=None, byterange_length=None)[source]#
Bases:
BasePathMixin
- base_uri#
- uri#
- class pylav.extension.m3u.models.RenditionReport(base_uri, uri, last_msn, last_part=None)[source]#
Bases:
BasePathMixin
- base_uri#
- uri#
- class pylav.extension.m3u.models.RenditionReportList(iterable=(), /)[source]#
Bases:
list
,GroupedBasePathMixin
- class pylav.extension.m3u.models.Segment(uri=None, base_uri=None, program_date_time=None, current_program_date_time=None, duration=None, title=None, bitrate=None, byterange=None, cue_out=False, cue_out_start=False, cue_in=False, discontinuity=False, key=None, scte35=None, scte35_duration=None, keyobject=None, parts=None, init_section=None, dateranges=None, gap_tag=None, custom_parser_values=None)[source]#
Bases:
BasePathMixin
A video segment from a M3U8 playlist
- uri
a string with the segment uri
- title
title attribute from EXTINF parameter
- program_date_time
Returns the EXT-X-PROGRAM-DATE-TIME as a datetime. This field is only set if EXT-X-PROGRAM-DATE-TIME exists for this segment http://tools.ietf.org/html/draft-pantos-http-live-streaming-07#section-3.3.5
- current_program_date_time
Returns a datetime of this segment, either the value of program_date_time when EXT-X-PROGRAM-DATE-TIME is set or a calculated value based on previous segments’ EXT-X-PROGRAM-DATE-TIME and EXTINF values
- discontinuity
Returns a boolean indicating if a EXT-X-DISCONTINUITY tag exists http://tools.ietf.org/html/draft-pantos-http-live-streaming-13#section-3.4.11
- cue_out_start
Returns a boolean indicating if a EXT-X-CUE-OUT tag exists
- cue_out
Returns a boolean indicating if a EXT-X-CUE-OUT-CONT tag exists Note: for backwards compatibility, this will be True when cue_out_start
is True, even though this tag did not exist in the input, and EXT-X-CUE-OUT-CONT will not exist in the output
- cue_in
Returns a boolean indicating if a EXT-X-CUE-IN tag exists
- scte35
Base64 encoded SCTE35 metadata if available
- scte35_duration
Planned SCTE35 duration
- duration
duration attribute from EXTINF parameter
- base_uri
uri the key comes from in URI hierarchy. ex.: http://example.com/path/to
- bitrate
bitrate attribute from EXT-X-BITRATE parameter
- byterange
byterange attribute from EXT-X-BYTERANGE parameter
- key
Key used to encrypt the segment (EXT-X-KEY)
- parts
partial segments that make up this segment
- dateranges
any dateranges that should precede the segment
- gap_tag
GAP tag indicates that a Media Segment is missing
- custom_parser_values
Additional values which custom_tags_parser might store per segment
- property base_path#
- base_uri#
- uri#
- class pylav.extension.m3u.models.SegmentList(iterable=(), /)[source]#
Bases:
list
,GroupedBasePathMixin
- property uri#
- class pylav.extension.m3u.models.ServerControl(can_skip_until=None, can_block_reload=None, hold_back=None, part_hold_back=None, can_skip_dateranges=None)[source]#
Bases:
object
- class pylav.extension.m3u.models.SessionData(data_id, value=None, uri=None, language=None)[source]#
Bases:
object
- class pylav.extension.m3u.models.SessionKey(method, base_uri, uri=None, iv=None, keyformat=None, keyformatversions=None, **kwargs)[source]#
Bases:
Key
- base_uri#
- tag = '#EXT-X-SESSION-KEY'#
- uri#
- class pylav.extension.m3u.models.Skip(skipped_segments, recently_removed_dateranges=None)[source]#
Bases:
object
pylav.extension.m3u.parser module#
- pylav.extension.m3u.parser.get_segment_custom_value(state, key, default=None)[source]#
Helper function for getting custom values for Segment Are useful with custom_tags_parser
- pylav.extension.m3u.parser.parse(content, strict=False, custom_tags_parser=None)[source]#
Given a M3U8 playlist content returns a dictionary with all data found
- pylav.extension.m3u.parser.remove_quotes(string)[source]#
Remove quotes from string.
- Ex.:
“foo” -> foo ‘foo’ -> foo ‘foo -> ‘foo
pylav.extension.m3u.protocols module#
Module contents#
- class pylav.extension.m3u.M3UParser(client)[source]#
Bases:
object
A wrapper for the M3U parser.
- property client#
The PyLav client.
- async load(uri, timeout=None, headers=None, custom_tags_parser=None, http_client=<pylav.extension.m3u.http_client.DefaultHTTPClient object>, verify_ssl=True)#
Retrieves the content from a given URI and returns a M3U8 object. Raises ValueError if invalid content or IOError if request fails.
- async loads(content, uri=None, custom_tags_parser=None)#
Given a string with a m3u8 content, returns a M3U8 object. Optionally parses a uri to set a correct base_uri on the M3U8 object. Raises ValueError if invalid content