Skip to content

VidGear v0.1.9

Compare
Choose a tag to compare
@abhiTronix abhiTronix released this 03 Sep 02:42
· 683 commits to master since this release

New Features

  • StreamGear API:
    • New API that automates transcoding workflow for generating Ultra-Low Latency, High-Quality, Dynamic & Adaptive Streaming Formats.
    • Implemented multi-platform , standalone, highly extensible and flexible wrapper around FFmpeg for generating chunked-encoded media segments of the media, and easily accessing almost all of its parameters.
    • API automatically transcodes videos/audio files & real-time frames into a sequence of multiple smaller chunks/segments and also creates a Manifest file.
    • Added initial support for MPEG-DASH (Dynamic Adaptive Streaming over HTTP, ISO/IEC 23009-1).
    • Constructed default behavior in StreamGear, for auto-creating a Primary Stream of same resolution and framerate as source.
    • Added TQDM progress bar in non-debugged output for visual representation of internal processes.
    • Implemented several internal methods for preprocessing FFmpeg and internal parameters for producing streams.
    • Several standalone internal checks to ensure robust performance.
    • New terminate() function to terminate StremGear Safely.
    • New StreamGear Dual Modes of Operation:
      • Implemented Single-Source and Real-time Frames like independent Transcoding Modes.
      • Linked -video_source attribute for activating these modes
      • Single-Source Mode, transcodes entire video/audio file (as opposed to frames by frame) into a sequence of multiple smaller segments for streaming
      • Real-time Frames Mode, directly transcodes video-frames (as opposed to a entire file), into a sequence of multiple smaller segments for streaming
      • Added separate functions, stream() for Real-time Frame Mode and transcode_source() for Single-Source Mode for easy transcoding.
      • Included auto-colorspace detection and RGB Mode like features (extracted from WriteGear), into StreamGear.
    • New StreamGear Parameters:
      • Developed several new parameters such as:
        • output: handles assets directory
        • formats: handles adaptive HTTP streaming format.
        • custom_ffmpeg: handles custom FFmpeg location.
        • stream_params: handles internal and FFmpeg parameter seamlessly.
        • logging: turns logging on or off.
      • New stream_params parameter allows us to exploit almost all FFmpeg parameters and flexibly change its internal settings, and seamlessly generating high-quality streams with its attributes:
        • -streams (list of dictionaries) for building additional streams with -resolution, -video_bitrate & -framerate like sub-attributes.
        • -audio for specifying external audio.
        • -video_source for specifying Single-Source Mode source.
        • -input_framerate for handling input framerate in Real-time Frames Mode.
        • -bpp attribute for handling bits-per-pixels used to auto-calculate video-bitrate.
        • -gop to manually specify GOP length.
        • -ffmpeg_download_path to handle custom FFmpeg download path on windows.
        • -clear_prev_assets to remove any previous copies of SteamGear Assets.
    • New StreamGear docs, MPEG-DASH demo, and recommended DASH players list:
      • Added new StreamGear docs, usage examples, parameters, references, new FAQs.
      • Added Several StreamGear usage examples w.r.t Mode of Operation.
      • Implemented Clappr based on Shaka-Player, as Demo Player.
      • Added Adaptive-dimensional behavior for Demo-player, purely in css.
      • Hosted StreamGear generated DASH chunks on GitHub and served with raw.githack.com.
      • Introduced variable quality level-selector plugin for Clapper Player.
      • Provide various required javascripts and implemented additional functionality for player in extra.js.
      • Recommended tested Online, Command-line and GUI Adaptive Stream players.
      • Implemented separate FFmpeg installation doc for StreamGear API.
      • Reduced rebufferingGoal for faster response.
    • New StreamGear CI tests:
      • Added IO and API initialization CI tests for its Modes.
      • Added various mode Streaming check CI tests.
  • NetGear_Async API:
    • Added new send_terminate_signal internal method.
    • Added WindowsSelectorEventLoopPolicy() for windows 3.8+ envs.
    • Moved Client auto-termination to separate method.
    • Implemented graceful termination with signal API on UNIX machines.
    • Added new timeout attribute for controlling Timeout in Connections.
    • Added missing termination optimizer (linger=0) flag.
    • Several ZMQ Optimizer Flags added to boost performance.
  • WriteGear API:
    • Added support for adding duplicate FFmpeg parameters to output_params:
      • Added new -clones attribute in output_params parameter for handing this behavior..
      • Support to pass FFmpeg parameters as list, while maintaining the exact order it was specified.
      • Built support for zmq.REQ/zmq.REP and zmq.PUB/zmq.SUB patterns in this mode.
      • Added new CI tests debugging this behavior.
      • Updated docs accordingly.
    • Added support for Networks URLs in Compression Mode:
      • output_filename parameter supports Networks URLs in compression modes only
      • Added automated handling of non path/file Networks URLs as input.
      • Implemented new is_valid_url helper method to easily validate assigned URLs value.
      • Validates whether the given URL value has scheme/protocol supported by assigned/installed ffmpeg or not.
      • WriteGear will throw ValueError if -output_filename is not supported.
      • Added related CI tests and docs.
    • Added disable_force_termination attribute in WriteGear to disable force-termination.
  • NetGear API:
    • Added option to completely disable Native Frame-Compression:
      • Checks if any Incorrect/Invalid value is assigned on compression_format attribute.
      • Completely disables Native Frame-Compression.
      • Updated docs accordingly.
  • CamGear API:
    • Added new and robust regex for identifying YouTube URLs.
    • Moved youtube_url_validator to Helper.
  • New helper.py methods:
    • Added validate_video function to validate video_source.
    • Added extract_time Extract time from give string value.
    • Added get_video_bitrate to caliculate video birate from resolution, framerate, bits-per-pixels values.
    • Added delete_safe to safely delete files of given extension.
    • Added validate_audio to validate audio source.
    • Added new Helper CI tests.
      • Added new check_valid_mpd function to test MPD files validity.
      • Added mpegdash library to CI requirements.
  • Deployed New Docs Upgrades:
    • Added new assets like images, gifs, custom scripts, javascripts fonts etc. for achieving better visual graphics in docs.
    • Added clappr.min.js, dash-shaka-playback.js, clappr-level-selector.min.js third-party javascripts locally.
    • Extended Overview docs Hyperlinks to include all major sub-pages (such as Usage Examples, Reference, FAQs etc.).
    • Replaced GIF with interactive MPEG-DASH Video Example in Stabilizer Docs.
    • Added new pymdownx.keys to replace [Ctrl+C]/[⌘+C] formats.
    • Added new custom.css stylescripts variables for fluid animations in docs.
    • Overridden announce bar and added donation button.
    • Lossless WEBP compressed all PNG assets for faster loading.
    • Enabled lazy-loading for GIFS and Images for performance.
    • Reimplemented Admonitions contexts and added new ones.
    • Added StreamGear and its different modes Docs Assets.
    • Added patch for images & unicodes for PiP flavored markdown in setup.py.
  • Added Request Info and Welcome GitHub Apps to automate PR and issue workflow
    • Added new config.yml for customizations.
    • Added various suitable configurations.
  • Added new -clones attribute to handle FFmpeg parameter clones in StreamGear and WriteGear API.
  • Added new Video-only and Audio-Only sources in bash script.
  • Added new paths in bash script for storing StreamGear & WriteGear assets temporarily.

