Release Notes⚓
v0.2.6 (2022-07-05)⚓
New Features
- Docs:
- Added new bonus example for RSTP/RTP Live-Streaming using WriteGear's Compression Mode.
- Added "How to resolve zmq.error.ZMQError" FAQ for NetGear API.(PR by @iandol)
- Added new ko-fi button to README.md
- Added new contributors block to changelog.md
- Maintenance:
- Added new patterns to
.gitignore
to ignore pypi'sbuild
directory andegg-info
files.
- Added new patterns to
- CI:
- Switched to new Issue GitHub's form schema using YAML
- Added new
bug_report.yaml
. - Added new
question.yaml
. - Added new
proposal.yaml
. - Deleted depreciated markdown files.
- Polished forms.
- Added new
- Switched to new Issue GitHub's form schema using YAML
Updates/Improvements
- Setup.py:
- Bumped version to
0.2.6
. - Updated logic operators and dependency.
- Replaced
>=
comparsion operator with more flexible~=
. - Replaced
distutils.version.LooseVersion
withpkg_resources.parse_version
.
- Replaced
- Bumped version to
- Docs:
- Updated Site Navigation.
- Added new notices to inform users more effectively about bonus examples.
- Added new
Bonus
section to navigation and moved suitable pages under it. - Updated headings and URLs.
- Redesigned and Rewritten Donation and Contribution section to README.md
- Updated Zenodo badge and bibtex entry.
- Updated Admonition Icon, FAQs and site-links.
- Reformatted code and its comments.
- Updated
changelog.md
.
- Updated Site Navigation.
- API:
- Updated depreciated tostring() to tobytes().
tostring
was renamed totobytes
for the purposes for clarity in Python 3.2. https://docs.python.org/3/library/array.html#array.array.tobytes
- Updated depreciated tostring() to tobytes().
- CI:
- Added more paths and files to skip commits.
Breaking Updates/Changes
-
-input_framerate
parameter now accepts any positive value for WriteGear and StreamGear APIs.
Bug-fixes
- API:
- Fixed
-input_framerate
less than 5 does not get used in WriteGear and StreamGear APIs.(PR by @freol35241)
- Fixed
- CamGear: Fixed Yt-dlp generated HTTP DASH Segments URLs not supported by OpenCV's VideoCapture(PR by @DynamiteC)
- StreamGear:
- Fixed
hls_segment_type
not working bug. (PR by @enarche-ahn) - Fixed critical logging parameter bug
- Fixed debug logs even when
logging=False
in StreamGear's Real-time Mode. (patch suggested by @enarche-ahn) - Added length check to
-video_source
attribute to correctly infers it as empty(or invalid).
- Fixed debug logs even when
- Fixed
- CI:
- Xfailed RSTP CamGear CI test.
- Fixed pinned version syntax bug in docs_deployer workflow.
- Fixed typos in Github forms and its context.
- Added missing dependency.
- Docs:
- Fixed jinja2
3.1.0
or above breaks mkdocs.jinja2>=3.1.0
breaks mkdocs (mkdocs/mkdocs#2799), therefore pinned jinja2 version to<3.1.0
.
- Fixed support for new
mkdocstring
versions- Replaced rendering sub-value with options.
- Removed pinned
mkdocstrings==0.17.0
version.
- Fixed Netgear+Webgear bonus example code bugs.(PR by @iandol)
- Added a missing import.
- Removed
self.
typo. - Replaced the
return
value withbreak
in the async as it triggers an error.
- Fixed external bug that causing "Home" tab to irresponsive randomly when accessed from other tabs.
- Fixed indentation and spacing.
- Fixed typos and updated context.
- Removed dead code.
- Fixed jinja2
New Contributors
v0.2.5 (2021-02-11)⚓
New Features
- WriteGear:
- Add support for GStreamer pipeline in WriteGear API's Non-Compression mode:
- Implemented GStreamer Pipeline Mode to accept GStreamer pipeline as string to its output_filename parameter.
- Added new special
-gst_pipeline_mode
attribute for its output_params parameter. - This feature provides flexible way to directly write video frames into GStreamer Pipeline with controlled bitrate.
- Added new docs and updated existing docs with related changes.
- Added new
-ffpreheaders
special attribute to WriteGear's options parameter:- This attribute is specifically required to set special FFmpeg parameters in Compression Mode that are present at the starting of command(such as
-re
). - This attribute only accepts list datatype as value.
- Added related docs.
- This attribute is specifically required to set special FFmpeg parameters in Compression Mode that are present at the starting of command(such as
- Add support for GStreamer pipeline in WriteGear API's Non-Compression mode:
- NetGear:
- Added bidirectional data transfer support by extending Bidirectional mode support to exclusive Multi-Clients and Multi-Servers modes:
- Users will now able to send data bidirectionally in both Multi-Clients and Multi-Servers exclusive modes.
- Bidirectional mode will no longer disables automatically when Multi-Clients and Multi-Servers modes already enabled.
- Added new docs and updated existing docs with related changes.
- Added bidirectional data transfer support by extending Bidirectional mode support to exclusive Multi-Clients and Multi-Servers modes:
- Maintenance:
- Added official support for Python-3.10 legacies.
- Added
float
value support toTHREAD_TIMEOUT
optional parameter. - Added info about dropped support for Python-3.6 legacies through announcement bar.
- Added
config.md
file for Issue templates. - Added title to Issue templates.
- Docs:
- Added new Code Annotations
- Added new icons to headings.
- Added Advanced VideoGear usage example with CamGear backend.
Updates/Improvements
- Setup.py:
- Dropped support for Python-3.6 and below legacies.
- Updated logging formatting.
- Updated python_requires to
>=3.7
. - Bumped version to
0.2.5
.
- Helper:
- Vidgear will now report current version on every run.
- Docs:
- Updated SSH tunneling docs context.
- Excluded
docs
directory from CI envs. - Updated Zenodo badge and BibTeX entry.
- Updated dark theme hue to
260
. - Updated Admonitions.
- Additional warnings against pushing PR against VidGear's
testing
branch only. - Updated code comments.
- CI:
- Removed support for Python-3.6 legacies from all workflows.
- Updated NetGear's Exclusive Mode tests.
- Added GStreamer Pipeline Mode tests.
- Maintenance:
- Updated Issue and PR templates.
- Updated metadata.
Breaking Updates/Changes
- Dropped support for Python-3.6 legacies from vidgear.
Bug-fixes
- NetGear: Fixed bidirectional mode overriding multi-clients mode's data.
- WriteGear:
- Fixed wrongly defined ffmpeg_preheaders.
- Fixed condition logic bugs.
- Fixed UnboundLocalError bug.
- Setup: Fixed uvicorn and aiortc dropped support for Python-3.6 legacies.
- CI:
- Fixed GitHub Actions interprets
3.10
as3.1
if used without strings. - Fixed naming error in azure YAML.
- Fixed GitHub Actions interprets
- Docs:
- Fixed codecov badge URL in README.md
- Fixed hyperlinks in README.
- Fixed indentation and spacing.
- Fixed typos and updated context.
- Removed dead code.
- Maintenance:
- Removed depreciated condition checks.
v0.2.4 (2021-12-05)⚓
New Features
- CamGear:
- Added a new YT_backend Internal Class with YT-DLP backend:
- Implemented
YT_backend
a new CamGear's Internal YT-DLP backend class for extracting metadata from Streaming URLs. - Added support for pipeling (live) video-frames from all yt-dlp supported streaming sites: https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md#supported-sites
- Implemented algorithm from scratch for auto-extracting resolution specific streamable URLs for pipelineing.
- Implemented logic for auto-calculating
best
andworst
resolutions. - Added new
ytv_metadata
global parameter to CamGear for accessing video's metadata(such as duration, title, description) on-the-go. - ⚠️ Playlists are still unsupported.
- Implemented
- Added a new YT_backend Internal Class with YT-DLP backend:
- WebGear_RTC:
- Implemented a new easy way of defining Custom Streaming Class with suitable source(such as OpenCV):
- Added new
custom_stream
attribute with WebGear_RTCoptions
parameter that allows you to easily define your own Custom Streaming Class with suitable source(such as OpenCV). - This implementation supports repeated Auto-Reconnection or Auto-Refresh out-of-the-box.
- This implementation is more user-friendly and easy to integrate within complex APIs.
- This implementation requires at-least
read()
andstop()
methods implemented within Custom Streaming Class, otherwise WebGear_RTC will throw ValueError. - This implementation supports all vidgear's VideoCapture APIs readily as input.
- Added new
- Implemented a new easy way of defining Custom Streaming Class with suitable source(such as OpenCV):
- Maintenance:
- Added new
.gitignore
for specifying intentionally untracked files to ignore- Added more files entries to
.gitignore
.
- Added more files entries to
- Added new
.gitattributes
to manage how Git reads line endings.- Enabled
auto
default behavior, in case people don't havecore.autocrlf
set. - Enforced LF line-endings for selective files types.
- Added Binary data files that specifies they are not text, and git should not try to change them.
- Added Language aware diff headers.
- Added Linguist language overrides.
- Enabled
- Added new
- Docs:
- Added bonus example to add real-time file audio encoding with VideoGear and Stabilizer class.
- Added complete usage docs with new CamGear's Internal Class with YT-DLP backend.
- Added instructions to extract video's metadata in CamGear.
- Added donation link in page footer with bouncing heart animation through pure CSS.
- Added info about critical changes in
v0.2.4
and above installation through new announcement bar. - Added related usage docs for new WebGear_RTC custom streaming class.
- Added changes for upgrading mkdocs-material from
v7.x
to newerv8.x
. - Added outdated version warning block.
Updates/Improvements
- CamGear:
- Added
is_livestream
global YT_backend parameters. - Added default options for yt-dlp for extracting info_dict(metadata) of the video as a single JSON line.
- Completely removed old logic for extracting streams using pafy.
- Removed all dead code related to streamlink backend.
- Added
- Setup.py:
- Moved all API specific dependencies to
extra_requires
under the name"core"
. [PR #268 by @zpapakipos] - Added rule to replace GitHub heading links in description.
- Updated
extra_require
dependencies. - Removed
streamlink
dependency. - Removed
pafy
dependency. - Removed
pyzmq
from latest_version group. - Updated SEO Keywords.
- Moved all API specific dependencies to
- Docs:
- Re-written
pip
andsource
installation docs. - Added warning for using
-disable_force_termination
flag for short duration videos. - Added
permalink_title
entry to mkdocs.yml. - Updated CamGear parameters.
- Updated Admonitions with related information.
- Updated Functional Block Diagram(
gears_fbd.png
) image. - Updated installation instructions.
- Updated Advanced examples using WebGear_RTC's custom streaming class.
- Updated code highlighting.
- Updated zenodo badge.
- Updated BibTex for project citation.
- Replaced incorrect API parameter docs.
- Updated WebGear_RTC parameters.
- Re-written
- CI:
- Updated CI tests for new WebGear_RTC custom streaming class.
- Restored
test_stream_mode
CamGear test. - Updated Streaming Sites test links.
- Added more tests cases.
- Maintenance:
- Updated spacing in logger formatting.
- Renamed Asyncio Helper logger name.
- Changed logging colors.
- Updated logging messages.
Breaking Updates/Changes
- Installation command with
pip
has been changed inv0.2.4
:- The legacy
pip install vidgear
command now installs critical bare-minimum dependencies only. Therefore in order to automatically install all the API specific dependencies as previous versions, usepip install vidgear[core]
command instead.
- The legacy
- CamGear:
- Removed
streamlink
backend support fromstream_mode
in favor of more reliable CamGear's Internal YT-DLP backend class for extracting metadata from Streaming URLs.- CamGear will raise
ValueError
if streaming site URL is unsupported by yt-dlp backend. - CamGear will raise
ValueError
ifyt-dlp
isn't installed andstream_mode
is enabled.
- CamGear will raise
- Removed automatic enforcing of GStreamer backend for YouTube-livestreams and made it optional.
- The CamGear will not raise ValueError if GStreamer support is missing in OpenCV backends.
- Removed
- WebGear_RTC:
- Removed support for assigning Custom Media Server Class(inherited from aiortc's VideoStreamTrack) in WebGear_RTC through its
config
global parameter. - WebGear_RTC API will now throws ValueError if
source
parameter is NoneType as well ascustom_stream
attribute is undefined.
- Removed support for assigning Custom Media Server Class(inherited from aiortc's VideoStreamTrack) in WebGear_RTC through its
- Helper:
- Removed
restore_levelnames
method. - Removed
youtube_url_validator
helper method.
- Removed
Bug-fixes
- CamGear:
- Fixed KeyError Bug for missing attributed in meta_data json in some streaming sites.
- Helper:
- Removed unused imports.
- Docs:
- Removed slugify from mkdocs which was causing invalid hyperlinks in docs.
- Fixed GitHub hyperlinks in README.md.
- Fixed hyperlink in announcement bar.
- Fixed content tabs failing to work.
- Fixed line-endings and usage example code.
- Removed any
pafy
andstreamlink
references. - Fixed context and typos.
- CI:
- Fixed NameError bugs in WebGear_RTC CI test.
- Maintenance:
- Removed dead logger code causing Python's Built-in logging module to hide logs.
- Removed unused
logging
import. - Updated code comments.
New Contributors
v0.2.3 (2021-10-27)⚓
New Features
- CamGear:
- Added support for
4K
Streaming URLs.
- Added support for
- Helper:
- Implemented logging ColorFormatter string alignment.
- Center aligned logging Level-name and Class-name.
- Changed
%
formatting style with modern{
. - Re-added
asctime
value to Formatter string. - Re-arranged parameter positions in Formatter string.
- Implemented logging ColorFormatter string alignment.
- Maintenance:
- Added new
.gitignore
for specifying intentionally untracked files to ignore- Added more files entries to
.gitignore
.
- Added more files entries to
- Added new
.gitattributes
to manage how Git reads line endings.- Enabled
auto
default behavior, in case people don't havecore.autocrlf
set. - Enforced LF line-endings for selective files types.
- Added Binary data files that specifies they are not text, and git should not try to change them.
- Added Language aware diff headers.
- Added Linguist language overrides.
- Enabled
- Added new
- Docs:
- Added new ScreenGear with WebGear_RTC API bonus example.
- Added support for
hl_lines
argument for highlighting specific code lines. - Added drop-shadow effects for its
slate
theme to improve visibility.
Updates/Improvements
- CamGear:
- Replaced
youtube-dl
withyt-dlp
as pafy backend for YouTube videos pipelining.- Implemented hack to trick pafy into assuming
yt-dlp
asyoutube-dl
. - Using
sys.modules
to presentyt-dlp
asyoutube-dl
. yt-dlp
python API functions exactly similar toyoutube-dl
.- Replaced
youtube-dl
dependency withyt-dlp
. - Replaced
youtube-dl
imports withyt-dlp
.
- Implemented hack to trick pafy into assuming
- Replaced
- StreamGear:
- Updated default
stream_count
internal dict key value to 1.
- Updated default
- Maintenance:
- Introduced python short-circuiting for handling logging logic.
- Enabled logging for
check_WriteAccess
method in WriteGear, StreamGear and NetGear APIs.
- Docs:
- Added warning for ScreenGear outputting RGBA frames instead of default BGR frames with
mss
backend. - Added warnings for properly formatting
output_params
when assigning external audio-source in WriteGear. - Added depreciation notice for Python 3.6 legacies.
- Restructured docs to make it more user-friendly.
- Updated, Extended and Improved context.
- Improved code comments.
- Updated docs admonitions.
- Updated
Zenodo
badge.
- Added warning for ScreenGear outputting RGBA frames instead of default BGR frames with
- CI:
- Migrated to new Codecov Uploader in Azure Pipelines.
- Support for the Bash Uploader will be deprecated on February 1st, 2022. See: https://docs.codecov.com/docs/about-the-codecov-bash-uploader
- Added commands for signature and SHASUM verification to ensure integrity of the Uploader before use.
- Replaced related bash commands.
- Replaced
env
withexport
in ci_linux.yml. - Replaced
bubkoo/needs-more-info@v1
withwow-actions/needs-more-info@v1
. - Added codecov secret token through
env
variable. - Added wildcard to skip CI tests for doc(
.md
) files. - Added
.md
files to Codecov ignore list. - Update vidgear's banner image.
- Migrated to new Codecov Uploader in Azure Pipelines.
Breaking Updates/Changes
-
check_WriteAccess
will now return as invalid path if writing directory does not exists. This will effect output file handling in WriteGear and StreamGear APIs.
Bug-fixes
- StreamGear:
- WriteGear:
- Fixed bug in disable_force_termination logic which accidentally disables force termination.
- WebGear_RTC:
- Fixed
name 'VideoStreamTrack' is not defined
bug.
- Fixed
- Setup.py:
- Fixed
TypeError
bug. - Fixed invalid
latest_version
retrieval.
- Fixed
- Helper:
- Fixed
check_WriteAccess
failing to recognize correct permission for writing the output file on windows platform.- Implemented separate logic for
Windows
and*nix
platforms. - Added new
stat
import. - Improved warnings and error handling.
- Added logging parameter to
check_WriteAccess
.
- Implemented separate logic for
- Fixed bug in check_WriteAccess that throws
OSError
while handling URLs.
- Fixed
- Docs:
- Fixed bugs in WriteGear's Compression Mode with Live Audio Input example.
- Fixed "drop-shadow" property via
filter
function conflicting with sidecard button.- Added new CSS classes for image, admonitions and code highlight in dark theme.
- Several internal and external webpage links typos fixed.
- Fixed several language typos.
- CI:
- Fixed Azure Pipeline coverage upload bugs.
- Fixed random errors in CamGear
stream_mode
test.
- Bash:
- Removed the Windows carriage returns from the shell scripts to be able to execute them on Linux.
- Fixed logging comments.
New Contributors
v0.2.2 (2021-09-02)⚓
New Features
- StreamGear:
- Native Support for Apple HLS Multi-Bitrate Streaming format:
- Added support for new Apple HLS (HTTP Live Streaming) HTTP streaming format in StreamGear.
- Implemented default workflow for auto-generating primary HLS stream of same resolution and framerate as source.
- Added HLS support in Single-Source and Real-time Frames Modes.
- Implemented inherit support for
fmp4
andmpegts
HLS segment types. - Added adequate default parameters required for trans-coding HLS streams.
- Added native support for HLS live-streaming.
- Added
"hls"
value toformat
parameter for easily selecting HLS format. - Added HLS support in
-streams
attribute for transcoding additional streams. - Added support for
.m3u8
and.ts
extensions inclear_prev_assets
workflow. - Added validity check for
.m3u8
extension in output when HLS format is used. - Separated DASH and HLS command handlers.
- Created HLS format exclusive parameters.
- Implemented
-hls_base_url
FFMpeg parameter support.
- Added support for audio input from external device:
- Implemented support for audio input from external device.
- Users can now easily add audio device and decoder by formatting them as python list.
- Modified
-audio
parameter to supportlist
data type as value. - Modified
validate_audio
helper function to validate external audio devices.
- Added
-seg_duration
to control segment duration.
- Native Support for Apple HLS Multi-Bitrate Streaming format:
- NetGear:
- New SSH Tunneling Mode for remote connection:
- New SSH Tunneling Mode for connecting ZMQ sockets across machines via SSH tunneling.
- Added new
ssh_tunnel_mode
attribute to enable ssh tunneling at provide address at server end only. - Implemented new
check_open_port
helper method to validate availability of host at given open port. - Added new attributes
ssh_tunnel_keyfile
andssh_tunnel_pwd
to easily validate ssh connection. - Extended this feature to be compatible with bi-directional mode and auto-reconnection.
- Disabled support for exclusive Multi-Server and Multi-Clients modes.
- Implemented logic to automatically enable
paramiko
support if installed. - Reserved port-
47
for testing.
- Additional colorspace support for input frames with Frame-Compression enabled:
- Allowed to manually select colorspace on-the-fly with JPEG frame compression.
- Updated
jpeg_compression
dict parameter to support colorspace string values. - Added all supported colorspace values by underline
simplejpeg
library. - Server enforced frame-compression colorspace on client(s).
- Enable "BGR" colorspace by default.
- Added Example for changing incoming frames colorspace with NetGear's Frame Compression.
- Updated Frame Compression parameters in NetGear docs.
- Updated existing CI tests to cover new frame compression functionality.
- New SSH Tunneling Mode for remote connection:
- NetGear_Async:
- New exclusive Bidirectional Mode for bidirectional data transfer:
- NetGear_Async's first-ever exclusive Bidirectional mode with pure asyncio implementation.
- Bidirectional mode is only available with User-defined Custom Source(i.e.
source=None
) - Added support for
PAIR
&REQ/REP
bidirectional patterns for this mode. - Added powerful
asyncio.Queues
for handling user data and frames in real-time. - Implemented new
transceive_data
method to Transmit (in Recieve mode) and Receive (in Send mode) data in real-time. - Implemented
terminate_connection
internal asyncio method to safely terminate ZMQ connection and queues. - Added
msgpack
automatic compression encoding and decoding of data and frames in bidirectional mode. - Added support for
np.ndarray
video frames. - Added new
bidirectional_mode
attribute for enabling this mode. - Added 8-digit random alphanumeric id generator for each device.
- NetGear_Async will throw
RuntimeError
if bidirectional mode is disabled at server or client but not both.
- Added new
disable_confirmation
used to force disable termination confirmation from client interminate_connection
. - Added
task_done()
method after everyget()
call to gracefully terminate queues. - Added new
secrets
andstring
imports.
- New exclusive Bidirectional Mode for bidirectional data transfer:
- WebGear:
- Updated JPEG Frame compression with
simplejpeg
:- Implemented JPEG compression algorithm for 4-5% performance boost at cost of minor loss in quality.
- Utilized
encode_jpeg
anddecode_jpeg
methods to implement turbo-JPEG transcoding withsimplejpeg
. - Added new options to control JPEG frames quality, enable fastest dct, fast upsampling to boost performance.
- Added new
jpeg_compression
,jpeg_compression_quality
,jpeg_compression_fastdct
,jpeg_compression_fastupsample
attributes. - Enabled fast dct by default with JPEG frames at
90%
. - Incremented default frame reduction to
25%
. - Implemented automated grayscale colorspace frames handling.
- Updated old and added new usage examples.
- Dropped support for depreciated attributes from WebGear and added new attributes.
- Added new WebGear Theme: (Checkout at https://github.com/abhiTronix/vidgear-vitals)
- Added responsive image scaling according to screen aspect ratios.
- Added responsive text scaling.
- Added rounded border and auto-center to image tag.
- Added bootstrap css properties to implement auto-scaling.
- Removed old
resize()
hack. - Improved text spacing and weight.
- Integrated toggle full-screen to new implementation.
- Hide Scrollbar both in WebGear_RTC and WebGear Themes.
- Beautify files syntax and updated files checksum.
- Refactor files and removed redundant code.
- Bumped theme version to
v0.1.2
.
- Updated JPEG Frame compression with
- WebGear_RTC:
- Added native support for middlewares:
- Added new global
middleware
variable for easily defining Middlewares as list. - Added validity check for Middlewares.
- Added tests for middlewares support.
- Added example for middlewares support.
- Extended middlewares support to WebGear API too.
- Added related imports.
- Added new global
- Added new WebGear_RTC Theme: (Checkout at https://github.com/abhiTronix/vidgear-vitals)
- Implemented new responsive video scaling according to screen aspect ratios.
- Added bootstrap CSS properties to implement auto-scaling.
- Removed old
resize()
hack. - Beautify files syntax and updated files checksum.
- Refactored files and removed redundant code.
- Bumped theme version to
v0.1.2
- Added native support for middlewares:
- Helper:
- New automated interpolation selection for gears:
- Implemented
retrieve_best_interpolation
method to automatically select best available interpolation within OpenCV. - Added support for this method in WebGear, WebGear_RTC and Stabilizer Classes/APIs.
- Added new CI tests for this feature.
- Implemented
- Implemented
get_supported_demuxers
method to get list of supported demuxers.
- New automated interpolation selection for gears:
- CI:
- Added new
no-response
work-flow for stale issues. - Added new CI tests for SSH Tunneling Mode.
- Added
paramiko
to CI dependencies. - Added support for
"hls"
format in existing CI tests. - Added new functions
check_valid_m3u8
andextract_meta_video
for validating HLS files. - Added new
m3u8
dependency to CI workflows. - Added complete CI tests for NetGear_Async's new Bidirectional Mode:
- Implemented new exclusive
Custom_Generator
class for testing bidirectional data dynamically on server-end. - Implemented new exclusive
client_dataframe_iterator
method for testing bidirectional data on client-end. - Implemented
test_netgear_async_options
andtest_netgear_async_bidirectionalmode
two new tests. - Added
timeout
value on server end in CI tests.
- Implemented new exclusive
- Added new
- Setup.py:
- Added new
cython
andmsgpack
dependency. - Added
msgpack
andmsgpack_numpy
to auto-install latest.
- Added new
- BASH:
- Added new
temp_m3u8
folder for generating M3U8 assets in CI tests.
- Added new
- Docs:
- Added docs for new Apple HLS StreamGear format:
- Added StreamGear HLS transcoding examples for both StreamGear modes.
- Updated StreamGear parameters to w.r.t new HLS configurations.
- Added open-sourced "Sintel" - project Durian Teaser Demo with StreamGear's HLS stream using
Clappr
and raw.githack.com. - Added new HLS chunks at https://github.com/abhiTronix/vidgear-docs-additionals for StreamGear
- Added support for HLS video in Clappr within
custom.js
using HlsjsPlayback plugin. - Added support for Video Thumbnail preview for HLS video in Clappr within
custom.js
- Added
hlsjs-playback.min.js
JS script and suitable configuration for HlsjsPlayback plugin. - Added custom labels for quality levels selector in
custom.js
. - Added new docs content related to new Apple HLS format.
- Updated DASH chunk folder at https://github.com/abhiTronix/vidgear-docs-additionals.
- Added example for audio input support from external device in StreamGear.
- Added steps for using
-audio
attribute on different OS platforms in StreamGear.
- Added usage examples for NetGear_Async's Bidirectional Mode:
- Added new Usage examples and Reference doc for NetGear_Async's Bidirectional Mode.
- Added new image asset for NetGear_Async's Bidirectional Mode.
- Added NetGear_Async's
option
parameter reference. - Updated NetGear_Async definition in docs.
- Changed font size for Helper methods.
- Renamed
Bonus
section toReferences
inmkdocs.yml
.
- Added Gitter sidecard embed widget:
- Imported gitter-sidecar script to
main.html
. - Updated
custom.js
to set global window option. - Updated Sidecard UI in
custom.css
.
- Imported gitter-sidecar script to
- Added bonus examples to help section:
- Implemented a curated list of more advanced examples with unusual configuration for each API.
- Added several new contents and updated context.
- Added support for search suggestions, search highlighting and search sharing (i.e. deep linking)
- Added more content to docs to make it more user-friendly.
- Added warning that JPEG Frame-Compression is disabled with Custom Source in WebGear.
- Added steps for identifying and specifying sound card on different OS platforms in WriteGear.
- Added Zenodo DOI badge and its reference in BibTex citations.
- Added
extra.homepage
parameter, which allows for setting a dedicated URL forsite_url
. - Added
pymdownx.striphtml
plugin for stripping comments. - Added complete docs for SSH Tunneling Mode.
- Added complete docs for NetGear's SSH Tunneling Mode.
- Added
pip
upgrade related docs. - Added docs for installing vidgear with only selective dependencies
- Added new
advance
/experiment
admonition with new background color. - Added new icons SVGs for
advance
andwarning
admonition. - Added new usage example and related information.
- Added new image assets for ssh tunneling example.
- Added new admonitions
- Added new FAQs.
- Added docs for new Apple HLS StreamGear format:
Updates/Improvements
- VidGear Core:
- New behavior to virtually isolate optional API specific dependencies by silencing
ImportError
on all VidGear's APIs import. - Implemented algorithm to cache all imports on startup but silence any
ImportError
on missing optional dependency. - Now
ImportError
will be raised only any certain API specific dependency is missing during given API's initialization. - New
import_dependency_safe
to imports specified dependency safely withimportlib
module. - Replaced all APIs imports with
import_dependency_safe
. - Added support for relative imports in
import_dependency_safe
. - Implemented
error
parameter to by defaultImportError
with a meaningful message if a dependency is missing, Otherwise iferror = log
a warning will be logged and onerror = silent
everything will be quit. But If a dependency is present, but older than specified, an error is raised if specified. - Implemented behavior that if a dependency is present, but older than
min_version
specified, an error is raised always. - Implemented
custom_message
to display custom message on error instead of default one. - Implemented separate
import_core_dependency
function to import and check for specified core dependency. ImportError
will be raised immediately if core dependency not found.
- New behavior to virtually isolate optional API specific dependencies by silencing
- StreamGear:
- Replaced depreciated
-min_seg_duration
flag with-seg_duration
. - Removed redundant
-re
flag from RTFM. - Improved Live-Streaming performance by disabling SegmentTimline
- Improved DASH assets detection for removal by using filename prefixes.
- Replaced depreciated
- NetGear:
- Replaced
np.newaxis
withnp.expand_dims
. - Replaced
random
module withsecrets
while generating system ID. - Update array indexing with
np.copy
.
- Replaced
- NetGear_Async:
- Improved custom source handling.
- Removed deprecated
loop
parameter from asyncio methods. - Re-implemented
skip_loop
parameter inclose()
method. run_until_complete
will not used ifskip_loop
is enabled.skip_loop
now will create asyncio task instead and will enabledisable_confirmation
by default.- Replaced
create_task
withensure_future
to ensure backward compatibility with python-3.6 legacies. - Simplified code for
transceive_data
method.
- WebGear_RTC:
- Improved handling of failed ICE connection.
- Made
is_running
variable globally available for internal use.
- Helper:
- Added
4320p
resolution support todimensions_to_resolutions
method. - Implemented new
delete_file_safe
to safely delete files at given path. - Replaced
os.remove
calls withdelete_file_safe
. - Added support for filename prefixes in
delete_ext_safe
method. - Improved and simplified
create_blank_frame
functions frame channels detection. - Added
logging
parameter to capPropId function to forcefully discard any error(if required).
- Added
- Setup.py:
- Added patch for
numpy
dependency,numpy
recently dropped support for python 3.6.x legacies. See https://github.com/numpy/numpy/releases/tag/v1.20.0 - Removed version check on certain dependencies.
- Re-added
aiortc
to auto-install latest version.
- Added patch for
- Asyncio:
- Changed
asyncio.sleep
value to0
.- The amount of time sleep is irrelevant; the only purpose await asyncio.sleep() serves is to force asyncio to suspend execution to the event loop, and give other tasks a chance to run. Also,
await asyncio.sleep(0)
will achieve the same effect. https://stackoverflow.com/a/55782965/10158117
- The amount of time sleep is irrelevant; the only purpose await asyncio.sleep() serves is to force asyncio to suspend execution to the event loop, and give other tasks a chance to run. Also,
- Changed
- License:
- Dropped publication year range to avoid confusion. (Signed and Approved by @abhiTronix)
- Updated Vidgear license's year of first publication of the work in accordance with US copyright notices defined by Title 17, Chapter 4(Visually perceptible copies): https://www.copyright.gov/title17/92chap4.html
- Reflected changes in all copyright notices.
- CI:
- Updated macOS VM Image to latest in azure devops.
- Updated VidGear Docs Deployer Workflow.
- Updated WebGear_RTC CI tests.
- Removed redundant code from CI tests.
- Updated tests to increase coverage.
- Enabled Helper tests for python 3.8+ legacies.
- Enabled logging in
validate_video
method. - Added
-hls_base_url
to streamgear tests. - Update
mpegdash
dependency to0.3.0-dev2
version in Appveyor. - Updated CI tests for new HLS support
- Updated CI tests from scratch for new native HLS support in StreamGear.
- Updated test patch for StreamGear.
- Added exception for RunTimeErrors in NetGear CI tests.
- Added more directories to Codecov ignore list.
- Imported relative
logger_handler
for asyncio tests.
- Docs:
- Re-positioned few docs comments at bottom for easier detection during stripping.
- Updated to new extra
analytics
parameter in Material Mkdocs. - Updated dark theme to
dark orange
. - Changed fonts => text:
Muli
& code:Fira Code
- Updated fonts to
Source Sans Pro
. - Updated
setup.py
update-link for modules. - Re-added missing StreamGear Code docs.
- Several minor tweaks and typos fixed.
- Updated
404.html
page. - Updated admonitions colors and beautified
custom.css
. - Replaced VideoGear & CamGear with OpenCV in CPU intensive examples.
- Updated
mkdocs.yml
with new changes and URLs. - Moved FAQ examples to bonus examples.
- Moved StreamGear primary modes to separate sections for better readability.
- Implemented separate overview and usage example pages for StreamGear primary modes.
- Improved StreamGear docs context and simplified language.
- Renamed StreamGear
overview
page tointroduction
. - Re-written Threaded-Queue-Mode from scratch with elaborated functioning.
- Replace Paypal with Liberpay in
FUNDING.yml
. - Updated FFmpeg Download links.
- Reverted UI change in CSS.
- Updated
changelog.md
and fixed clutter. - Updated
README.md
andmkdocs.yml
with new additions - Updated context for CamGear example.
- Restructured and added more content to docs.
- Updated comments in source code.
- Removed redundant data table tweaks from
custom.css
. - Re-aligned badges in README.md.
- Beautify
custom.css
. - Updated
mkdocs.yml
. - Updated context and fixed typos.
- Added missing helper methods in Reference.
- Updated Admonitions.
- Updates images assets.
- Bumped CodeCov.
- Logging:
- Improved logging level-names.
- Updated logging messages.
- Minor tweaks to
needs-more-info
template. - Updated issue templates and labels.
- Removed redundant imports.
Breaking Updates/Changes
- Virtually isolated all API specific dependencies, Now
ImportError
for API-specific dependencies will be raised only when any of them is missing at API's initialization. - Renamed
delete_safe
todelete_ext_safe
. - Dropped support for
frame_jpeg_quality
,frame_jpeg_optimize
,frame_jpeg_progressive
attributes from WebGear.
Bug-fixes
- CamGear:
- Hot-fix for Live Camera Streams:
- Added new event flag to keep check on stream read.
- Implemented event wait for
read()
to block it when source stream is busy. - Added and Linked
THREAD_TIMEOUT
with event wait timout. - Improved backward compatibility of new additions.
- Enforced logging for YouTube live.
- Hot-fix for Live Camera Streams:
- NetGear:
- Fixed Bidirectional Video-Frame Transfer broken with frame-compression:
- Fixed
return_data
interfering with return JSON-data in receive mode. - Fixed logic.
- Fixed
- Fixed color-subsampling interfering with colorspace.
- Patched external
simplejpeg
bug. Issue: https://gitlab.com/jfolz/simplejpeg/-/issues/11- Added
np.squeeze
to drop grayscale frame's 3rd dimension on Client's end.
- Added
- Fixed bug that cause server end frame dimensions differ from client's end when frame compression enabled.
- Fixed Bidirectional Video-Frame Transfer broken with frame-compression:
- NetGear_Async:
- Fixed bug related asyncio queue freezing on calling
join()
. - Fixed ZMQ connection bugs in bidirectional mode.
- Fixed several critical bugs in event loop handling.
- Fixed several bugs in bidirectional mode implementation.
- Fixed missing socket termination in both server and client end.
- Fixed
timeout
parameter logic. - Fixed typos in error messages.
- Fixed bug related asyncio queue freezing on calling
- WebGear_RTC:
- Fixed stream freezes after web-page reloading:
- Implemented new algorithm to continue stream even when webpage is reloaded.
- Inherit and modified
next_timestamp
VideoStreamTrack method for generating accurate timestamps. - Implemented
reset_connections
callable to reset all peer connections and recreate Video-Server timestamps. (Implemented by @kpetrykin) - Added
close_connection
endpoint in JavaScript to inform server page refreshing.(Thanks to @kpetrykin) - Added exclusive reset connection node
/close_connection
in routes. - Added
reset()
method to Video-Server class for manually resetting timestamp clock. - Added
reset_enabled
flag to keep check on reloads. - Fixed premature webpage auto-reloading.
- Added additional related imports.
- Fixed web-page reloading bug after stream ended:
- Disable webpage reload behavior handling for Live broadcasting.
- Disable reload CI test on Windows machines due to random failures.
- Improved handling of failed ICE connection.
- Fixed Assertion error bug:
- Source must raise MediaStreamError when stream ends instead of returning None-type.
- Fixed stream freezes after web-page reloading:
- WebGear
- Removed format specific OpenCV decoding and encoding support for WebGear.
- Helper:
- Regex bugs fixed:
- New improved regex for discovering supported encoders in
get_supported_vencoders
. - Re-implemented check for extracting only valid output protocols in
is_valid_url
. - Minor tweaks for better regex compatibility.
- New improved regex for discovering supported encoders in
- Bugfix related to OpenCV import:
- Bug fixed for OpenCV import comparison test failing with Legacy versions and throwing
ImportError
. - Replaced
packaging.parse_version
with more robustdistutils.version
.
- Bug fixed for OpenCV import comparison test failing with Legacy versions and throwing
- Fixed bug with
create_blank_frame
that throws error with gray frames:- Implemented automatic output channel correction inside
create_blank_frame
function. - Extended automatic output channel correction support to asyncio package.
- Implemented automatic output channel correction inside
- Implemented
RSTP
protocol validation as demuxer, since it's not a protocol but a demuxer. - Removed redundant
logger_handler
,mkdir_safe
,retrieve_best_interpolation
,capPropId
helper functions from asyncio package. Relatively imported helper functions from non-asyncio package. - Removed unused
aiohttp
dependency. - Removed
asctime
formatting from logging.
- Regex bugs fixed:
- StreamGear:
- Fixed Multi-Bitrate HLS VOD streams:
- Re-implemented complete workflow for Multi-Bitrate HLS VOD streams.
- Extended support to both Single-Source and Real-time Frames Modes.
- Fixed bugs with audio-video mapping.
- Fixed master playlist not generating in output.
- Fixed improper
-seg_duration
value resulting in broken pipeline. - Fixed expected aspect ratio not calculated correctly for additional streams.
- Fixed stream not terminating when provided input from external audio device.
- Fixed bugs related to external audio not mapped correctly in HLS format.
- Fixed OPUS audio fragments not supported with MP4 video in HLS.
- Fixed unsupported high audio bit-rate bug.
- Fixed Multi-Bitrate HLS VOD streams:
- Setup.py:
- Fixed
latest_version
returning incorrect version for some PYPI packages. - Removed
latest_version
variable support fromsimplejpeg
. - Fixed
streamlink
only supporting requests==2.25.1 on Windows. - Removed all redundant dependencies like
colorama
,aiofiles
,aiohttp
. - Fixed typos in dependencies.
- Fixed
- Setup.cfg:
- Replaced dashes with underscores to remove warnings.
- CI:
- Replaced buggy
starlette.TestClient
withasync-asgi-testclient
in WebGear_RTC - Removed
run()
method and replaced with pure asyncio implementation. - Added new
async-asgi-testclient
CI dependency. - Fixed
fake_picamera
class logger callingvidgear
imports prematurely before importingpicamera
class in tests.- Implemented new
fake_picamera
class logger inherently withlogging
module. - Moved
sys.module
logic for faking toinit.py
. - Added
__init__.py
to ignore in Codecov.
- Implemented new
- Fixed event loop closing prematurely while reloading:
- Internally disabled suspending event loop while reloading.
- Event Policy Loop patcher added for WebGear_RTC tests.
- Fixed
return_assets_path
path bug. - Fixed typo in
TimeoutError
exception import. - Fixed eventloop is already closed bug.
- Fixed eventloop bugs in Helper CI tests.
- Fixed several minor bugs related to new CI tests.
- Fixed bug in PiGear tests.
- Replaced buggy
- Docs:
- Fixed 404 page does not work outside the site root with mkdocs.
- Fixed markdown files comments not stripped when converted to HTML.
- Fixed missing heading in VideoGear.
- Typos in links and code comments fixed.
- Several minor tweaks and typos fixed.
- Fixed improper URLs/Hyperlinks and related typos.
- Fixed typos in usage examples.
- Fixed redundant properties in CSS.
- Fixed bugs in
mkdocs.yml
. - Fixed docs contexts and typos.
- Fixed
stream.release()
missing in docs. - Fixed several typos in code comments.
- Removed dead code from docs.
- Refactored Code and reduced redundancy.
- Fixed shutdown in
main.py
. - Fixed logging comments.
New Contributors
v0.2.1 (2021-04-25)⚓
New Features
- WebGear_RTC:
- A new API that is similar to WeGear API in all aspects but utilizes WebRTC standard instead of Motion JPEG for streaming.
- Now it is possible to share data and perform teleconferencing peer-to-peer, without requiring that the user install plugins or any other third-party software.
- Added a flexible backend for
aiortc
- a python library for Web Real-Time Communication (WebRTC). - Integrated all functionality and parameters of WebGear into WebGear_RTC API.
- Implemented JSON Response with a WebRTC Peer Connection of Video Server.
- Added a internal
RTC_VideoServer
server on WebGear_RTC, a inherit-class to aiortc's VideoStreamTrack API. - New Standalone UI Default theme v0.1.1 for WebGear_RTC from scratch without using 3rd-party assets. (by @abhiTronix)
- New
custom.js
andcustom.css
for custom responsive behavior. - Added WebRTC support to
custom.js
and ensured compatibility with WebGear_RTC. - Added example support for ICE framework and STUN protocol like WebRTC features to
custom.js
. - Added
resize()
function tocustom.js
to automatically adjustvideo
&img
tags for smaller screens. - Added WebGear_RTC support in main.py for easy access through terminal using
--mode
flag. - Integrated all WebGear_RTC enhancements to WebGear Themes.
- Added CI test for WebGear_RTC.
- Added complete docs for WebGear_RTC API.
- Added bare-minimum as well as advanced examples usage code.
- Added new theme images.
- Added Reference and FAQs.
- CamGear API:
- New Improved Pure-Python Multiple-Threaded Implementation:
- Optimized Threaded-Queue-Mode Performance. (PR by @bml1g12)
- Replaced regular
queue.full
checks followed by sleep with implicit sleep with blockingqueue.put
. - Replaced regular
queue.empty
checks followed by queue. - Replaced
nowait_get
with a blockingqueue.get
natural empty check. - Up-to 2x performance boost than previous implementations.
- New
THREAD_TIMEOUT
attribute to prevent deadlocks:- Added support for
THREAD_TIMEOUT
attribute to itsoptions
parameter. - Updated CI Tests and docs.
- Added support for
- New Improved Pure-Python Multiple-Threaded Implementation:
- WriteGear API:
- New more robust handling of default video-encoder in compression mode:
- Implemented auto-switching of default video-encoder automatically based on availability.
- API now selects Default encoder based on priority:
"libx264" > "libx265" > "libxvid" > "mpeg4"
. - Added
get_supported_vencoders
Helper method to enumerate Supported Video Encoders. - Added common handler for
-c:v
and-vcodec
flags.
- New more robust handling of default video-encoder in compression mode:
- NetGear API:
- New Turbo-JPEG compression with simplejpeg
- Implemented JPEG compression algorithm for 4-5% performance boost at cost of minor loss in quality.
- Utilized
encode_jpeg
anddecode_jpeg
methods to implement turbo-JPEG transcoding withsimplejpeg
. - Added options to control JPEG frames quality, enable fastest dct, fast upsampling to boost performance.
- Added new
jpeg_compression
,jpeg_compression_quality
,jpeg_compression_fastdct
,jpeg_compression_fastupsample
attributes. - Enabled fast dct by default with JPEG frames at 90%.
- Added Docs for JPEG Frame Compression.
- New Turbo-JPEG compression with simplejpeg
- WebGear API:
- New modular and flexible configuration for Custom Sources:
- Implemented more convenient approach for handling custom source configuration.
- Added new
config
global variable for this new behavior. - Now None-type
source
parameter value is allowed for defining own custom sources. - Added new Example case and Updates Docs for this feature.
- Added new CI Tests.
- New Browser UI Updates:
- New Standalone UI Default theme v0.1.0 for browser (by @abhiTronix)
- Completely rewritten theme from scratch with only local resources.
- New
custom.js
andcustom.css
for custom responsive behavior. - New sample glow effect with css.
- New sample click to full-screen behavior with javascript.
- Removed all third-party theme dependencies.
- Update links to new github server
abhiTronix/vidgear-vitals
- Updated docs with new theme's screenshots.
- Added
enable_infinite_frames
attribute for enabling infinite frames. - Added New modular and flexible configuration for Custom Sources.
- Bumped WebGear Theme Version to v0.1.1.
- Updated Docs and CI tests.
- New modular and flexible configuration for Custom Sources:
- ScreenGear API:
- Implemented Improved Pure-Python Multiple-Threaded like CamGear.
- Added support for
THREAD_TIMEOUT
attribute to itsoptions
parameter.
- StreamGear API:
- Enabled pseudo live-streaming flag
re
for live content.
- Enabled pseudo live-streaming flag
- Docs:
- Added new native docs versioning to mkdocs-material.
- Added new examples and few visual tweaks.
- Updated Stylesheet for versioning.
- Added new DASH video chunks at https://github.com/abhiTronix/vidgear-docs-additionals for StreamGear and Stabilizer streams.
- Added open-sourced "Tears of Steel" * project Mango Teaser video chunks.
- Added open-sourced "Subspace Video Stabilization" http://web.cecs.pdx.edu/~fliu/project/subspace_stabilization/ video chunks.
- Added support for DASH Video Thumbnail preview in Clappr within
custom.js
. - Added responsive clappr DASH player with bootstrap's
embed-responsive
. - Added new permalink icon and slugify to toc.
- Added "back-to-top" button for easy navigation.
- Helper:
- New GitHub Mirror with latest Auto-built FFmpeg Static Binaries:
- Replaced new GitHub Mirror
abhiTronix/FFmpeg-Builds
in helper.py - New CI maintained Auto-built FFmpeg Static Binaries.
- Removed all 3rd-party and old links for better compatibility and Open-Source reliability.
- Updated Related CI tests.
- Replaced new GitHub Mirror
- Added auto-font-scaling for
create_blank_frame
method. - Added
c_name
parameter togenerate_webdata
anddownload_webdata
to specify class. - A more robust Implementation of Downloading Artifacts:
- Added a custom HTTP
TimeoutHTTPAdapter
Adapter with a default timeout for all HTTP calls based on this GitHub comment. - Implemented http client and the
send()
method to ensure that the default timeout is used if a timeout argument isn't provided. - Implemented Requests session
with
block to exit properly even if there are unhandled exceptions. - Add a retry strategy to custom
TimeoutHTTPAdapter
Adapter with max 3 retries and sleep(backoff_factor=1
) between failed requests.
- Added a custom HTTP
- Added
create_blank_frame
method to create bland frames with suitable text.
- New GitHub Mirror with latest Auto-built FFmpeg Static Binaries:
- [CI] Continuous Integration:
- Added new fake frame generated for fake
picamera
class with numpy. - Added new
create_bug
parameter to fakepicamera
class for emulating various artificial bugs. - Added float/int instance check on
time_delay
for camgear and pigear. - Added
EXIT_CODE
to new timeout implementation for pytests to upload codecov report when no timeout. - Added auxiliary classes to fake
picamera
for facilitating the emulation. - Added new CI tests for PiGear Class for testing on all platforms.
- Added
shutdown()
function to gracefully terminate WebGear_RTC API. - Added new
coreutils
brew dependency. - Added handler for variable check on exit and codecov upload.
- Added
is_running
flag to WebGear_RTC to exit safely.
- Added new fake frame generated for fake
- Setup:
- New automated latest version retriever for packages:
- Implemented new
latest_version
method to automatically retrieve latest version for packages. - Added Some Dependencies.
- Implemented new
- Added
simplejpeg
package for all platforms.
- New automated latest version retriever for packages:
Updates/Improvements
- Added exception for RunTimeErrors in NetGear CI tests.
- WriteGear: Critical file write access checking method:
- Added new
check_WriteAccess
Helper method. - Implemented a new robust algorithm to check if given directory has write-access.
- Removed old behavior which gives irregular results.
- Added new
- Helper: Maintenance Updates
- Added workaround for Python bug.
- Added
safe_mkdir
tocheck_WriteAccess
to automatically create non-existential parent folder in path. - Extended
check_WriteAccess
Patch to StreamGear. - Simplified
check_WriteAccess
to handle Windows envs easily. - Updated FFmpeg Static Download URL for WriteGear.
- Implemented fallback option for auto-calculating bitrate from extracted audio sample-rate in
validate_audio
method.
- Docs: General UI Updates
- Updated Meta tags for og site and twitter cards.
- Replaced Custom dark theme toggle with mkdocs-material's official Color palette toggle
- Added example for external audio input and creating segmented MP4 video in WriteGear FAQ.
- Added example for YouTube streaming with WriteGear.
- Removed custom
dark-material.js
andheader.html
files from theme. - Added blogpost link for detailed information on Stabilizer Working.
- Updated
mkdocs.yml
andcustom.css
configuration. - Remove old hack to resize clappr DASH player with css.
- Updated Admonitions.
- Improved docs contexts.
- Updated CSS for version-selector-button.
- Adjusted files to match new themes.
- Updated welcome-bot message for typos.
- Removed redundant FAQs from NetGear Docs.
- Updated Assets Images.
- Updated spacing.
- CI:
- Removed unused
github.ref
from yaml. - Updated OpenCV Bash Script for Linux envs.
- Added
timeout-minutes
flag to github-actions workflow. - Added
timeout
flag to pytest. - Replaced Threaded Gears with OpenCV VideoCapture API.
- Moved files and Removed redundant code.
- Replaced grayscale frames with color frames for WebGear tests.
- Updated pytest timeout value to 15mins.
- Removed
aiortc
automated install on Windows platform within setup.py. - Added new timeout logic to continue to run on external timeout for GitHub Actions Workflows.
- Removed unreliable old timeout solution from WebGear_RTC.
- Removed
timeout_decorator
andasyncio_timeout
dependencies for CI. - Removed WebGear_RTC API exception from codecov.
- Implemented new fake
picamera
class to CI utils for emulating RPi Camera-Module Real-time capabilities. - Implemented new
get_RTCPeer_payload
method to receive WebGear_RTC peer payload. - Removed PiGear from Codecov exceptions.
- Disable Frame Compression in few NetGear tests failing on frame matching.
- Updated NetGear CI tests to support new attributes
- Removed warnings and updated yaml
- Added
pytest.ini
to address multiple warnings. - Updated azure workflow condition syntax.
- Added
- Update
mike
settings for mkdocs versioning. - Updated codecov configurations.
- Minor logging and docs updates.
- Implemented pytest timeout for azure pipelines for macOS envs.
- Added
aiortc
as external dependency inappveyor.yml
. - Re-implemented WebGear_RTC improper offer-answer handshake in CI tests.
- WebGear_RTC CI Updated with
VideoTransformTrack
to test stream play. - Implemented fake
AttributeError
for fake picamera class. - Updated PiGear CI tests to increment codecov.
- Update Tests docs and other minor tweaks to increase overall coverage.
- Enabled debugging and disabled exit 1 on error in azure pipeline.
- Removed redundant benchmark tests.
- Removed unused
- Helper: Added missing RSTP URL scheme to
is_valid_url
method. - NetGear_Async: Added fix for uvloop only supporting python>=3.7 legacies.
- Extended WebGear's Video-Handler scope to
https
. - CI: Remove all redundant 32-bit Tests from Appveyor:
- Appveyor 32-bit Windows envs are actually running on 64-bit machines.
- More information here: https://help.appveyor.com/discussions/questions/20637-is-it-possible-to-force-running-tests-on-both-32-bit-and-64-bit-windows
- Setup: Removed
latest_version
behavior from some packages. - NetGear_Async: Revised logic for handling uvloop for all platforms and legacies.
- Setup: Updated logic to install uvloop-"v0.14.0" for python-3.6 legacies.
- Removed any redundant code from webgear.
- StreamGear:
- Replaced Ordinary dict with Ordered Dict to use
move_to_end
method. - Moved external audio input to output parameters dict.
- Added additional imports.
- Updated docs to reflect changes.
- Replaced Ordinary dict with Ordered Dict to use
- Numerous Updates to Readme and
mkdocs.yml
. - Updated font to
FONT_HERSHEY_SCRIPT_COMPLEX
and enabled logging in create_blank_frame. - Separated channels for downloading and storing theme files for WebGear and WebGear_RTC APIs.
- Removed
logging
condition to always inform user in a event of FFmpeg binary download failure. - WebGear_RTC:
- Improved auto internal termination.
- More Performance updates through
setCodecPreferences
. - Moved default Video RTC video launcher to
__offer
.
- NetGear_Async: Added timeout to client in CI tests.
- Reimplemented and updated
changelog.md
. - Updated code comments.
- Setup: Updated keywords and classifiers.
- Bumped codecov.
Breaking Updates/Changes
- WriteGear will automatically switch video encoder to default if specified encoder not found.
- WriteGear will throw
RuntimeError
if no suitable default encoder found! - Removed format specific OpenCV decoding and encoding support for NetGear.
- Dropped support for
compression_format
,compression_param
attributes from NetGear. - Non-existent parent folder in
output_filename
value will no longer be considered as invalid in StreamGear and WriteGear APIs. - None-type
source
parameter value is allowed for WebGear and NetGear_Async for defining custom sources.
Bug-fixes
- CamGear: Fixed F821 undefined name 'queue' bug.
- NetGear_Async: Fixed
source
parameter missingNone
as default value. - Fixed uvloops only supporting python>=3.7 in NetGear_Async.
- Helper:
- Fixed Zombie processes in
check_output
method due a hidden bug in python. For reference: https://bugs.python.org/issue37380 - Fixed regex in
validate_video
method.
- Fixed Zombie processes in
- Docs:
- Invalid
site_url
bug patched in mkdocs.yml - Remove redundant mike theme support and its files.
- Fixed video not centered when DASH video in fullscreen mode with clappr.
- Fixed Incompatible new mkdocs-docs theme.
- Fixed missing hyperlinks.
- Invalid
- CI:
- Fixed NetGear Address bug
- Fixed bugs related to termination in WebGear_RTC.
- Fixed random CI test failures and code cleanup.
- Fixed string formating bug in Helper.py.
- Fixed F821 undefined name bugs in WebGear_RTC tests.
- NetGear_Async Tests fixes.
- Fixed F821 undefined name bugs.
- Fixed typo bugs in
main.py
. - Fixed Relative import bug in PiGear.
- Fixed regex bug in warning filter.
- Fixed WebGear_RTC frozen threads on exit.
- Fixed bugs in codecov bash uploader setting for azure pipelines.
- Fixed False-positive
picamera
import due to improper sys.module settings. - Fixed Frozen Threads on exit in WebGear_RTC API.
- Fixed deploy error in
VidGear Docs Deployer
workflow - Fixed low timeout bug.
- Fixed bugs in PiGear tests.
- Patched F821 undefined name bug.
- StreamGear:
- Fixed StreamGear throwing
Picture size 0x0 is invalid
bug with external audio. - Fixed default input framerate value getting discarded in Real-time Frame Mode.
- Fixed internal list-formatting bug.
- Fixed StreamGear throwing
- Fixed E999 SyntaxError bug in
main.py
. - Fixed Typo in bash script.
- Fixed WebGear freeze on reloading bug.
- Fixed anomalies in
install_opencv
bash script. - Helper: Bug Fixed in
download_ffmpeg_binaries
method. - Helper: Fixed OSError bug in
check_WriteAccess
method. - Helper: Fixed Input Audio stream bitrate test failing to detect audio-bitrate in certain videos with
validate_audio
method. - Fixed bugs in
requests
module's function arguments. - Fixed None-type stream bug in WebGear.
- Fixed random crashes in WebGear.
- Fixed numerous CI test bugs.
- Fixed several typos.
New Contributors
v0.2.0 (2021-01-01)⚓
New Features
- CamGear API:
- Support for various Live-Video-Streaming services:
- Added seamless support for live video streaming sites like Twitch, LiveStream, Dailymotion etc.
- Implemented flexible framework around
streamlink
python library with easy control over parameters and quality. - Stream Mode can now automatically detects whether
source
belong to YouTube or elsewhere, and handles it with appropriate API.
- Re-implemented YouTube URLs Handler:
- Re-implemented CamGear's YouTube URLs Handler completely from scratch.
- New Robust Logic to flexibly handing video and video-audio streams.
- Intelligent stream selector for selecting best possible stream compatible with OpenCV.
- Added support for selecting stream qualities and parameters.
- Implemented new
get_supported_quality
helper method for handling specified qualities - Fixed Live-Stream URLs not supported by OpenCV's Videocapture and its FFmpeg.
- Added additional
STREAM_QUALITY
andSTREAM_PARAMS
attributes.
- Support for various Live-Video-Streaming services:
- ScreenGear API:
- Multiple Backends Support:
- Added new multiple backend support with new
pyscreenshot
python library. - Made
pyscreenshot
the default API for ScreenGear, replacesmss
. - Added new
backend
parameter for this feature while retaining previous behavior. - Added native automated RGB to BGR conversion for default PIL backend.
- Kept support for old
mss
for old compatibility and multi-screen support. - Added native dimensional support for multi-screen.
- Added support all input from all multiple screens.
- Updated ScreenGear Docs.
- Updated ScreenGear CI tests.
- Added new multiple backend support with new
- Multiple Backends Support:
- StreamGear API:
- Changed default behaviour to support complete video transcoding.
- Added
-livestream
attribute to support live-streaming. - Added additional parameters for
-livestream
attribute functionality. - Updated StreamGear Tests.
- Updated StreamGear docs.
- Stabilizer Class:
- New Robust Error Handling with Blank Frames:
- Elegantly handles all crashes due to Empty/Blank/Dark frames.
- Stabilizer throws Warning with this new behavior instead of crashing.
- Updated CI test for this feature.
- New Robust Error Handling with Blank Frames:
- Docs:
- Automated Docs Versioning:
- Implemented Docs versioning through
mike
API. - Separate new workflow steps to handle different versions.
- Updated docs deploy worflow to support
release
anddev
builds. - Added automatic version extraction from github events.
- Added
version-select.js
andversion-select.css
files.
- Implemented Docs versioning through
- Toggleable Dark-White Docs Support:
- Toggle-button to easily switch dark, white and preferred theme.
- New Updated Assets for dark backgrounds
- New css, js files/content to implement this behavior.
- New material icons for button.
- Updated scheme to
slate
inmkdocs.yml
.
- New Theme and assets:
- New
purple
theme withdark-purple
accent color. - New images assets with updated transparent background.
- Support for both dark and white theme.
- Increased
rebufferingGoal
for dash videos. - New updated custom 404 page for docs.
- New
- Issue and PR automated-bots changes
- New
need_info.yml
YAML Workflow. - New
needs-more-info.yml
Request-Info template. - Replaced Request-Info templates.
- Improved PR and Issue welcome formatting.
- New
- Added custom HTML pages.
- Added
show_root_heading
flag to disable headings in References. - Added new
inserAfter
function to version-select.js. - Adjusted hue for dark-theme for better contrast.
- New usage examples and FAQs.
- Added
gitmoji
for commits.
- Automated Docs Versioning:
- Continuous Integration:
- Maintenance Updates:
- Added support for new
VIDGEAR_LOGFILE
environment variable in Travis CI. - Added missing CI tests.
- Added logging for helper functions.
- Added support for new
- Azure-Pipeline workflow for MacOS envs
- Added Azure-Pipeline Workflow for testing MacOS environment.
- Added codecov support.
- GitHub Actions workflow for Linux envs
- Added GitHub Action work-flow for testing Linux environment.
- New YAML to implement GitHub Action workflow for python 3.6, 3.7, 3,8 & 3.9 matrices.
- Added Upload coverage to Codecov GitHub Action workflow.
- New codecov-bash uploader for Azure Pipelines.
- Maintenance Updates:
- Logging:
- Added file support
- Added
VIDGEAR_LOGFILE
environment variable to manually add file/dir path. - Reworked
logger_handler()
Helper methods (in asyncio too). - Added new formatter and Filehandler for handling logger files.
- Added
- Added
restore_levelnames
auxiliary method for restoring logging levelnames.
- Added file support
- Added auto version extraction from package
version.py
in setup.py.
Updates/Improvements
- Added missing Lazy-pirate auto-reconnection support for Multi-Servers and Multi-Clients Mode in NetGear API.
- Added new FFmpeg test path to Bash-Script and updated README broken links.
- Asset Cleanup:
- Removed all third-party javascripts from projects.
- Linked all third-party javascript directly.
- Cleaned up necessary code from CSS and JS files.
- Removed any copyrighted material or links.
- Rewritten Docs from scratch:
- Improved complete docs formatting.
- Simplified language for easier understanding.
- Fixed
mkdocstrings
showing root headings. - Included all APIs methods to
mkdocstrings
docs. - Removed unnecessary information from docs.
- Corrected Spelling and typos.
- Fixed context and grammar.
- Removed
motivation.md
. - Renamed many terms.
- Fixed hyper-links.
- Reformatted missing or improper information.
- Fixed context and spellings in Docs files.
- Simplified language for easy understanding.
- Updated image sizes for better visibility.
- Bash Script: Updated to Latest OpenCV Binaries version and related changes
- Docs: Moved version-selector to header and changed default to alias.
- Docs: Updated
deploy_docs.yml
for releasing dev, stable, and release versions. - Re-implemented overridden material theme.
- Updated docs with all new additions and examples.
- CamGear: CI Stream Mode test updated.
- Updated ReadMe.md badges.
- Updated CI tests.
- Updated
setup.py
with new features. - Updated
contributing.md
andReadMe.md
. - Updated OpenCV version to
4.5.1-dev
in bash scripts - Updated
changelog.md
. - Moved WebGear API to Streaming Gears.
- Bumped Codecov.
- UI changes to version-select.js
- Docs: Retitle the versions and
mkdocs.yml
formatting updated. - Docs: Version Selector UI reworked and other minor changes.
Breaking Updates/Changes
-
y_tube
parameter renamed asstream_mode
in CamGear API! - Removed Travis support and
travis.yml
deleted.
Bug-fixes
- Fixed StreamGear API Limited Segments Bug
- Fixed Missing links in docs and bump up version.
- CI: Fixed Appveyor need newer VM image to support Python 3.9.x matrix.
- ScreenGear BugFix: Fixed Error Handling and updated CI Tests.
- Fixed improper
mkdocs.yml
variables. - Fixed GStreamer plugin support in bash scripts.
- Fixed typos in YAMLs and docs.
- Docs: Fixed Docs Deployer YAML bug for CI envs.
- Fixed wrong import in YAML.
- Fixed visible hyperlink on hover in dark-toggle button.
- Docs: Deployer YAML bug fixed.
- Docs YAML: issue jimporter/mike#33 patched and fixed
fetch-depth=0
. - Docs:
version-select.js
bug fixed. - Docs: UI Bugs Fixed.
- CI: Codecov bugfixes.
- Azure-Pipelines Codecov BugFixes.
- Fixed
version.json
not detecting properly inversion-select.js
. - Fixed images not centered inside
<figure>
tag. - Fixed Asset Colors.
- Fixed failing CI tests.
- Fixed Several logging bugs.
v0.1.9 (2020-08-31)⚓
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 calculate 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 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 and CI 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.
v0.1.8 (2020-06-12)⚓
New Features
- NetGear API:
- Multiple Clients support:
- 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.
- Implemented a algorithm where NetGear rather than doing a blocking receive, will now:
- Performance Updates:
- 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.
- Multiple Clients support:
- 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 - [x] 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.
- 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.
v0.1.7 (2020-04-29)⚓
New Features
- WebGear API:
- Added a robust Live Video Server API that can transfer live video frames to any web browser on the network in real-time.
- Implemented a flexible asyncio wrapper around
starlette
ASGI Application Server. - Added seamless access to various starlette's Response classes, Routing tables, Static Files, Template engine(with Jinja2), etc.
- Added a special internal access to VideoGear API and all its parameters.
- Implemented a new Auto-Generation Work-flow to generate/download & thereby validate WebGear API data files from its GitHub server automatically.
- Added on-the-go dictionary parameter in WebGear to tweak performance, Route Tables and other internal properties easily.
- Added new simple & elegant default Bootstrap Cover Template for WebGear Server.
- Added
__main__.py
to directly run WebGear Server through the terminal. - Added new gif and related docs for WebGear API.
- Added and Updated various CI tests for this API.
- NetGear_Async API:
- Designed NetGear_Async asynchronous network API built upon ZeroMQ's asyncio API.
- Implemented support for state-of-the-art asyncio event loop
uvloop
at its backend. - Achieved Unmatchable high-speed and lag-free video streaming over the network with minimal resource constraint.
- Added exclusive internal wrapper around VideoGear API for this API.
- Implemented complete server-client handling and options to use variable protocols/patterns for this API.
- Implemented support for all four ZeroMQ messaging patterns: i.e
zmq.PAIR
,zmq.REQ/zmq.REP
,zmq.PUB/zmq.SUB
, andzmq.PUSH/zmq.PULL
. - Implemented initial support for
tcp
andipc
protocols. - Added new Coverage CI tests for NetGear_Async Network Gear.
- Added new Benchmark tests for benchmarking NetGear_Async against NetGear.
- Asynchronous Enhancements:
- Added
asyncio
package to for handling asynchronous APIs. - Moved WebGear API(webgear.py) to
asyncio
and created separate asynciohelper.py
for it. - Various Performance tweaks for Asyncio APIs with concurrency within a single thread.
- Moved
__main__.py
to asyncio for easier access to WebGear API through the terminal. - Updated
setup.py
with new dependencies and separated asyncio dependencies.
- Added
- General Enhancements:
- Added new highly-precise Threaded FPS class for accurate benchmarking with
time.perf_counter
python module. - Added a new Gitter community channel.
- Added a new Reducer function to reduce the frame size on-the-go.
- Add Flake8 tests to Travis CI to find undefined names. (PR by @cclauss)
- Added a new unified
logging handler
helper function for vidgear.
- Added new highly-precise Threaded FPS class for accurate benchmarking with
Updates/Improvements
- Re-implemented and simplified logic for NetGear Async server-end.
- Added new dependencies for upcoming asyncio updates to
setup.py
. - Added
retry
function and replacedwget
withcurl
for Linux test envs. - Bumped OpenCV to latest
4.2.0-dev
for Linux test envs. - Updated YAML files to reflect new changes to different CI envs.
- Separated each API logger with a common helper method to avoid multiple copies.
- Limited Importing OpenCV API version check's scope to
helper.py
only. - Implemented case for incorrect
color_space
value in ScreenGear API. - Removed old conflicting logging formatter with a common method and expanded logging.
- Improved and added
shutdown
function for safely stopping frame producer threads in WebGear API. - Re-implemented and simplified all CI tests with maximum code-coverage in mind.
- Replaced old
mkdir
function with newmkdir_safe
helper function for creating directories safely. - Updated ReadMe.md with updated diagrams, gifs and information.
- Improve, structured and Simplified the Contribution Guidelines.
- Bundled CI requirements in a single command.(Suggested by @cclauss)
- Replaced line endings CRLF with LF endings.
- Added dos2unix for Travis OSX envs.
- Bumped Codecov to maximum.
Breaking Updates/Changes
Bug-fixes
- Fixed Major NetGear_Async bug where
__address
and__port
are not set in async mode.(PR by @otter-in-a-suit) - Fixed Major PiGear Color-space Conversion logic bug.
- Workaround for
CAP_IMAGES
error in YouTube Mode. - Replaced incorrect
terminate()
withjoin()
in PiGear. - Removed
uvloop
for windows as still NOT yet supported. - Refactored Asynchronous Package name
async
toasyncio
, since it is used as Keyword in python>=3.7 (raises SyntaxError). - Fixed unfinished close of event loops bug in WebGear API.
- Fixed NameError in helper.py.
- Added fix for OpenCV installer failure on Linux test envs.
- Fixed undefined NameError in
helper.py
context. (@cclauss) - Fixed incorrect logic while pulling frames from ScreenGear API.
- Fixed missing functions in
__main__.py
. - Fixed Typos and definitions in docs.
- Added missing
camera_num
parameter to VideoGear. - Added OpenSSL's [SSL: CERTIFICATE_VERIFY_FAILED] bug workaround for macOS envs.
- Removed
download_url
meta from setup.py. - Removed PiGear from CI completely due to hardware emulation limitation.
- Removed VideoCapture benchmark tests for macOS envs.
- Removed trivial
__main__.py
from codecov. - Removed several redundant
try-catch
loops. - Renamed
youtube_url_validation
asyoutube_url_validator
. - Several minor wrong/duplicate variable definitions and various bugs fixed.
- Fixed, Improved & removed many Redundant CI tests for various APIs.
New Contributors
v0.1.6 (2020-01-01)⚓
New Features
- NetGear API:
- Added powerful ZMQ Authentication & Data Encryption features for NetGear API:
- Added exclusive
secure_mode
param for enabling it. - Added support for two most powerful
Stonehouse
&Ironhouse
ZMQ security mechanisms. - Added smart auth-certificates/key generation and validation features.
- Added exclusive
- Implemented Robust Multi-Servers support for NetGear API:
- Enables Multiple Servers messaging support with a single client.
- Added exclusive
multiserver_mode
param for enabling it. - Added support for
REQ/REP
&PUB/SUB
patterns for this mode. - Added ability to send additional data of any datatype along with the frame in realtime in this mode.
- Introducing exclusive Bidirectional Mode for bidirectional data transmission:
- Added new
return_data
parameter torecv()
function. - Added new
bidirectional_mode
attribute for enabling this mode. - Added support for
PAIR
&REQ/REP
patterns for this mode - Added support for sending data of any python datatype.
- Added support for
message
parameter for non-exclusive primary modes for this mode.
- Added new
- Implemented compression support with on-the-fly flexible frame encoding for the Server-end:
- Added initial support for
JPEG
,PNG
&BMP
encoding formats . - Added exclusive options attribute
compression_format
&compression_param
to tweak this feature. - Client-end will now decode frame automatically based on the encoding as well as support decoding flags.
- Added initial support for
- Added
force_terminate
attribute flag for handling force socket termination at the Server-end if there's latency in the network. - Implemented new Publish/Subscribe(
zmq.PUB/zmq.SUB
) pattern for seamless Live Streaming in NetGear API.
- Added powerful ZMQ Authentication & Data Encryption features for NetGear API:
- PiGear API:
- Added new threaded internal timing function for PiGear to handle any hardware failures/frozen threads.
- PiGear will not exit safely with
SystemError
if Picamera ribbon cable is pulled out to save resources. - Added support for new user-defined
HWFAILURE_TIMEOUT
options attribute to alter timeout.
- VideoGear API:
- Added
framerate
global variable and removed redundant function. - Added
CROP_N_ZOOM
attribute in Videogear API for supporting Crop and Zoom stabilizer feature.
- Added
- WriteGear API:
- Added new
execute_ffmpeg_cmd
function to pass a custom command to its FFmpeg pipeline.
- Added new
- Stabilizer class:
- Added new Crop and Zoom feature.
- Added
crop_n_zoom
param for enabling this feature.
- Added
- Updated docs.
- Added new Crop and Zoom feature.
- CI & Tests updates:
- Replaced python 3.5 matrices with latest python 3.8 matrices in Linux environment.
- Added full support for Codecov in all CI environments.
- Updated OpenCV to v4.2.0-pre(master branch).
- Added various Netgear API tests.
- Added initial Screengear API test.
- More test RTSP feeds added with better error handling in CamGear network test.
- Added tests for ZMQ authentication certificate generation.
- Added badge and Minor doc updates.
- Added VidGear's official native support for MacOS environments.
Updates/Improvements
- Replace
print
logging commands with python's logging module completely. - Implemented encapsulation for class functions and variables on all gears.
- Updated support for screen casting from multiple/all monitors in ScreenGear API.
- Updated ScreenGear API to use Threaded Queue Mode by default, thereby removed redundant
THREADED_QUEUE_MODE
param. - Updated bash script path to download test dataset in
$TMPDIR
rather than$HOME
directory for downloading testdata. - Implemented better error handling of colorspace in various videocapture APIs.
- Updated bash scripts, Moved FFmpeg static binaries to
github.com
. - Updated bash scripts, Added additional flag to support un-secure apt sources.
- CamGear API will now throw
RuntimeError
if source provided is invalid. - Updated threaded Queue mode in CamGear API for more robust performance.
- Added new
camera_num
to support multiple Picameras. - Moved thread exceptions to the main thread and then re-raised.
- Added alternate github mirror for FFmpeg static binaries auto-installation on windows oses.
- Added
colorlog
python module for presentable colored logging. - Replaced
traceback
withsys.exc_info
. - Overall APIs Code and Docs optimizations.
- Updated Code Readability and Wiki Docs.
- Updated ReadMe & Changelog with the latest changes.
- Updated Travis CI Tests with support for macOS environment.
- Reformatted & implemented necessary MacOS related changes and dependencies in
travis.yml
.
Breaking Updates/Changes
- Python 2.7 legacy support dropped completely.
- Source-code Relicensed to Apache 2.0 License.
- Python 3+ are only supported legacies for installing v0.1.6 and above.
- Python 2.7 and 3.4 legacies support dropped from CI tests.
Bug-fixes
- Reimplemented
Pub/Sub
pattern for smoother performance on various networks. - Fixed Assertion error in CamGear API during colorspace manipulation.
- Fixed random freezing in
Secure Mode
and several related performance updates - Fixed
multiserver_mode
not working properly over some networks. - Fixed assigned Port address ignored bug (commit 073bca1).
- Fixed several wrong definition bugs from NetGear API(commit 8f7153c).
- Fixed unreliable dataset video URL(rehosted file on
github.com
). - Disabled
overwrite_cert
for client-end in NetGear API. - Disabled Universal Python wheel builds in
setup.cfg
file. - Removed duplicate code to import MSS(@BoboTiG) from ScreenGear API.
- Eliminated unused redundant code blocks from library.
- Fixed Code indentation in
setup.py
and updated new release information. - Fixed code definitions & Typos.
- Fixed several bugs related to
secure_mode
&multiserver_mode
Modes. - Fixed various macOS environment bugs.
New Contributors
v0.1.5 (2019-07-24)⚓
New Features
- Added new ScreenGear API, supports Live ScreenCasting.
- Added new NetGear API, aids real-time frame transfer through messaging(ZmQ) over network.
- Added new new Stabilizer Class, for minimum latency Video Stabilization with OpenCV.
- Added Option to use API's standalone.
- Added Option to use VideoGear API as internal wrapper around Stabilizer Class.
- Added new parameter
stabilize
to API, to enable or disable Video Stabilization. - Added support for
**option
dict attributes to update VidGear's video stabilizer parameters directly. - Added brand new logo and functional block diagram (
.svg
) in readme.md - Added new pictures and GIFs for improving readme.md readability
- Added new
contributing.md
andchangelog.md
for reference. - Added
collections.deque
import in Threaded Queue Mode for performance consideration - Added new
install_opencv.sh
bash scripts for Travis cli, to handle OpenCV installation. - Added new Project Issue & PR Templates
- Added new Sponsor Button(
FUNDING.yml
)
Updates/Improvements
- Updated New dependencies:
mss
,pyzmq
and rejected redundant ones. - Revamped and refreshed look for
readme.md
and added new badges. - Updated Releases Documentation completely.
- Updated CI tests for new changes
- Updated Code Documentation.
- Updated bash scripts and removed redundant information
- Updated
Youtube video
URL in tests - Completely Reformatted and Updated Wiki Docs with new changes.
Breaking Updates/Changes
- Implemented experimental Threaded Queue Mode(a.k.a Blocking Mode) for fast, synchronized, error-free multi-threading.
- Renamed bash script
pre-install.sh
toprepare_dataset.sh
- [x] downloads opensourced test datasets and static FFmpeg binaries for debugging. - Changed
script
folder location tobash/script
. -
Python 3.4
removed from Travis CI tests.
Bug-fixes
- Temporarily fixed Travis CI bug: Replaced
opencv-contrib-python
with OpenCV built from scratch as dependency. - Fixed CI Timeout Bug: Disable Threaded Queue Mode for CI Tests
- Fixes**
sys.stderr.close()
throws ValueError bug: Replacedsys.close()
withDEVNULL.close()
- Fixed Youtube Live Stream bug that return
NonType
frames in CamGear API. - Fixed
NoneType
frames bug in PiGear class on initialization. - Fixed Wrong function definitions
- Removed
/xe2
unicode bug from Stabilizer class. - Fixed
**output_params
KeyError bug in WriteGear API - Fixed subprocess not closing properly on exit in WriteGear API.
- Fixed bugs in ScreenGear: Non-negative
monitor
values - Fixed missing import, typos, wrong variable definitions
- Removed redundant hack from
setup.py
- Fixed Minor YouTube playback Test CI Bug
- Fixed new Twitter Intent
- Fixed bug in bash script that not working properly due to changes at server end.
v0.1.4 (2019-05-11)⚓
New Features
- Added new WriteGear API: for enabling lossless video encoding and compression(built around FFmpeg and OpenCV Video Writer)
- Added YouTube Mode for direct Video Pipelining from YouTube in CamGear API
- Added new
y_tube
to access YouTube Mode in CamGear API. - Added flexible Output file Compression control capabilities in compression-mode(WriteGear).
- Added
-output_dimensions
special parameter to WriteGear API. - Added new
helper.py
to handle special helper functions. - Added feature to auto-download and configure FFmpeg Static binaries(if not found) on Windows platforms.
- Added
-input_framerate
special parameter to WriteGear class to change/control output constant framerate in compression mode(WriteGear). - Added new Direct Video colorspace Conversion capabilities in CamGear and PiGear API.
- Added new
framerate
class variable for CamGear API, to retrieve input framerate. - Added new parameter
backend
- [x] changes the backend of CamGear's API - Added automatic required prerequisites installation ability, when installation from source.
- Added Travis CI Complete Integration for Linux-based Testing for VidGear.
- Added and configured
travis.yml
- Added Appveyor CI Complete Integration for Windows-based Testing in VidGear.
- Added and configured new
appveyor.yml
- Added new bash script
pre-install.sh
to download opensourced test datasets and static FFmpeg binaries for debugging. - Added several new Tests(including Benchmarking Tests) for each API for testing with
pytest
. - Added license to code docs.
- Added
Say Thank you!
badge toReadme.md
.
Updates/Improvements
- Removed redundant dependencies
- Updated
youtube-dl
as a dependency, as required bypafy
's backend. - Updated common VideoGear API with new parameter.
- Update robust algorithm to auto-detect FFmpeg executables and test them, if failed, auto fallback to OpenCV's VideoWriter API.
- Improved system previously installed OpenCV detection in setup.py.
- Updated setup.py with hack to remove bullets from pypi description.
- Updated Code Documentation
- Reformatted & Modernized readme.md with new badges.
- Reformatted and Updated Wiki Docs.
Breaking Updates/Changes
- Removed
-height
and-width
parameter from CamGear API. - Replaced dependency
opencv-python
withopencv-contrib-python
completely
Bug-fixes
- Windows Cross-Platform fix: replaced dependency
os
withplatform
in setup.py. - Fixed Bug: Arises due to spaces in input
**options
/**output_param
dictionary keys. - Fixed several wrong/missing variable & function definitions.
- Fixed code uneven indentation.
- Fixed several typos in docs.
v0.1.3 (2019-04-07)⚓
Bug-fixes
- Patched Major PiGear Bug: Incorrect import of PiRGBArray function in PiGear Class
- Several Fixes for backend
picamera
API handling during frame capture(PiGear) - Fixed missing frame variable initialization.
- Fixed minor typos
v0.1.2 (2019-03-27)⚓
New Features
- Added easy Source manipulation feature in CamGear API, to control features like
resolution, brightness, framerate etc.
- Added new
**option
parameter to CamGear API, provides the flexibility to manipulate input stream directly. - Added new parameters for Camgear API for time delay and logging.
- Added new Logo to readme.md
- Added new Wiki Documentation.
Updates/Improvements
- Reformatted readme.md.
- Updated Wiki Docs with new changes.
Bug-fixes
- Improved Error Handling in CamGear & PiGear API.
- Fixed minor typos in docs.
Pull Requests
- PR #4
v0.1.1 (2019-03-24)⚓
New Features
- Release ViGear binaries on the Python Package Index (PyPI)
- Added new and configured
setup.py
&setup.cfg
Bug-fixes
- Fixed PEP bugs: added and configured properly
__init__.py
in each folder - Fixed PEP bugs: improved code Indentation
- Fixed wrong imports: replaced
distutils.core
withsetuptools
- Fixed readme.md
v0.1.0 (2019-03-17)⚓
New Features
- Initial Release
- Converted my
imutils
PR into Python Project. - Renamed conventions and reformatted complete source-code from scratch.
- Added support for both python 2.7 and 3 legacies
- Added new multi-threaded CamGear, PiGear, and VideoGear APIs
- Added multi-platform compatibility
- Added robust & flexible control over the source in PiGear API.
Last update: July 5, 2022