Skip to content

Release 1.14.0 of the Amazon Kinesis Video Streams Producer SDK for Java (Feb 4, 2026)

Latest

Choose a tag to compare

@sirknightj sirknightj released this 04 Feb 20:31
7a68e3f

What'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

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 clientRegistry and clientJVMContext to 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 RetryStrategy configuration to PIC client. (#242)
  • 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 jlong type instead of UINT64 type 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

Optimizations

  • Optimized PutFrame path 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 KinesisVideoFrame immutable. (#230)
  • Made KinesisVideoCredentials immutable. (#234)
  • Made Tags[] immutable. (#250)
  • Added additional preconditions and state safety checks. (#244)
  • Adjusted KinesisVideoCredentials to prevent the invalid configurations with expiration. (#232)
  • Fixed an interaction between createStreamSync and cachedServiceCallbacksProvider where 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 CompletionCallback is only called once, synchronizing the sender and receiver threads and maintain an ExitHistory for the thread exits. (#267)
  • Created factory methods for ClientInfo and DeviceInfo to 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 ImageFileMediaSourceConfiguration to accept a custom thread name parameter that gets used to set the thread name of the frames-generator thread, and modified DemoAppMain to 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 calling initialize(). (#249)

Dependency Updates

  • Updated org.apache.commons:commons-lang3 from 3.12.0 to 3.18.0. (#228)
  • Updated log4j from 2.17.1 to 2.25.3. (#290)
  • Updated AWS SDK for Java v1 from 1.11.602 to 1.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.0 to v1.3.1. (#284, #291)
    • The latest updates include logging enhancements and accepting the RetryStrategy client configuration configuration paramter that was previously ignored.
  • Added jacoco-maven-plugin 0.8.11 to generate code coverage reports. (#206, #214)
  • Added maven-javadoc-plugin 3.6.3 to 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

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.