Release 1.14.0 of the Amazon Kinesis Video Streams Producer SDK for Java (Feb 4, 2026)
LatestWhat's New
IPV6 support, multi-concurrent client support, event metadata support, JavaDocs, and JNI improvements.
JNI
- Moved from the Producer C++ Repository. (#212)
- Sped up JNI build times around 50-60x. (CPP#1239)
- Created a new CMakeLists script for this project. (#212)
- Added a wiki page with instructions on how to build the JNI.
SDK
- Added IPv6 and dual-stack support. (#205, #233)
- Added support for multiple concurrent clients in the same process. (#245)
- Added support fragment tagging with S3 delivery and notifications. (#283)
Samples
- Added a new sample that polls PIC for stream and client metrics, then writes them into a file. (#221)
Bug Fixes and Improvements
JNI
Concurrent Client Support
- Removed global client references. (#245)
- Introduced
clientRegistryandclientJVMContextto manage JVM references. (#245) - Addressed a race condition where creating or freeing a client at the same time as a log print may cause a crash. (#261, #267, #272)
PIC Integration
- Updated JNI to the latest (v1.3.0) PIC models. (#203, #242)
- Added support for the
RetryStrategyconfiguration to PIC client. (#242)
- Added support for the
- Adjusted Java to PIC object translation by considering the struct version passed in from the Java side. (#242)
- Added a new JNI method to enable PIC's custom memory allocator. (#221)
Logging & Stability Enhancements
- Fixed an infinite loop with the logging in the shutdown path. (CPP#1237)
- Fixed
logPrintFunc()to preserve (not swallow) pending JNI exceptions during logging operations. (#241) - Added additional safety checks for nulls and freed values in JNI and JVM method calls. (#231, #247, #258, #260)
- Enhanced the build error message when Java is not found. (#212)
- Used
jlongtype instead ofUINT64type for additional cross-platform compatibility. (#229)
Producer Java SDK
Testing Improvements
- Wrote additional unit and integration tests using fault injection to simulate concurrent multi-track, multi-stream, multi-client SDK usages featuring invalid SDK usages, invalid client and stream configurations, permission issues, and bad media sources producing bad framesets to validate robustness (failing streams won't impact others), error handling, error propagation, and cleanup. (#229, #230, #231, #232, #233, #234, #235, #242, #244, #246, #247, #248, #249, #250, #257, #267, #274, #276, #277, #283)
Documentation
- Enhanced developer documentation by writing JavaDocs across core classes. (#209, #229, #232, #234, #238, #240, #242, #243, #249, #255, #256, #283, #289)
- Created new annotation
@CalledByNativeCodeand annotated all Java methods called by the JNI layer. (#237)
Optimizations
- Optimized
PutFramepath by removing redundant logs and metrics calculations. (#279)
Observability
- Implemented MKV dump to file feature. (#226)
- Added stream names and API operation context to the thread names and logs. (#224, #240, #254, #269)
- Enhanced stream identification via
getSummary()for multi-tenant logging. (#243) - Captured, logged, and propagate Throwables to handle Errors. (#224)
- Implemented uploadHandle number tracking. (#226)
- Added a new client parameter to set up PIC's custom memory trackers. (#221)
Robustness & Concurrency
- Made
KinesisVideoFrameimmutable. (#230) - Made
KinesisVideoCredentialsimmutable. (#234) - Made
Tags[]immutable. (#250) - Added additional preconditions and state safety checks. (#244)
- Adjusted
KinesisVideoCredentialsto prevent the invalid configurations with expiration. (#232) - Fixed an interaction between
createStreamSyncandcachedServiceCallbacksProviderwhere the synchronous delegate caused the streamReady callback to be triggered before the listener was set up. (#268)- Created an "in progress stream" object to allow callbacks to be called while the native stream object is being initialized. (#243)
- Added logic to make sure
CompletionCallbackis only called once, synchronizing the sender and receiver threads and maintain anExitHistoryfor the thread exits. (#267) - Created factory methods for
ClientInfoandDeviceInfoto prevent version mismatches. (#242)
Samples
Threading & Concurrency
- Fixed the API caching service callbacks sample implementation to maintain the async delegate pattern. (#270)
- This maintains the locking order to ensure there are no deadlocks.
- Fixed a race condition to synchronize the frame generator's final frame and the
stopStream()call. (#218) - Updated
ImageFileMediaSourceConfigurationto accept a custom thread name parameter that gets used to set the thread name of the frames-generator thread, and modifiedDemoAppMainto pass in the stream name for thread naming. (#253)
Media processing
- Adjusted the frame timecodes generation for consistent framerate. (#217)
- Adjusted metadata frequency to once per fragment (25 frames per sample fragment) instead of once every 8 frames. (#266)
Error handling
- Added an exception when
MediaSource.start()is called without callinginitialize(). (#249)
Dependency Updates
- Updated org.apache.commons:commons-lang3 from
3.12.0to3.18.0. (#228) - Updated log4j from
2.17.1to2.25.3. (#290) - Updated AWS SDK for Java v1 from
1.11.602to1.12.788. (#236)- This resolved an issue with the HTTP error code translation in Java 17 and 21.
Note
We plan to update this project to use AWS SDK for Java v2 in an upcoming release due to end of support announcement. This version update will not be not backwards compatible.
- Updated Kinesis Video Streams PIC from
v1.2.0tov1.3.1. (#284, #291)- The latest updates include logging enhancements and accepting the
RetryStrategyclient configuration configuration paramter that was previously ignored.
- The latest updates include logging enhancements and accepting the
- Added jacoco-maven-plugin
0.8.11to generate code coverage reports. (#206, #214) - Added maven-javadoc-plugin
3.6.3to generate JavaDoc HTML site. (#227)
Developer & CI/CD Enhancements
Documentation
- Created an overview page with explanations of JNI and PIC, and deployed JavaDocs to GitHub pages. (#227)
Cross-platform support
- Added Windows, Intel Mac, and Apple Silicon Mac to the CI while also automatically rebuilding the latest JNI library based on the code changes. (#205, #273)
- Ran all the sample applications in the CI on all the different platforms. (#205)
- Added a new action that generates the latest JNI libraries and commits it after the rest of the CI/CD passes. (#282, #286)
Note
The Raspberry Pi pre-built JNI is not vended in this release. Refer to the wiki page for instructions on how to compile the JNI for your Raspberry Pi.
Performance Monitoring & Media Validation
- Created Python scripts to capture runtime stats and plot a graph of the CPU, RAM, and content view usage of the samples. (#213, #220, #221, #222, #223, #263)
- Generated and uploaded a test report containing the CPU, RAM, and content view usage graphs for each CI combination for every pull request. (#213, #221, #222)
- Created Python script utilities for ListFragments and GetMediaForFragmentList. (#219)
- Validated end-to-end media integrity for every pull request. (#219, #226)
- Added a new workflow instrumenting multiple concurrent KVS producer instances (in different processes) with metrics collection via the Python scripts. (#222)
Testing & Coverage
- Fixed various flaky unit and integration tests. (#259, #276, #283)
- Added a new action that uploads the code coverage reports to codecov.io for detailed history. (#206)
- Added new test utilities to capture the PIC logs (#242), create temporary test stream resources (#267), and check for thread leaks (#267).
Code Quality
- Added a pull request template to match the other repositories. (#208, #214)
- Added a new action to validate the template format was followed. (#208)
- Added a new action to run the samples using the Google Undefined Behavior Sanitizer. (#251)
- Added a new action that runs a CodeQL scan on every pull request and automatically on a recurring schedule. (#207)
Note
The development branch containing commits between this release (v1.14.0) and v1.12.2 has been archived into the release-v1.14.0 branch.