Skip to content

mpv OpenJOC Player Bundle

The OpenJOC Player Bundle is a project-provided, patched mpv/FFmpeg build. It is not an official upstream mpv or FFmpeg release. Extract the bundle and start bin/openjoc-mpv on macOS/Linux or bin/openjoc-mpv.cmd on Windows with a media file. Windows can also start the GUI directly with bin/mpv.exe; its adjacent bin/portable_config is discovered automatically, so no wrapper or global mpv configuration change is needed. Direct discovery applies when MPV_HOME is unset; an existing MPV_HOME takes precedence. The packaged launcher explicitly selects the bundle's config directory and does not change the environment variable.

bin/openjoc-mpv path/to/media

Confirmed JOC is selected automatically by the patched player. Ordinary E-AC-3 remains on mpv's stock eac3 decoder. Compressed passthrough can be requested with --audio-spdif=eac3; that bypasses OpenJOC rendering.

Open the settings menu

Press Ctrl+Alt+J in the Player Bundle to open the compact settings panel. Click the arrows and Set path… control, or use Up/Down (Tab also moves focus), Left/Right, and Enter. The main page includes:

  • Output policy: Stereo speakers, Binaural, 5.1, 7.1, 5.1.2, 5.1.4, 7.1.2, or 7.1.4
  • Dialnorm: Calibrated (recommended) or Unity/Compatibility
  • Binaural HRTF: SADIE II D1/KU100, SADIE II D2/KEMAR, or Custom SOFA
  • Binaural virtual layout: 7.1.4 or experimental 9.1.6

Menu changes are drafts. Save stores them in bin/portable_config/openjoc-settings.json for the next file; it does not reload or seek the current file. Apply Current is a separate explicit action for the current selected, confirmed libopenjoc E-AC-3 track. It writes the file-local FFmpeg decoder-option map and lets the pinned mpv rebuild the audio chain, so a brief audio gap may occur. It does not seek or reload the file. Apply Current is immediate and is not undone by Cancel; Save remains separate for the next file.

The Live output gain row adjusts −20.0 to +20.0 dB in 0.1 dB steps, with a Reset control at 0 dB. The saved JSON key is output_gain_tenths_db; older settings files that omit it continue to mean 0 dB. At 0 dB the named post-render filter uses exact unity. Gain preview is separate from mpv's master-volume control and is applied only while the selected audio track is confirmed as E-AC-3 decoded by libopenjoc. FLAC, PCM, ordinary E-AC-3 and compressed passthrough do not receive the OpenJOC gain filter. On those tracks the value can still be saved for a later OpenJOC file, while the panel reports that live preview is unavailable. Filter or command failures are shown as errors; the script does not substitute mpv volume or a decoder option.

Cancel discards the draft and restores the live gain captured before the unsaved gain preview, including after a failed preview. Esc, a click outside, or closing the menu keeps the draft and any active preview for this playback; that preview is not persisted unless you choose Save. Saving while a preview is pending or failed reports that it has not been confirmed. Before decoder creation, the menu merges decoder options into the per-file map when a file has an E-AC-3 audio track. JOC is not yet known at that point, so plain or unselected E-AC-3 tracks may also receive the options. Because the map is file-local, it may reach other audio decoders in a mixed-track file and cause unsupported-option warnings. The menu does not select or force libopenjoc, change ad or aid, or touch audio-channels. Files without E-AC-3 bypass this hook. The menu leaves current playback in place unless Apply Current is explicitly selected; it never seeks or reloads the file, which is important for forward-only raw JOC streams.

For Custom SOFA, Set path… opens a text prompt; enter an existing local file path there. The loader still validates the supported SimpleFreeFieldHRIR subset when the decoder opens; see Binaural and SOFA.

If a previous bundle saved settings at config/openjoc-settings.json, the menu reads that file as a migration fallback when the new portable-config file is absent. It leaves the old file untouched; the next explicit Save writes to bin/portable_config/openjoc-settings.json.

Output and hardware

Output policy selects the OpenJOC renderer target. Binaural is explicit and produces two-channel headphone output; a two-channel speaker render is a separate choice. mpv keeps its normal audio output mapping, which may adapt the renderer output to the active AO. The menu does not change audio-channels, detect headphones, or change how ordinary media is routed. Configure mpv's normal channel map separately if you need an exact hardware target.

Settings rows show the pending/saved selection; separate read-only rows report mpv's current decoder and channel properties, not live JOC metadata or diagnostics. The independent post-render gain is not mpv's normal volume control. The LAV live JOC Stream page is not available in the current mpv integration.

The packaged D1/D2 binaural exact-unity qualification for this candidate is a CI release gate and has not yet been reported green. Do not interpret the presence of the menu control as completed package qualification.

The mpv integration guide documents command-line profiles, exact channel maps, decoder options, and verification boundaries.