Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/actions/publish/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ inputs:
required: false
default: ''

skip-publishing:
skip-upload:
description: 'Build, sign and bundle everything, but upload nothing.'
required: false
default: 'false'
Expand Down Expand Up @@ -70,8 +70,8 @@ runs:
shell: bash

# natives.dir makes webrtc and webrtc-java-media attach the jars of all
# platforms instead of the host's. skipPublishing suppresses both the
# bundling and the upload.
# platforms instead of the host's. skipUpload still stages and bundles the
# release, but stops before uploading it.
#
# Since Maven 3.10, credentials are only sent to the origins of the
# repository with the server's id. The server is "central", which is also
Expand All @@ -81,11 +81,11 @@ runs:
- name: Deploy
env:
PROFILES: ${{ inputs.profiles }}
SKIP_PUBLISHING: ${{ inputs.skip-publishing }}
SKIP_UPLOAD: ${{ inputs.skip-upload }}
run: >
mvn -B deploy -pl .,webrtc,webrtc-java-media -DskipTests
-Dmaven.repository.credentialScope=id
${PROFILES:+-P$PROFILES}
-Dnatives.dir="$PWD/natives"
-DskipPublishing="$SKIP_PUBLISHING"
-DskipUpload="$SKIP_UPLOAD"
shell: bash
12 changes: 12 additions & 0 deletions .github/actions/test-natives/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
description: 'The Maven profile that selects the classifier.'
required: true

version:
description: 'Optional local project version override for a release dry run.'
required: false
default: ''

java-version:
description: 'The Java version.'
required: true
Expand Down Expand Up @@ -72,7 +77,14 @@
distribution: ${{ inputs.java-distribution }}
architecture: ${{ inputs.java-architecture }}

- name: Set the release dry-run version
if: inputs.version != ''
env:
RELEASE_VERSION: ${{ inputs.version }}
run: mvn -B versions:set -DnewVersion="$RELEASE_VERSION" -DgenerateBackupPoms=false
shell: bash

- name: Install the natives into the local repository

Check failure

Code scanning / CodeQL

Cache Poisoning via execution of untrusted code High test

Potential cache poisoning in the context of the default branch due to privilege checkout of untrusted code from
inputs.ref
. (
workflow_dispatch
).
Potential cache poisoning in the context of the default branch due to privilege checkout of untrusted code from
inputs.ref
. (
workflow_dispatch
).
run: |
# The root pom has no parent, so its first <version> is the project's.
# Not sed's 0,/re/ address: that is GNU only, and macOS has BSD sed.
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/platforms.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@
description: "The commit, branch or tag to build. Empty for the one that triggered the caller."
type: string
default: ''
version:
description: "Optional local project version override for a release dry run."
type: string
default: ''
retention-days:
description: "How long the natives artifacts are kept."
type: number
Expand Down Expand Up @@ -78,7 +82,14 @@
if: runner.os == 'macOS'
uses: ./.github/actions/prepare-macos

- name: Set the release dry-run version
if: inputs.version != ''
env:
RELEASE_VERSION: ${{ inputs.version }}
run: mvn -B versions:set -DnewVersion="$RELEASE_VERSION" -DgenerateBackupPoms=false
shell: bash

- name: Maven build

Check failure

Code scanning / CodeQL

Cache Poisoning via execution of untrusted code High

Potential cache poisoning in the context of the default branch due to privilege checkout of untrusted code from
inputs.ref
. (
workflow_dispatch
).
Potential cache poisoning in the context of the default branch due to privilege checkout of untrusted code from
inputs.ref
. (
workflow_dispatch
).
uses: ./.github/actions/build
with:
platform-name: ${{ matrix.platform.name }}
Expand Down Expand Up @@ -149,3 +160,4 @@
profile: ${{ matrix.platform.classifier }}
java-distribution: ${{ matrix.platform.java-distribution }}
java-architecture: ${{ matrix.platform.java-architecture }}
version: ${{ inputs.version }}
23 changes: 14 additions & 9 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ jobs:
contents: write
outputs:
release_tag: ${{ steps.release-version.outputs.tag }}
release_version: ${{ steps.release-version.outputs.version }}
release_body: ${{ steps.git-cliff.outputs.content }}
steps:
# The full history, for git-cliff.
Expand Down Expand Up @@ -154,6 +155,7 @@ jobs:
with:
ref: ${{ !inputs.dryRun && needs.prepare-release.outputs.release_tag || '' }}
retention-days: 7
version: ${{ inputs.dryRun && needs.prepare-release.outputs.release_version || '' }}

