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-BYODconnects to a computer with a singleType-Ccable,CP50supports 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);
Step 3: select Yealink devices​
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.