def fmt_streams(self): """Returns a list of streams if they have been initialized. If the streams have not been initialized, finds all relevant streams and initializes them. """ self.check_availability() if self._fmt_streams: return self._fmt_streams self._fmt_streams = [] # https://github.com/pytube/pytube/issues/165 stream_maps = ["url_encoded_fmt_stream_map"] if "adaptive_fmts" in self.player_config_args: stream_maps.append("adaptive_fmts") # unscramble the progressive and adaptive stream manifests. for fmt in stream_maps: if not self.age_restricted and fmt in self.vid_info: extract.apply_descrambler(self.vid_info, fmt) extract.apply_descrambler(self.player_config_args, fmt) extract.apply_signature(self.player_config_args, fmt, self.js) # build instances of :class:`Stream <Stream>` # Initialize stream objects stream_manifest = self.player_config_args[fmt] for stream in stream_manifest: video = Stream( stream=stream, player_config_args=self.player_config_args, monostate=self.stream_monostate, ) self._fmt_streams.append(video) self.stream_monostate.title = self.title self.stream_monostate.duration = self.length return self._fmt_streams
def initialize_stream_objects(self, fmt: str) -> None: """Convert manifest data to instances of :class:`Stream <Stream>`. Take the unscrambled stream data and uses it to initialize instances of :class:`Stream <Stream>` for each media stream. :param str fmt: Key in stream manifest (``ytplayer_config``) containing progressive download or adaptive streams (e.g.: ``url_encoded_fmt_stream_map`` or ``adaptive_fmts``). :rtype: None """ stream_manifest = self.player_config_args[fmt] for stream in stream_manifest: video = Stream( stream=stream, player_config_args=self.player_config_args, monostate=self.stream_monostate, ) self.fmt_streams.append(video)
def _download(stream: Stream) -> None: print("\n{fn} | {fs} bytes".format(fn=stream.default_filename, fs=stream.filesize)) stream.download() sys.stdout.write("\n")
def _download(stream: Stream, target: Optional[str] = None) -> None: filesize_megabytes = stream.filesize // 1048576 print(f"{stream.default_filename} | {filesize_megabytes} MB") stream.download(output_path=target) sys.stdout.write("\n")