OPPO Blu-ray Player
OPPO's BDP-series Blu-ray / UHD players — the BDP-93/103/105 and the later UDP-203/205 — are
controlled over OPPO's ASCII RS-232 command set. Each command is a short mnemonic prefixed with
# (for example #PON to power on), and GEM sends them over TCP. One player becomes one GEM
device, addressed directly by IP. There is no pairing and no password.
This driver creates no zones. An OPPO is a source: you expose it as an AV source that a user selects on a touchpanel, and route its picture and sound to rooms through your matrix or AV receiver the same way you would a cable box or a Blu-ray transport. What the driver gives you:
- Full transport and navigation — play / pause / stop, scan forward and reverse, chapter and title skip, the D-pad and Select, the disc/top menus, Return, and the on-screen numeric keypad.
- The remote's function keys — the four color buttons, Subtitle, Audio, Angle, Zoom, Repeat, A-B replay, Setup, Option, the on-screen Display, Pure Audio / Dimmer, and the direct-app buttons (Netflix, Vudu, and the player's Home/Apps screen).
- A dedicated OPPO source view for end users — a Blu-ray remote laid out on the touchpanel
(transport bar, D-pad and menu keys, color and function buttons). Set the AV source's Component
to
oppo_blurayto get it.
The OPPO command set is control-only in GEM: commands are sent to the player, but the player's status replies are not decoded back into device attributes. GEM does not track the OPPO's live play state, disc type, or volume. See One-way control — no parsed feedback.
Which port to use
| Player | How GEM connects | Port |
|---|---|---|
| UDP-203 / UDP-205 (and BDP-203/205) | Native Ethernet control, directly to the player's IP | 48360 |
| BDP-93 / BDP-103 / BDP-105 | Through an RS-232-to-IP adapter (a Global Caché iTach IP2SL is common) wired to the player's serial port | the adapter's serial port (the iTach IP2SL uses 4999) |
The older BDP-9x/10x players have no Ethernet control port — they expose only RS-232, so you put a serial-to-IP bridge in front and point GEM at the bridge. The newer 20x players speak the same ASCII protocol natively over Ethernet on 48360.
Prerequisites
- The player reachable on the same LAN as GEM.
- RS-232/IP control enabled on the player. On the 20x models this is in the on-screen setup menu (Setup → Device Setup → the RS-232/network control option); on the 9x/10x models the serial port is always live once wired.
- For BDP-93/103/105: an RS-232-to-IP adapter wired to the OPPO's serial port, with its own IP and TCP port noted.
- A static IP or a DHCP reservation for the player (or the adapter) so its address never moves — a moved address means GEM can no longer reach it.
- The player left in standby (front LED red) when idle, not fully powered off. GEM can wake a player from standby but cannot wake one that is unplugged or hard-powered-off.
Setup
Open Devices
- Enable RS-232/network control on the OPPO (20x: in the on-screen Setup menu; 9x/10x: wire the serial port to your RS-232-to-IP adapter and note the adapter's IP and port).
- Go to System → Devices → Add Device and choose the OPPO Blu-ray Player driver. Place the device in the AV subsystem (the driver suggests AV; the AV subsystem ships with every install).
- Set Player IP Address to the player's LAN IP — or, for a 9x/10x behind a bridge, the adapter's IP.
- Set TCP Port. Leave it at the default 48360 for a UDP-203/205; for a serial bridge, enter the adapter's port (the iTach IP2SL uses 4999).
- Save and enable the device. There is nothing to pair or log in to — GEM connects within a few seconds. The device's Commands tab then lists every OPPO command, and the Add Device form offers a Load sample button for each of the two wiring examples (native 48360 and iTach 4999).
For a system with several players, add one GEM device per player, each by its own IP.
Using the OPPO as an AV source
Open AV Sources
To put the OPPO on a touchpanel as a selectable source with the on-screen Blu-ray remote, create an AV source for it:
- Add a source and set its Device to this OPPO device.
- Set Component to
oppo_blurayso the user gets the OPPO remote panel (rather than the generic source view). - Set the Address to the matrix input the player is wired to, so your routing macros can send that input to a room. Use Advanced addressing only if your matrix switches audio and video on separate inputs.
- Check Global source (not zone-specific) if every room should be able to select the OPPO — a single shared player feeding a matrix is the classic global source. Leave it unchecked and assign an AV Zone if the player lives in and serves only one room.
- Give the source an On Macro that routes the player's input to the selected zone's output (and,
if you like, powers the player on and un-mutes it), and an Off Macro that releases the route.
In those macros use
[@av_source.address]for the OPPO's input and[@av_zone.address]for the target room's output so one macro serves every zone. - Save. When a user selects the source in a room, GEM draws the OPPO panel and runs the On Macro.
See AV Sources for the full source editor (Device, Address, Component, Global, On/Off macros) and AV Zones for routing the source into rooms.
The OPPO source view
With Component set to oppo_bluray, selecting the source draws a Blu-ray remote on the
touchpanel:
- a transport bar across the top — rewind (scan reverse), play, pause, stop, and fast-forward (scan forward); on a phone the rewind/fast-forward buttons move to a compact bottom bar;
- a left panel of round function keys — Apps (the player's Home screen), Option, Audio, Subtitle, Setup, and the four color buttons R / G / B / Y;
- a right panel with the menu and navigation keys — Top Menu, Popup Menu, Return, and a D-pad (up / down / left / right) with Select in the center.
Every button on this view maps to one of the driver commands below, so anything on the panel can equally be put on a custom UI button, in a macro, or on a hard remote.
Attributes
Device — required
| Attribute | Type | Default | Description |
|---|---|---|---|
ip | string | — | The player's LAN IP (the Player IP Address field), or the RS-232-to-IP adapter's IP for a 9x/10x. |
port | int | 48360 | The control port (the TCP Port field). 48360 for a UDP-203/205; the adapter's serial port (e.g. 4999) for a serial bridge. |
This driver creates no zones, so there are no zone or per-zone address attributes — routing to rooms
is done at the AV-source / AV-zone layer, not on the device. OPPO devices have no entries in the
attribute autocomplete catalog, so type ip and port exactly as shown if you ever set them from
the Attribute editor.
Commands
Driver-declared commands appear on the device's Commands tab and can be used in macros, triggers, and on UI buttons. The Command column is the exact name you type in a macro step or on a button; the Sends column is the raw ASCII code the player receives (handy when testing from a serial terminal).
Power
| Command | Sends | Action |
|---|---|---|
power_on | #PON | Wake the player from standby. |
power_off | #POF | Return the player to standby. |
power_toggle | #POW | Toggle power. |
get_power | #QPW | Ask the player for its power state (reply not stored — see below). |
Transport
| Command | Sends | Action |
|---|---|---|
play | #PLA | Play. |
pause | #PAU | Pause. |
stop | #STP | Stop. |
forward / fast_forward | #FWD | Scan forward (both names send the same code). |
reverse / rewind | #REV | Scan reverse. |
chapter_plus / skip_forward | #NXT | Next chapter / skip forward. |
chapter_minus / skip_back | #PRE | Previous chapter / skip back. |
eject | #EJT | Open / close the disc tray. |
Navigation and menus
| Command | Sends | Action |
|---|---|---|
up down left right | #NUP #NDN #NLT #NRT | D-pad navigation. |
select | #SEL | Enter / OK. |
top_menu | #TTL | Disc top (title) menu. |
popup_menu / dvd_menu | #MNU | Disc popup menu (both names send the same code). |
home | #HOM | The player's Home / Apps screen. |
return | #RET | Back / return. |
option | #OPT | Option menu. |
setup | #SET | Setup menu. |
display | #OSD | On-screen display / status. |
page_up / page_down | #PUP / #PDN | Page up / down in a list. |
Color and function keys
| Command | Sends | Action |
|---|---|---|
red green blue yellow | #RED #GRN #BLU #YLW | The four color buttons. |
subtitle | #SUB | Cycle subtitles. |
audio | #AUD | Cycle audio track. |
sap | #SAP | Secondary audio program. |
angle | #ANG | Camera angle. |
zoom | #ZOM | Cycle zoom / aspect. |
repeat | #RPT | Repeat. |
ab_replay | #ATB | A-B repeat / replay. |
pip | #PIP | Picture-in-picture. |
pure_audio | #PUR | Pure Audio mode. |
dim | #DIM | Front-panel display dimmer. |
resolution | #HDM | Cycle HDMI output resolution. |
source | #SRC | Input source select. |
direct_play | #DPL | Direct play. |
Numeric keypad
| Command | Sends | Action |
|---|---|---|
0–9 | #0–#9 | Number entry. |
clear | #CLR | Clear entry. |
goto | #GOT | Go-to (time / chapter search). |
Streaming apps
| Command | Sends | Action |
|---|---|---|
netflix | #NFX | Launch Netflix. |
vudu | #VUD | Launch Vudu. |
Playback settings (with arguments)
| Command | Sends | Argument | Choices |
|---|---|---|---|
set_hdmi_resolution | #SHD [resolution] | resolution | SDI, SDP, 720P, 1080I, 1080P, SRC, AUTO |
set_output_system | #SPN [system] | system | PAL, NTSC, AUTO |
set_zoom | #SZM [zoom] | zoom | 1, AR, FS, US, 1.2, 1.3, 1.5, 2, 1/2, 3, 4, 1/3, 1/4 |
set_repeat | #SRP [mode] | mode | CH, TT, ALL, OFF, SHF, RND |
volume | #SVL [volume] | volume | A volume level to set on the player. |
volume_up / volume_down | #VUP / #VDN | — | Step the player's own volume. |
mute_toggle | #MUT | — | Toggle the player's mute. |
Query commands
These send the OPPO's status-request codes. GEM transmits them but does not decode the player's reply into a stored attribute (see below), so they are mainly useful for protocol testing.
| Command | Sends | Asks for |
|---|---|---|
get_play / get_playback_status | #QPL | Playback status. |
get_power | #QPW | Power state. |
get_volume | #QVL | Volume. |
get_resolution | #QHD | HDMI resolution. |
get_track | #QTK | Current track. |
get_chapter | #QCH | Current chapter. |
get_disk_type | #QDT | Disc type. |
get_audio_type | #QAT | Audio format. |
get_subtitle_type | #QST | Subtitle status. |
get_firmware | #QVR | Firmware version. |
Maintenance
| Command | Sends | Action |
|---|---|---|
reset_rs232 | #RST | Reset the RS-232 control interface. |
One-way control — no parsed feedback
The OPPO commands go one direction: GEM sends them, and the player acts on them. The player does send
status replies (and the get_* commands request them), but this driver does not parse those
replies into device attributes. That has two practical consequences:
- GEM does not track the player's live state. You cannot build an attribute trigger on the OPPO's current play state, disc type, or volume, because none of that is stored.
- Commands are fire-and-forget.
power_on, transport, and navigation are sent without waiting for a confirmed state change. Design your routing macros so they don't depend on reading the player back — sendpower_on, then the input route, then your default settings, in order.
If you need on/off feedback for a room, drive it from the AV zone and its source selection, not from the player's own reported state.
Known limitations
- Single device, no zones. An OPPO is one device and creates no GEM zones — route it to rooms at the AV-source / AV-zone layer, like any other source.
- No parsed feedback. Control is one-way; the player's status is not read back into attributes (see above).
- Standby, not off.
power_ononly works from standby (front LED red). A player that is unplugged or hard-powered-off cannot be woken over the network. - Discontinued line. OPPO closed its Blu-ray business in 2018, so there are no firmware updates — but network control on existing units is stable and unchanging.
Troubleshooting
| Symptom | Check |
|---|---|
| Connection refused on 48360. | RS-232/IP control is disabled in the OPPO setup menu, or the player is fully powered off rather than in standby. Enable network control and leave the player in standby. |
| Commands are accepted but nothing happens on screen. | The player is in "Quick Start" sleep with its UI inactive — send power_on first, then the command. |
| A 9x/10x player never connects. | Those models have no Ethernet control port. Confirm an RS-232-to-IP adapter is wired to the serial port and that TCP Port points at the adapter's serial port (the iTach IP2SL uses 4999), not 48360. |
| The touchpanel shows a generic remote, not the OPPO layout. | The AV source's Component must be set to oppo_bluray. |
| The player powers on but the room stays silent. | Control is one-way, so a routing macro can't read the player back — confirm the On Macro actually routes the OPPO's matrix input to the zone's output and un-mutes the room. |
See also
- AV Sources — add the OPPO as a selectable source and pick the
oppo_bluraypanel. - AV Zones — route the source into rooms.
- Devices — adding and configuring devices.
- Commands — running and scripting device commands.