publish-central:
name: Publish to Maven Central
Expand Down Expand Up @@ -191,18 +193,17 @@ jobs:
env:
RELEASE_TAG: ${{ needs.prepare-release.outputs.release_tag }}
run: |
version="${RELEASE_TAG#v}"
if [ "${{ inputs.dryRun }}" == "true" ]; then
version=$(mvn -B -q -N help:evaluate -Dexpression=project.version -DforceStdout)
else
version="${RELEASE_TAG#v}"
# Exercise release bundling rather than the snapshot deployment path.
mvn -B versions:set -DnewVersion="$version" -DgenerateBackupPoms=false
fi

echo "Version to publish: $version"
echo "version=$version" >> "$GITHUB_OUTPUT"

# skipPublishing suppresses both the bundling and the upload, so a dry run
# still builds, signs and attaches everything without anything leaving the
# runner. As a second line of defence the Central credentials are replaced by
# skipUpload stages and bundles the release, then stops before uploading.
# As a second line of defence the Central credentials are replaced by
# a placeholder during a dry run: should the upload ever happen regardless, it
# fails on authentication instead of publishing a release. Signing does run, so
# the GPG passphrase stays intact.
Expand All @@ -215,7 +216,11 @@ jobs:
with:
version: ${{ steps.release-version.outputs.version }}
profiles: release
skip-publishing: ${{ inputs.dryRun }}
skip-upload: ${{ inputs.dryRun }}

- name: Verify the dry-run deployment bundle exists
if: ${{ inputs.dryRun }}
run: test -s target/central-publishing/central-bundle.zip

