class_docstr: WebGear is a powerful ASGI Video-Broadcaster API ideal for transmitting Motion-JPEG-frames from a single source to multiple recipients via the browser.
  
  WebGear API works on Starlette's ASGI application and provides a highly extensible and flexible async wrapper around its complete framework. WebGear can
  flexibly interact with Starlette's ecosystem of shared middleware, mountable applications, Response classes, Routing tables, Static Files, Templating
  engine(with Jinja2), etc.
  
  WebGear API uses an intraframe-only compression scheme under the hood where the sequence of video-frames are first encoded as JPEG-DIB (JPEG with Device-Independent Bit compression)
  and then streamed over HTTP using Starlette's Multipart Streaming Response and a Uvicorn ASGI Server. This method imposes lower processing and memory requirements, but the quality
  is not the best, since JPEG compression is not very efficient for motion video.
  
  In layman's terms, WebGear acts as a powerful Video Broadcaster that transmits live video-frames to any web-browser in the network. Additionally, WebGear API also provides internal
  wrapper around VideoGear, which itself provides internal access to both CamGear and PiGear APIs, thereby granting it exclusive power for transferring frames incoming from any source to the network.
class_docstr_tok: ["WebGear","is","a","powerful","ASGI","Video-Broadcaster","API","ideal","for","transmitting","Motion-JPEG-frames","from","a","single","source","to","multiple","recipients","via","the","browser",".","WebGear","API","works","on","Starlette","'s","ASGI","application","and","provides","a","highly","extensible","and","flexible","async","wrapper","around","its","complete","framework",".","WebGear","can","flexibly","interact","with","Starlette","'s","ecosystem","of","shared","middleware",",","mountable","applications",",","Response","classes",",","Routing","tables",",","Static","Files",",","Templating","engine","(","with","Jinja2",")",",","etc",".","WebGear","API","uses","an","intraframe-only","compression","scheme","under","the","hood","where","the","sequence","of","video-frames","are","first","encoded","as","JPEG-DIB","(","JPEG","with","Device-Independent","Bit","compression",")","and","then","streamed","over","HTTP","using","Starlette","'s","Multipart","Streaming","Response","and","a","Uvicorn","ASGI","Server",".","This","method","imposes","lower","processing","and","memory","requirements",",","but","the","quality","is","not","the","best",",","since","JPEG","compression","is","not","very","efficient","for","motion","video",".","In","layman","'s","terms",",","WebGear","acts","as","a","powerful","Video","Broadcaster","that","transmits","live","video-frames","to","any","web-browser","in","the","network",".","Additionally",",","WebGear","API","also","provides","internal","wrapper","around","VideoGear",",","which","itself","provides","internal","access","to","both","CamGear","and","PiGear","APIs",",","thereby","granting","it","exclusive","power","for","transferring","frames","incoming","from","any","source","to","the","network","."]
docstr: Implements a Callable to be run on application shutdown
docstr_tok: ["Implements","a","Callable","to","be","run","on","application","shutdown"]
code: def shutdown(self):
      """
      Implements a Callable to be run on application shutdown
      """
      if not (self.__stream is None):
          self.__logging and logger.debug("Closing Video Streaming.")
          # stops producer
          self.__isrunning = False
          # stops VideoGear stream
          self.__stream.stop()
          # prevent any re-iteration
          self.__stream = None
  
file_path: vidgear/vidgear/gears/asyncio/webgear.py
imports: import os
  import asyncio
  import inspect
  import numpy
  import logging
  from os.path import expanduser
  from .helper import reducer, generate_webdata, create_blank_frame
  from ..helper import logger_handler, retrieve_best_interpolation, import_dependency_safe, logcurr_vidgear_ver
  from ..videogear import VideoGear
label_desc: Use image node_id 3 for calling the WebGear obj's underlying member method code with example usage: obj.shutdown() without return types