aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-common/src
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-09-17 10:12:31 +0200
committerChristophe Besson <cbesson@gmail.com>2026-09-17 10:12:31 +0200
commita98445ce246509b0d2600df14907f72b448a6d10 (patch)
tree023e1c09d8fa42f67f5da8ff32a22f271359d843 /packages/meshbay-common/src
parentf4fd6db8faa15bf02f38a14b652cc46936f8d6bf (diff)
downloadmeshbay-a98445ce246509b0d2600df14907f72b448a6d10.tar.gz
feat: let the viewer pick the audio track
The streaming path mapped 0:a:0 unconditionally, so a dubbed film played in whichever language was muxed first and the others were unreachable. The node now enumerates the tracks in stream_init and honours audio_track in stream_req; switching is the seek path, since one ffmpeg carries one track. MNP 3.2, additive: the player draws its selector from the node's own list and never from a version number, so an older node is never asked for a track it would ignore. MNP_MIN_SUPPORTED does not move. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-common/src')
-rw-r--r--packages/meshbay-common/src/meshbay_common/__init__.py22
1 files changed, 21 insertions, 1 deletions
diff --git a/packages/meshbay-common/src/meshbay_common/__init__.py b/packages/meshbay-common/src/meshbay_common/__init__.py
index 80e6d92..c4c4bf4 100644
--- a/packages/meshbay-common/src/meshbay_common/__init__.py
+++ b/packages/meshbay-common/src/meshbay_common/__init__.py
@@ -181,5 +181,25 @@ __version__ = "0.14.0"
# next one it reaches and keeps its own copy meanwhile (§6.4). `MNP_MIN_SUPPORTED`
# does not move. That is the difference from 3.0, where the requirement — not the
# messages — is what made it MAJOR.
-MNP_VERSION = "3.1"
+# **3.2 (2026-09-17): the viewer picks the audio track.**
+#
+# `stream_init` carries `audio_tracks` (ordinal, language, title, codec,
+# channels) and the `audio_track` actually used; `stream_req` gains an optional
+# `audio_track`. Until now the streaming path mapped `0:a:0` unconditionally,
+# so a dubbed film played in whichever language was muxed first — across a real
+# library that is one language, and the others were unreachable.
+#
+# **Additive, and MINOR because nothing is required, but the reason differs
+# from 3.1's.** A playlist a node cannot store is a feature a client keeps to
+# itself; an `audio_track` a node ignores is the *wrong language*, served
+# silently, which is a wrong answer and not a missing one. What makes this
+# MINOR anyway is that the client cannot get into that position: the selector
+# is drawn from `audio_tracks` in the node's own `stream_init`, so a 3.1 node
+# sends no list, the client shows no selector, and no `audio_track` is ever
+# sent to a peer that would ignore it. **The capability is discovered from the
+# answer, never from the version number** — and that is not the opt-in
+# compatibility switch 3.0 refused, because there is no second branch on the
+# node: a 3.2 node always enumerates, always honours what it is asked for, and
+# always says which track it used. `MNP_MIN_SUPPORTED` does not move.
+MNP_VERSION = "3.2"
MHP_VERSION = "0.1"