Updates/Improvements

  • Added patch for NotImplementedError in NetGear_Async API on Windows 3.8+ envs.
  • Check for valid output file extension according to format selected in StreamGear.
  • Completed migration to travis.com.
  • Created new temp_write temp directory for WriteGear Assets in bash script.
  • Deleted old Redundant assets and added new ones.
  • Employed isort library to sort and group imports in Vidgear APIs.
  • Enabled exception for list, tuple, int, float in WriteGear API's output_params dict.
  • Enabled missing support for frame-compression in its primary Receive Mode.
  • Enforced pixel formats for streams.
  • Improved check for valid system path detection in WriteGear API.
  • Overrided pytest-asyncio fixture in NetGear_Async API.
  • Quoted Gear Headline for understanding each gear easily.
  • Re-Positioned Gear's banner images in overview for better readability.
  • Reduced redundant try-except blocks in NetGear Async.
  • Reformatted and Simplified Docs context.
  • Reimplemented return_testvideo_path CI function with variable streams.
  • Reimplemented skip_loop in NetGear_Async to fix asyncio.CancelledError.
  • Reimplemented buggy audio handler in StreamGear.
  • Reimplemented images with <figure> and <figurecaption> like tags.
  • Removed Python < 3.8 condition from all CI tests.
  • Removed or Grouped redundant code for increasing codecov.
  • Removed redundant code and simplified algorithmic complexities in Gears.
  • Replaced ;nbsp with ;thinsp and ;emsp.
  • Replaced IOError with more reliable RuntimeError in StreamGear Pipelines.
  • Replaced del with pop in dicts.
  • Replaced all Netgear CI tests with more reliable try-except-final blocks.
  • Replaced simple lists with pymdownx.tasklist.
  • Replaced subprocess call() with run() for better error handling in execute_ffmpeg_cmd function.
  • Resized over-sized docs images.
  • Simplified delete_safe Helper function.
  • Simplified default audio-bitrate logic in StreamGear
  • Updated CI tests and cleared redundant code from NetGear_Async API.
  • Updated CI with new tests and Bumped Codecov.
  • Updated Issue and PR templates.
  • Updated Licenses for new files and shrink images dimensions.
  • Updated Missing Helpful tips and increased logging.
  • Updated PR guidelines for more clarity.
  • Updated WebGear examples addresses from 0.0.0.0 to localhost.
  • Updated WriteGear and StreamGear CI tests for not supporting temp directory.
  • Updated README.md and changelog.md with new changes.
  • Updated check_output and added force_retrieve_stderr support to **kwargs to extract stderr output even on FFmpeg error.
  • Updated dicts2args to support internal repeated coreX FFmpeg parameters for StreamGear.
  • Updated mkdocs.yml, changelog.md and README.md with latest changes.
  • Updated validate_audio Helper function will now retrieve audio-bitrate for validation.
  • Updated buggy mpegdash dependency with custom dev fork for Windows machines.
  • Updated core parameters for audio handling.
  • Updated logging for debugging selected eventloops in NetGear_Async API.
  • Updated termination linger to zero at Server's end.

