vidgear v0.1.9 Release Notes
Release Date: 2020-09-03 // over 4 years ago-
๐ 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 andtranscode_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 directoryformats
: 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.
- Added new
- WriteGear API:
- Added support for adding duplicate FFmpeg parameters to
output_params
: - Added new
-clones
attribute inoutput_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
andzmq.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.
- Added support for adding duplicate FFmpeg parameters to
- 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.
- Added
- ๐ 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
andWelcome
GitHub Apps to automate PR and issue workflow- Added new
config.yml
for customizations. - Added various suitable configurations.
- Added new
- โ 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 toformat
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'soutput_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 fixasyncio.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 reliableRuntimeError
in StreamGear Pipelines. - Replaced
del
withpop
in dicts. - ๐ท Replaced all Netgear CI tests with more reliable
try-except-final
blocks. - Replaced simple lists with
pymdownx.tasklist
. - Replaced subprocess
call()
withrun()
for better error handling inexecute_ffmpeg_cmd
function. - ๐ Resized over-sized docs images.
- Simplified
delete_safe
Helper function. - 0๏ธโฃ 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
tolocalhost
. - โก๏ธ Updated WriteGear and StreamGear CI tests for not supporting temp directory.
- โก๏ธ Updated
README.md
andchangelog.md
with new changes. - Updated
check_output
and addedforce_retrieve_stderr
support to**kwargs
to extractstderr
output even on FFmpeg error. - โก๏ธ Updated
dicts2args
to support internal repeatedcoreX
FFmpeg parameters for StreamGear. - โก๏ธ Updated
mkdocs.yml
,changelog.md
andREADME.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
throwingTypeError
with non-string values. - ๐ Fixed broken links in docs.
- ๐ Fixed critical duplicate logging bug.
- 0๏ธโฃ 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
- StreamGear API:
Previous changes from v0.1.8
-
๐ New Features
๐ Multiple Clients support in NetGear API:
- Implemented support for handling any number of Clients simultaneously with a single Server in this mode.
- Added new
multiclient_mode
attribute for enabling this mode easily. - Built support for
zmq.REQ/zmq.REP
andzmq.PUB/zmq.SUB
patterns in this mode. - Implemented ability to receive data from all Client(s) along with frames with
zmq.REQ/zmq.REP
pattern only.
- Updated related CI tests
๐ Support for robust Lazy Pirate pattern(auto-reconnection) in NetGear API for both server and client ends:
- Implemented a algorithm where NetGear rather than doing a blocking receive, will now:
- Poll the socket and receive from it only when it's sure a reply has arrived.
- Attempt to reconnect, if no reply has arrived within a timeout period.
- Abandon the connection if there is still no reply after several requests.
- Implemented its default support for
REQ/REP
andPAIR
messaging patterns internally. - Added new
max_retries
andrequest_timeout
(in seconds) for handling polling. - Added
DONTWAIT
flag for interruption-free data receiving.
- Both Server and Client can now reconnect even after a premature termination.
๐ Performance Updates for NetGear API:
- Added default Frame Compression support for Bidirectional frame transmission in Bidirectional mode.
- Added support for
Reducer()
function in Helper.py to aid reducing frame-size on-the-go for more performance. - Added small delay in
recv()
function at client's end to reduce system load.
- Reworked and Optimized NetGear termination, and also removed/changed redundant definitions and flags.
๐ Docs Migration to Mkdocs:
- Implemented a beautiful, static documentation site based on MkDocs which will then be hosted on GitHub Pages.
- Crafted base mkdocs with third-party elegant & simplistic
mkdocs-material
theme. - Implemented new
mkdocs.yml
for Mkdocs with relevant data. - Added new
docs
folder to handle markdown pages and its assets. - Added new Markdown pages(
.md
) to docs folder, which are carefully crafted documents - based on previous Wiki's docs, and some completely new additions. - Added navigation under tabs for easily accessing each document.
- New Assets:
- Added new assets like gifs, images, custom scripts, favicons, site.webmanifest etc. for bringing standard and quality to docs visual design.
- Designed brand new logo and banner for VidGear Documents.
- Deployed all assets under separate Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License.
- Added Required Plugins and Extensions:
- Added support for all pymarkdown-extensions.
- Added support for some important
admonition
,attr_list
,codehilite
,def_list
,footnotes
,meta
, andtoc
like Mkdocs extensions. - Enabled
search
,minify
andgit-revision-date-localized
plugins support. - Added various VidGear's social links to yaml.
- Added support for
en
(English) language.
- Auto-Build API Reference with
mkdocstrings:
- Added support for
mkdocstrings
plugin for auto-building each VidGear's API references. - Added python handler for parsing python source-code to
mkdocstrings
.
- Added support for
- Auto-Deploy Docs with Github Actions:
- Implemented Automated Docs Deployment on gh-pages through GitHub Actions workflow.
- Added new workflow yaml with minimal configuration for automated docs deployment.
- Added all required python dependencies and environment for this workflow.
- Added
master
branch on Ubuntu machine to build matrix.
โก๏ธ Updates/Improvements
- ๐ Added in-built support for bidirectional frames(
NDarray
) transfer in Bidirectional mode. - ๐ Added support for User-Defined compression params in Bidirectional frames transfer.
- โช Added workaround for
address already in use
bug at client's end. - Unified Bidirectional and Multi-Clients mode for client's return data transmission.
- Replaced
ValueError
with more suitableRuntimeError
. - โก๏ธ Updated logging for better readability.
- ๐ท Added CI test for Multi-Clients mode.
- Reformatted and grouped imports in VidGear.
- ๐ท Added
Reducer
Helper function CI test. - โ Added Reliability tests for both Server and Client end.
- Disabled reliable reconnection for Multi-Clients mode.
- Replaced
os.devnull
with suprocess's inbuilt function. - โก๏ธ Updated README.md, Issue and PR templates with new information and updates.
- โก๏ธ Moved
changelog.md
to/docs
and updated contribution guidelines. - ๐ Improved source-code docs for compatibility with
mkdocstrings
. - ๐ Added additional dependency
mkdocs-exclude
, for excluding files from Mkdocs builds. - โก๏ธ Updated license and compressed images/diagrams.
- ๐ท Added new CI tests and Bumped Codecov.
- ๐ท Changed YouTube video URL for CI tests to Creative Commons(CC) video.
- ๐ Removed redundant code.
๐ฅ Breaking Updates/Changes
๐ โ ๏ธVidGear Docs moved to GitHub Pages, Now Available at https://abhitronix.github.io/vidgear.
- ๐ Removed
filter
attribute fromoptions
parameter in NetGear API. - ๐ Removed
force_terminate
parameter support from NetGear API. - Disabled additional data of datatype
numpy.ndarray
for Server end in Bidirectional Mode.
๐ Bug-fixes
- ๐ Fixed
'NoneType' object is not subscriptable
bug. - ๐ Fixed bugs related to delayed termination in NetGear API.
- 0๏ธโฃ Reduced default
request_timeout
value to 4 and also lowered cut-off limit for the same. - ๐ Removed redundant ZMQ context termination and similar variables.
- Added missing VidGear installation in workflow.
- ๐ Excluded conflicting assets
README.md
from Mkdocs builds. - ๐ Fixed
pattern
value check bypassed if wrong value is assigned. - ๐ Fixed incorrect handling of additional data transferred in synchronous mode at both Server and Client end.
- ๐ท Replaced Netgear CI test with more reliable
try-except-final
blocks. - โก๏ธ Updated termination linger to zero at Server's end.
- ๐ Fixed
NameError
bug in NetGear API. - ๐ Fixed missing support for compression parameters in Multi-Clients Mode.
- ๐ Fixed ZMQ throwing error on termination if all max-tries exhausted.
- ๐ Enabled missing support for frame compression in its primary receive mode.
- ๐ท Fixed several bugs from CI Bidirectional Mode tests.
- ๐ Removed or Grouped redundant code for increasing codecov.
- ๐ Fixed Mkdocs only accepting Relative paths.
- ๐ Fixed broken links in docs.
- ๐ Fixed round off error in FPS.
- โ๏ธ Many small typos and bugs fixes.
Pull Requests