VidGear v0.1.9
·
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 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.
- Developed several new parameters such as:
- 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 new
- 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.
- Checks if any Incorrect/Invalid value is assigned on
- Added option to completely disable Native Frame-Compression:
- 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 new
- 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. - 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 tolocalhost
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.
- 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.