Breaking Updates/Changes

  • ⚠️ Changed Webgear API default address to localhost for cross-compatibility between different platforms.
  • In Netgear_Async API, source value can now be NoneType for a custom frame-generator at Server-end only.
  • Temp (such as /tmp in linux) is now not a valid directory for WriteGear & StreamGear API outputs.
  • Moved vidgear docs assets (i.e images, gifs, javascripts and stylescripts) to override directory.

Bug-fixes

  • Added workaround for system path not handle correctly.
  • Fixed Bug: URL Audio format not being handled properly.
  • Fixed Critical Bug in NetGear_Async throwing ValueError with None-type Source.
  • Fixed Critical StreamGear Bug: FFmpeg pipeline terminating prematurely in Single-Source Mode.
  • Fixed Critical external audio handler bug: moved audio-input to input_parameters.
  • Fixed Frozen-threads bug in CI tests.
  • Fixed Mkdocs only accepting Relative paths.
  • Fixed OSError in WriteGear's compression mode.
  • Fixed StreamGear CI bugs for Windows and CI envs.
  • Fixed Typos and Indentation bugs in NetGear API.
  • Fixed ZMQ throwing error on termination if all max-tries exhausted.
  • Fixed NameError bug in NetGear API.
  • Fixed NameError bugs in StreamGear CI.
  • Fixed NameError in CI functions and tests.
  • Fixed TimeoutError bug in NetGear_Async CI tests.
  • Fixed get_valid_ffmpeg_path throwing TypeError with non-string values.
  • Fixed broken links in docs.
  • Fixed critical duplicate logging bug.
  • Fixed default gop value not handle correctly.
  • Fixed handling of incorrect paths detection.
  • Fixed incorrect definitions in NetGear_Async.
  • Fixed left-over attribute bug in WriteGear.
  • Fixed logic and indentation bugs in CI tests.
  • Fixed logic for handling output parameters in WriteGear API.
  • Fixed missing definitions and logic bug in StreamGear.
  • Fixed missing import and incorrect CI definitions.
  • Fixed missing source dimensions from extract_resolutions output in StreamGear API.
  • Fixed missing support for compression parameters in Multi-Clients Mode.
  • Fixed round off error in FPS.
  • Fixed several CI bugs and updated extract_resolutions method.
  • Fixed several bugs from CI Bidirectional Mode tests.
  • Fixed several typos in docs usage examples.
  • Fixed various AttributeError with wrong attribute names and definition in CI Helper functions.
  • Fixed wrong and missing definitions in docs.
  • Fixed wrong logic for extracting OpenCV frames.
  • Fixed wrong type bug in StreamGear API.
  • Fixed wrong type error bug in WriteGear API.
  • Fixed wrong variable assignments bug in WriteGear API.
  • Fixes to CLI tests and missing docs imports.
  • Many minor typos and wrong definitions.

Pull Requests