This repository contains the server code for hosting an Oppo/Magnetar Blu-ray integration driver for the Unfolded Circle Remotes.
- Oppo BDP-83
- Oppo BDP-93
- Oppo BDP-95
- Oppo BDP-103
- Oppo BDP-105
- Oppo UDP-203
- Oppo UDP-205
- Magnetar Players
- All features are supported for the UDP-20X series.
- The Oppo players only allows one connection at a time, so if you have multiple remotes or other systems connected to the same player, the integration will keep getting disconnected and commands will fail. Use the Oppo Multiplexer to work around this issue.
| Feature | Oppo BDP-83/93/95 | Oppo BDP-10X | Magnetar |
|---|---|---|---|
| Option Command | ❌ | ✔️ | ✔️ |
| 3D Switching | ❌ | ✔️ | ❌️️ |
| Picture Adjustment | ❌ | ✔️ | ❌️ |
| HDR Mode | ❌ | ❌️ | ✔️ |
| Info Hold | ❌ | ❌️ | ❌️ |
| Resolution Hold | ❌ | ❌️ | ❌️ |
| A/V Sync | ❌ | ❌️ | ❌️ |
| Gapless Playback | ❌ | ❌️ | ❌️ |
| Track Name | ❌ | ❌️ | ❌️ |
| Album Name | ❌ | ❌️ | ❌️ |
| Album Cover | ❌ | ❌️ | ❌️ |
| Artist Name | ❌ | ❌️ | ❌️ |
- The published binary is self-contained and doesn't require any additional software. It's compiled for Linux ARM64 and is meant to be running on the remote.
- Use the Docker Image in the Core Simulator
| Service | Port | Protocol |
|---|---|---|
| Server | Random* | HTTP (TCP) |
| Oppo BDP-83 | 19999 | TCP |
| Oppo BDP-9X | 48360 | TCP |
| Oppo BDP-10X | 48360 | TCP |
| Oppo UDP-20X | 23 | TCP |
* Server port can be adjusted by specifying the desired port with the UC_INTEGRATION_HTTP_PORT environment variable.
- dotnet 10 SDK.
- or Docker.
- Download
unfolded-circle-oppo-[version]-remote.tar.gzfrom the release page - Open the remote's Web Configurator
- Click on
Integrations - Click on
Add newand thenInstall custom - Choose the file in step 1 (
unfolded-circle-oppo-[version]-remote.tar.gz) - Make sure that your device is turned on
- Click on the newly installed integration and follow the on-screen instructions
The application can be configured using the appsettings.json file or environment variables.
Additionally, the application saves configured entities to the configured_entities.json file, which will be saved to the directory specified by the UC_CONFIG_HOME environment variable.
By default, the application logs to stdout.
You can customize the log levels by either modifying the appsettings.json file or by setting environment variables.
TraceDebugInformationWarningError
Trace log level will log the contents of all the incoming and outgoing requests and responses. This includes both Websockets and Telnet.
{
"Logging": {
"LogLevel": {
"UnfoldedCircle.Server": "Information",
"UnfoldedCircle.OppoBluRay": "Information",
"Oppo": "Information",
"Makaretu.Dns": "Warning"
}
}
}Same adjustments to log levels can be made by setting environment variables.
Logging__LogLevel__UnfoldedCircle.Server=InformationLogging__LogLevel__UnfoldedCircle.OppoBluRay=InformationLogging__LogLevel__Oppo=InformationLogging__LogLevel__Makaretu.Dns=Warning
Execute publish.sh script to build the application for the remote. This will produce a tar.gz file in the root of the repository.
Execute the following from the root of the repository:
docker build -f src/UnfoldedCircle.OppoBluRay/Dockerfile -t oppo .dotnet publish ./src/UnfoldedCircle.OppoBluRay/UnfoldedCircle.BluRayPlayer.csproj -c Release --self-contained -o ./publishThis will produce a self-contained binary in the publish directory in the root of the repository.
- Selecting input on the player can only be done when the player reports that it is on, this means that you have to place a delay between the
Switch onandInput sourcecommands if you want to use this in theOn sequence, or the remote will think the start sequence fails. This is because the player may accept power commands and report success while still transitioning between states — for example, sending Power On shortly after Power Off may return success but the player continues shutting down. When using macros or sequences, place a delay of a couple of seconds after any power state change before sending subsequent commands. - The artist, album and track information might not always be available or accurate. This can't be helped as it's the information the player provides.
- The album cover might be incorrect or missing. This is because the CDDB database no longer exists, as such, the application tries to get covers by matching the current artist and album. This is not always accurate enough.