Source code for parsers.BaseParser

#!/usr/bin/env python
# -*- Mode: Python -*-
# -*- encoding: utf-8 -*-
# Copyright (c) Vito Caldaralo <vito.caldaralo@gmail.com>

# This file may be distributed and/or modified under the terms of
# the GNU General Public License version 2 as published by
# the Free Software Foundation.
# This file is distributed without any warranty; without even the implied
# warranty of merchantability or fitness for a particular purpose.
# See "LICENSE" in the source distribution for more information.
import inspect
from twisted.internet import defer

[docs]class BaseParser(object): def __init__(self,url,playlists_type,video_container): self.url = url self.fragment_duration = -1 self.levels = None self.playlists = None self.caps_demuxer = None self.playlists_type = playlists_type self.video_container = video_container self.deferred = defer.Deferred() def __repr__(self): return '<BaseParser-%d>' %id(self)
[docs] def loadPlaylist(self): ''' Called to start the download of the playlists for each level. (It must be implemented for new parser). ''' raise NotImplementedError("Subclass must implement "+inspect.stack()[0][3]+"()")
[docs] def getPlaylists(self): ''' For eache level, gets its playlist with the segments properties (e.g. list of segment url, segments duration etc.) :rtype: list of dictionaries ''' if not self.playlists or not isinstance(self.playlists,list): raise AttributeError("Playlist is empty") return self.playlists
[docs] def getLevels(self): ''' Gets the list of levels. Returns a list of dictionary with rate (in B/s) and resolution for each entry :rtype: list of dictionaries ''' if not self.levels or not isinstance(self.levels,list): raise AttributeError("Video levels is empty. Check the documentation for further details on the structure of this attribute") return self.levels
[docs] def getFragmentDuration(self): ''' Gets the nominal fragment duration in seconds for the current playlist :rtype: int ''' if self.fragment_duration < 0: raise AttributeError("Fragment duration has not been set yet.") return self.fragment_duration
[docs] def getVideoContainer(self): ''' Gets the video container type (e.g. MP4 or MPEGTS) :rtype: str ''' return self.video_container
[docs] def getPlaylistType(self): ''' Gets the playlist type (e.g. HLS or DASH) :rtype: str ''' return self.playlists_type #FIXME on level switch for mp4 segments
def _getCapsDemuxer(self): return self.caps_demuxer