| name | camera-streaming |
| description | Stream, video frames, photo capture, resolution/frame rate configuration |
Camera Streaming (iOS)
Guide for implementing camera streaming and photo capture with the DAT SDK.
Key concepts
- Stream: Main interface for camera streaming
- VideoFrame: Individual video frames — call
.makeUIImage() to render
- StreamConfiguration: Configure resolution, frame rate, and codec
- PhotoData: Still image captured from glasses
Creating a DeviceSession
import MWDATCamera
import MWDATCore
let wearables = Wearables.shared
let deviceSelector = AutoDeviceSelector(wearables: wearables)
let deviceSession = try wearables.createSession(deviceSelector: deviceSelector)
try deviceSession.start()
for await state in deviceSession.stateStream() {
if state == .started { break }
}
Adding a Stream
Once the DeviceSession is started, add a Stream capability:
let config = StreamConfiguration(
videoCodec: .raw,
resolution: .medium,
frameRate: 24
)
guard let stream = try deviceSession.addStream(config: config) else {
return
}
Resolution options
| Resolution | Size |
|---|
.high | 720 x 1280 |
.medium | 504 x 896 |
.low | 360 x 640 |
Frame rate options
Valid values: 2, 7, 15, 24, 30 FPS.
Lower resolution and frame rate yield higher visual quality due to less Bluetooth compression.
Observing stream state
StreamState transitions: stopping → stopped → waitingForDevice → starting → streaming → paused
let stateToken = stream.statePublisher.listen { state in
Task { @MainActor in
switch state {
case .streaming:
case .waitingForDevice:
case .stopped:
case .paused:
default:
break
}
}
}
Receiving video frames
let frameToken = stream.videoFramePublisher.listen { frame in
guard let image = frame.makeUIImage() else { return }
Task { @MainActor in
self.previewImage = image
}
}
Starting and stopping
stream.start()
stream.stop()
deviceSession.stop()
Photo capture
Capture a still photo while streaming:
let photoToken = stream.photoDataPublisher.listen { photoData in
let imageData = photoData.data
}
stream.capturePhoto(format: .jpeg)
Bandwidth and quality
Resolution and frame rate are constrained by Bluetooth Classic bandwidth. The SDK automatically reduces quality when bandwidth is limited:
- First lowers resolution (e.g., High → Medium)
- Then reduces frame rate (e.g., 30 → 24), never below 15 FPS
Request lower settings for higher visual quality per frame.
Links