- name: Summarize what would have been published
if: ${{ inputs.dryRun }}
Expand All @@ -239,15 +244,15 @@ jobs:
with:
name: deployment-bundle-dry-run
path: |
target/central-*/**
target/central-publishing/central-bundle.zip
webrtc/target/central-*/**
webrtc/target/*.jar
webrtc/target/*.asc
webrtc-java-media/target/central-*/**
webrtc-java-media/target/*.jar
webrtc-java-media/target/*.asc
natives/*.asc
if-no-files-found: warn
if-no-files-found: error
retention-days: 7

publish-release:
Expand Down
101 changes: 101 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,105 @@

All notable changes to this project will be documented in this file.

## [0.20.0] - 2026-10-16

### Features
- Decode VP9 spatial layers with VA-API by @devopvoid in [#388](https://github.com/devopvoid/webrtc-java/pull/388)
- Encode H.264 and H.265 temporal layers with VA-API by @devopvoid in [#381](https://github.com/devopvoid/webrtc-java/pull/381)
- Encode VP9 temporal layers with VA-API by @devopvoid in [#380](https://github.com/devopvoid/webrtc-java/pull/380)
- Encode AV1 temporal layers with VA-API by @devopvoid in [#379](https://github.com/devopvoid/webrtc-java/pull/379)
- Encode AV1 with VA-API on Linux by @devopvoid in [#377](https://github.com/devopvoid/webrtc-java/pull/377)
- Decode AV1 with VA-API on Linux by @devopvoid in [#376](https://github.com/devopvoid/webrtc-java/pull/376)
- Decode H.264 with VA-API on Linux by @devopvoid in [#375](https://github.com/devopvoid/webrtc-java/pull/375)
- Encode VP9 with VA-API on Linux without turning it on by @devopvoid in [#374](https://github.com/devopvoid/webrtc-java/pull/374)
- Decode H.265 with VA-API on Linux by @devopvoid in [#372](https://github.com/devopvoid/webrtc-java/pull/372)
- Let the audio codecs of a factory be limited and ordered by @devopvoid in [#340](https://github.com/devopvoid/webrtc-java/pull/340)
- Report receiver source changes and audio packet infos by @devopvoid in [#366](https://github.com/devopvoid/webrtc-java/pull/366)
- Send encoded frames through RTP sender injectors by @devopvoid in [#365](https://github.com/devopvoid/webrtc-java/pull/365)
- List the hardware codecs of the hardware video codec factories by @devopvoid in [#359](https://github.com/devopvoid/webrtc-java/pull/359)
- Decode H.265 and AV1 with NVDEC on Linux by @devopvoid in [#353](https://github.com/devopvoid/webrtc-java/pull/353)
- Encode H.265 and VP9 and decode VP9 with VA-API on Linux, when turned on by @devopvoid in [#352](https://github.com/devopvoid/webrtc-java/pull/352)
- Encode VP9 in hardware on Windows, when turned on by @devopvoid in [#348](https://github.com/devopvoid/webrtc-java/pull/348)
- Encode and decode H.265 in hardware on Windows by @devopvoid in [#347](https://github.com/devopvoid/webrtc-java/pull/347)
- Build WebRTC with H.265 by @devopvoid in [#346](https://github.com/devopvoid/webrtc-java/pull/346)
- Decode with Vulkan Video on Linux in the media player by @devopvoid in [#345](https://github.com/devopvoid/webrtc-java/pull/345)
- Decode HEVC and AV1 in hardware in the media player by @devopvoid in [#331](https://github.com/devopvoid/webrtc-java/pull/331)
- Let a video processor change camera and desktop frames by @devopvoid in [#342](https://github.com/devopvoid/webrtc-java/pull/342)
- Add first-packet observers, sender and receiver IDs, and track volume by @devopvoid in [#338](https://github.com/devopvoid/webrtc-java/pull/338)
- Add the missing peer connection signaling and control calls by @devopvoid in [#334](https://github.com/devopvoid/webrtc-java/pull/334)
- Decode H.264 and VP9 with NVDEC on NVIDIA GPUs on Linux by @devopvoid in [#321](https://github.com/devopvoid/webrtc-java/pull/321)
- Decode video in hardware in the media player by @devopvoid in [#320](https://github.com/devopvoid/webrtc-java/pull/320)
- Decode VP9 on the GPU with Media Foundation on Windows by @devopvoid in [#319](https://github.com/devopvoid/webrtc-java/pull/319)
- Decode VP9 with VideoToolbox on macOS by @devopvoid in [#318](https://github.com/devopvoid/webrtc-java/pull/318)
- Add a hardware video decoder factory, with Media Foundation on Windows by @devopvoid in [#315](https://github.com/devopvoid/webrtc-java/pull/315)
- Encode AV1 on the GPU with Media Foundation and NVENC by @devopvoid in [#314](https://github.com/devopvoid/webrtc-java/pull/314)
- Encode H.264 with VA-API on Intel and AMD GPUs on Linux by @devopvoid in [#313](https://github.com/devopvoid/webrtc-java/pull/313)
- Encode H.264 with NVENC on NVIDIA GPUs, on Windows and Linux by @devopvoid in [#312](https://github.com/devopvoid/webrtc-java/pull/312)
- Add a hardware video encoder factory, with Media Foundation H.264 by @devopvoid in [#310](https://github.com/devopvoid/webrtc-java/pull/310)
- Add custom video codec factories by @devopvoid in [#303](https://github.com/devopvoid/webrtc-java/pull/303)
- Map the remaining peer connection configuration fields by @devopvoid in [#317](https://github.com/devopvoid/webrtc-java/pull/317)
- Map the remaining sender encoding parameters by @devopvoid in [#316](https://github.com/devopvoid/webrtc-java/pull/316)

### Bug Fixes
- Map the VP9 interpolation filter to VA-API's order by @devopvoid in [#383](https://github.com/devopvoid/webrtc-java/pull/383)
- Write the H.264 and H.265 headers for VA-API drivers that need them by @devopvoid in [#371](https://github.com/devopvoid/webrtc-java/pull/371)
- Call network thread observers on a callback thread by @devopvoid in [#364](https://github.com/devopvoid/webrtc-java/pull/364)
- Play and record on Windows devices that mix in more than two channels by @devopvoid in [#358](https://github.com/devopvoid/webrtc-java/pull/358)
- Capture screens with ScreenCaptureKit on macOS by @devopvoid in [#354](https://github.com/devopvoid/webrtc-java/pull/354)
- Mark encoded frames as the end of their temporal unit by @devopvoid in [#356](https://github.com/devopvoid/webrtc-java/pull/356)
- Dispose a MediaStream from onAddTrack as a view, and return its ID by @devopvoid in [#343](https://github.com/devopvoid/webrtc-java/pull/343)
- Keep camera hotplug and track views from crashing or releasing shared tracks by @devopvoid in [#341](https://github.com/devopvoid/webrtc-java/pull/341)
- Stop exceptions from callbacks unwinding through WebRTC by @devopvoid in [#335](https://github.com/devopvoid/webrtc-java/pull/335)
- Keep audio device change handling from aborting or corrupting state by @devopvoid in [#337](https://github.com/devopvoid/webrtc-java/pull/337)
- Keep exceptions inside the audio device change callbacks by @Yml-0 in [#333](https://github.com/devopvoid/webrtc-java/pull/333)
- Fall back from a failed hardware video decoder without losing or damaging pictures by @devopvoid in [#329](https://github.com/devopvoid/webrtc-java/pull/329)
- Keep a seek near the end of the source and the position after seeking back by @devopvoid in [#328](https://github.com/devopvoid/webrtc-java/pull/328)
- Keep hardware encoders for sources whose first frame has an odd size by @devopvoid in [#324](https://github.com/devopvoid/webrtc-java/pull/324)

### Refactor
- Let the PeerConnectionFactory own its worker thread by @devopvoid in [#355](https://github.com/devopvoid/webrtc-java/pull/355)

### Documentation
- Link the unreleased docs from the README and release notes by @devopvoid in [#386](https://github.com/devopvoid/webrtc-java/pull/386)
- Note that VP9 cannot be injected by @devopvoid in [#385](https://github.com/devopvoid/webrtc-java/pull/385)
- Add icons and links to the home page features by @devopvoid in [#384](https://github.com/devopvoid/webrtc-java/pull/384)
- List the hardware codecs in tables by @devopvoid in [#378](https://github.com/devopvoid/webrtc-java/pull/378)
- Open the other channel's docs in the same tab by @devopvoid in [#382](https://github.com/devopvoid/webrtc-java/pull/382)
- List hardware codecs, video processing and frame injection as features by @devopvoid in [#369](https://github.com/devopvoid/webrtc-java/pull/369)

### Performance
- Cut the processor time of hardware decoding on Windows by @devopvoid in [#326](https://github.com/devopvoid/webrtc-java/pull/326)

### Testing
- Play real sizes and formats the GPU refuses in the media player by @devopvoid in [#325](https://github.com/devopvoid/webrtc-java/pull/325)
- Cover the lifecycle of hardware decoding in the media player by @devopvoid in [#323](https://github.com/devopvoid/webrtc-java/pull/323)
- Check that hardware decoders crop padded frames to the picture by @devopvoid in [#322](https://github.com/devopvoid/webrtc-java/pull/322)

### Miscellaneous Tasks
- Bump @vue/server-renderer and vue in /docs by @dependabot[bot] in [#363](https://github.com/devopvoid/webrtc-java/pull/363)
- Bump source-map-js from 1.2.1 to 1.2.2 in /docs by @dependabot[bot] in [#362](https://github.com/devopvoid/webrtc-java/pull/362)
- Publish the docs of the latest release, and main's under /next/ by @devopvoid in [#361](https://github.com/devopvoid/webrtc-java/pull/361)
- Send Central credentials again under Maven 3.10 by @devopvoid in [#339](https://github.com/devopvoid/webrtc-java/pull/339)
- Bump the github-actions group across 3 directories with 3 updates by @dependabot[bot] in [#309](https://github.com/devopvoid/webrtc-java/pull/309)
- Share one platform matrix and deploy snapshots once by @devopvoid in [#306](https://github.com/devopvoid/webrtc-java/pull/306)
- Add Dependabot and trim caches and artifacts by @devopvoid in [#304](https://github.com/devopvoid/webrtc-java/pull/304)
- Harden the release workflow and keep native caches warm by @devopvoid in [#302](https://github.com/devopvoid/webrtc-java/pull/302)

### Other
- Fix badge link text formatting in README.md by @devopvoid in [#390](https://github.com/devopvoid/webrtc-java/pull/390)
- Update documentation badge for next version by @devopvoid in [#389](https://github.com/devopvoid/webrtc-java/pull/389)
- Bump the maven-dependencies group with 3 updates by @dependabot[bot] in [#370](https://github.com/devopvoid/webrtc-java/pull/370)
- Update WebRTC branch from 7977 to 8059 (M155) by @devopvoid in [#360](https://github.com/devopvoid/webrtc-java/pull/360)
- Build WebRTC with autoninja by @devopvoid in [#357](https://github.com/devopvoid/webrtc-java/pull/357)
- Patch FFmpeg so that Direct3D 12 decoding works on AMD and Intel by @devopvoid in [#330](https://github.com/devopvoid/webrtc-java/pull/330)
- Bump the maven-dependencies group with 7 updates by @dependabot[bot] in [#308](https://github.com/devopvoid/webrtc-java/pull/308)
- Bump the maven-plugins group with 9 updates by @dependabot[bot] in [#307](https://github.com/devopvoid/webrtc-java/pull/307)
- Bump com.fasterxml.jackson.core:jackson-databind by @dependabot[bot] in [#301](https://github.com/devopvoid/webrtc-java/pull/301)
- Prepare for next development iteration by @devopvoid

## New Contributors
* @Yml-0 made their first contribution in [#333](https://github.com/devopvoid/webrtc-java/pull/333)

## [0.19.0] - 2026-09-27

### Features
Expand All @@ -16,9 +115,11 @@ All notable changes to this project will be documented in this file.
- Give AudioTrackSource a dispose() to release its native reference by @devopvoid in [#287](https://github.com/devopvoid/webrtc-java/pull/287)

### Miscellaneous Tasks
- Update CHANGELOG.md for v0.19.0 by @github-actions[bot]
- Cache the FFmpeg build of the macOS x86_64 target by @devopvoid in [#295](https://github.com/devopvoid/webrtc-java/pull/295)

### Other
- Prepare release v0.19.0 by @devopvoid
- Sync the WebRTC checkout without git history by @devopvoid in [#298](https://github.com/devopvoid/webrtc-java/pull/298)
- Cross compile the macOS x86_64 target natively on Apple Silicon by @devopvoid in [#296](https://github.com/devopvoid/webrtc-java/pull/296)
- Build FFmpeg on every platform and make the media module part of the normal build by @devopvoid in [#292](https://github.com/devopvoid/webrtc-java/pull/292)
Expand Down
4 changes: 2 additions & 2 deletions docs/.vitepress/versions.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const PROJECT_VARS: Record<string, string> = {
VERSION: '0.19.0',
VERSION_SNAPSHOT: '0.20.0-SNAPSHOT'
VERSION: '0.20.0',
VERSION_SNAPSHOT: '0.21.0-SNAPSHOT'
};
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<groupId>dev.onvoid.webrtc</groupId>
<artifactId>webrtc-java-parent</artifactId>
<version>0.20.0-SNAPSHOT</version>
<version>0.21.0-SNAPSHOT</version>
<packaging>pom</packaging>

<name>webrtc-java-parent</name>
Expand Down Expand Up @@ -110,7 +110,7 @@
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>0.11.0</version>
<version>0.12.0</version>
<extensions>true</extensions>
<configuration>
<publishingServerId>central</publishingServerId>
Expand Down
2 changes: 1 addition & 1 deletion webrtc-examples/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>dev.onvoid.webrtc</groupId>
<artifactId>webrtc-java-parent</artifactId>
<version>0.20.0-SNAPSHOT</version>
<version>0.21.0-SNAPSHOT</version>
</parent>

<artifactId>webrtc-java-examples</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion webrtc-java-media/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>dev.onvoid.webrtc</groupId>
<artifactId>webrtc-java-parent</artifactId>
<version>0.20.0-SNAPSHOT</version>
<version>0.21.0-SNAPSHOT</version>
</parent>

<artifactId>webrtc-java-media</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion webrtc-jni/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>dev.onvoid.webrtc</groupId>
<artifactId>webrtc-java-parent</artifactId>
<version>0.20.0-SNAPSHOT</version>
<version>0.21.0-SNAPSHOT</version>
</parent>

<artifactId>webrtc-java-jni</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion webrtc/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>dev.onvoid.webrtc</groupId>
<artifactId>webrtc-java-parent</artifactId>
<version>0.20.0-SNAPSHOT</version>
<version>0.21.0-SNAPSHOT</version>
</parent>

<artifactId>webrtc-java</artifactId>
Expand Down
Loading