From 8cc60d2911e7a1786b0e5c80d1f0d32988de68b4 Mon Sep 17 00:00:00 2001 From: Boris Grozev Date: Tue, 14 Jul 2026 14:06:13 -0500 Subject: [PATCH] feat: Add diarize field to mediajson Start event --- .../kotlin/org/jitsi/mediajson/MediaJson.kt | 3 +- .../org/jitsi/mediajson/MediaJsonTest.kt | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/jicoco-mediajson/src/main/kotlin/org/jitsi/mediajson/MediaJson.kt b/jicoco-mediajson/src/main/kotlin/org/jitsi/mediajson/MediaJson.kt index 5bf37d4..bd02d6e 100644 --- a/jicoco-mediajson/src/main/kotlin/org/jitsi/mediajson/MediaJson.kt +++ b/jicoco-mediajson/src/main/kotlin/org/jitsi/mediajson/MediaJson.kt @@ -139,7 +139,8 @@ data class MediaFormat( data class Start( val tag: String, val mediaFormat: MediaFormat, - val customParameters: CustomParameters? = null + val customParameters: CustomParameters? = null, + val diarize: Boolean? = null ) data class CustomParameters( diff --git a/jicoco-mediajson/src/test/kotlin/org/jitsi/mediajson/MediaJsonTest.kt b/jicoco-mediajson/src/test/kotlin/org/jitsi/mediajson/MediaJsonTest.kt index 9d9b9f4..415d66d 100644 --- a/jicoco-mediajson/src/test/kotlin/org/jitsi/mediajson/MediaJsonTest.kt +++ b/jicoco-mediajson/src/test/kotlin/org/jitsi/mediajson/MediaJsonTest.kt @@ -49,6 +49,8 @@ class MediaJsonTest : ShouldSpec() { start.shouldBeInstanceOf() start.get("tag").asText() shouldBe tag start.get("customParameters") shouldBe null + // diarize is null and must be omitted from the JSON. + start.get("diarize") shouldBe null val mediaFormat = start.get("mediaFormat") mediaFormat.shouldBeInstanceOf() mediaFormat.get("encoding").asText() shouldBe enc @@ -69,6 +71,17 @@ class MediaJsonTest : ShouldSpec() { parsedList[0] shouldBe event parsedList[1] shouldBe event } + context("With diarize set") { + val diarizeEvent = StartEvent( + seq, + Start(tag, MediaFormat(enc, sampleRate, channels, params), diarize = true) + ) + val parsed = mapper.readTree(diarizeEvent.toJson()) + parsed.shouldBeInstanceOf() + val start = parsed.get("start") + start.shouldBeInstanceOf() + start.get("diarize").asBoolean() shouldBe true + } } context("MediaEvent") { val chunk = 213 @@ -223,6 +236,30 @@ class MediaJsonTest : ShouldSpec() { parsed.start.mediaFormat.channels shouldBe 1 parsed.start.customParameters.shouldNotBeNull() parsed.start.customParameters?.endpointId shouldBe "abcdabcd" + // diarize is absent from the JSON and must parse as null. + parsed.start.diarize shouldBe null + } + context("Start with diarize") { + val parsed = Event.parse( + """ + { + "event": "start", + "sequenceNumber": "0", + "start": { + "tag": "incoming", + "mediaFormat": { + "encoding": "audio/x-mulaw", + "sampleRate": 8000, + "channels": 1 + }, + "diarize": true + } + } + """.trimIndent() + ) + + parsed.shouldBeInstanceOf() + parsed.start.diarize shouldBe true } context("Start with sequence number as int") { val parsed = Event.parse(