Skip to main content

JavaScript and Python BYOD Control

This is the clearest coding path

If you want code examples that work with Yealink today, treat UVC85-BYOD and CP50 as standard meeting peripherals on the host computer.

1. Why this works​

Yealink publicly states:

  • UVC85-BYOD connects to a computer with a single Type-C cable,
  • CP50 supports USB connection to a computer or conference display OPS,
  • the whole kit is plug-and-play.

That means your app can usually access them through standard OS media APIs.

2. Browser JavaScript​

Step 1: connect the device​

Connect the Yealink kit to the host computer and verify that the operating system sees:

  • a camera,
  • a microphone,
  • and usually a speaker or audio output path.

Step 2: enumerate devices​

async function listDevices() {
const devices = await navigator.mediaDevices.enumerateDevices();
return devices.map(({ deviceId, kind, label }) => ({ deviceId, kind, label }));
}

listDevices().then(console.table);
async function openYealinkStream() {
const devices = await navigator.mediaDevices.enumerateDevices();

const video = devices.find(
(device) => device.kind === 'videoinput' && /yealink|uvc85/i.test(device.label)
);

const audio = devices.find(
(device) => device.kind === 'audioinput' && /yealink|cp50/i.test(device.label)
);

return navigator.mediaDevices.getUserMedia({
video: video ? { deviceId: { exact: video.deviceId } } : true,
audio: audio ? { deviceId: { exact: audio.deviceId } } : true,
});
}

Step 4: attach stream to video​

const videoElement = document.querySelector('video');

openYealinkStream().then((stream) => {
videoElement.srcObject = stream;
});

Practical notes​

  • Browser labels are only reliable after permission is granted.
  • Device names differ by operating system.
  • This path uses standard browser media APIs, not a Yealink-specific SDK.

3. Python video example​

import cv2


cap = cv2.VideoCapture(0)

if not cap.isOpened():
raise RuntimeError("Could not open camera")

while True:
ok, frame = cap.read()
if not ok:
break

cv2.imshow("Yealink camera", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break

cap.release()
cv2.destroyAllWindows()

Use the correct camera index for your machine. On multi-camera systems, enumerate devices first with OS tools or OpenCV-specific helpers.

4. Python audio example​

import sounddevice as sd


for index, device in enumerate(sd.query_devices()):
print(index, device["name"], device["max_input_channels"], device["max_output_channels"])

After identifying the Yealink device index:

import sounddevice as sd

duration = 5
sample_rate = 48000
device_index = 1

recording = sd.rec(
int(duration * sample_rate),
samplerate=sample_rate,
channels=1,
dtype="float32",
device=device_index,
)
sd.wait()
print(recording.shape)

5. What you can and cannot control this way​

Good fits:

  • selecting the Yealink camera and mic,
  • starting video capture,
  • using the kit in WebRTC or Python media apps,
  • running custom meeting tools,
  • building internal desktop or browser utilities.

Not guaranteed from public docs:

  • camera pan, tilt, or zoom control via a Yealink-specific API,
  • device-side configuration RPCs,
  • room hardware orchestration APIs,
  • public Yealink SDK methods for this kit.

If you need PTZ or device configuration beyond generic media capture, the next step is Yealink support or partner documentation.