camera-streaming

Настройка возможностей сеанса и потока, видеокадры, захват фото, конфигурация разрешения и частоты кадров

npx skills add https://github.com/facebook/meta-wearables-dat-android --skill camera-streaming

Camera Streaming (Android)

Use a Session and attached Stream to receive frames and capture photos.

Key concepts

  • Session: Device connection lifecycle created through Wearables.createSession(...)
  • Stream: Camera stream accessed via camera.stream after attaching the camera with session.addCamera(...)
  • StreamConfiguration: Resolution and frame rate configuration for the stream
  • PhotoData: Still image captured from glasses while streaming

Create a session and attach a stream

import com.meta.wearable.dat.camera.Camera
import com.meta.wearable.dat.camera.addCamera
import com.meta.wearable.dat.camera.types.StreamConfiguration
import com.meta.wearable.dat.camera.types.VideoQuality
import com.meta.wearable.dat.core.Wearables
import com.meta.wearable.dat.core.selectors.AutoDeviceSelector

val session = Wearables.createSession(AutoDeviceSelector()).getOrElse { error ->
    throw IllegalStateException(error.description)
}
session.start()

val camera: Camera = session.addCamera(
    StreamConfiguration(
        videoQuality = VideoQuality.MEDIUM,
        frameRate = 24,
    ),
).getOrElse { error ->
    throw IllegalStateException(error.description)
}

camera.stream.start().getOrElse { error ->
    throw IllegalStateException(error.description)
}

Resolution options

QualitySize
VideoQuality.HIGH720 x 1280
VideoQuality.MEDIUM504 x 896
VideoQuality.LOW360 x 640

Frame rate options

Valid values: 2, 7, 15, 24, 30 FPS.

Lower resolution and frame rate usually produce better visual quality per frame over Bluetooth.

Observe stream state

StreamState transitions: STOPPED -> STARTING -> STARTED -> STREAMING -> STOPPING -> STOPPED -> CLOSED

lifecycleScope.launch {
    camera.stream.state.collect { state ->
        when (state) {
            StreamState.STREAMING -> {
                // Frames are flowing
            }
            StreamState.STOPPED -> {
                // Streaming ended
            }
            StreamState.CLOSED -> {
                // Stream fully closed
            }
            else -> Unit
        }
    }
}

Receive frames

lifecycleScope.launch {
    camera.stream.videoStream.collect { frame ->
        updatePreview(frame)
    }
}

Capture a photo

lifecycleScope.launch {
    camera.stream.capturePhoto()
        .onSuccess { photoData ->
            val imageBytes = photoData.data
            savePhoto(imageBytes)
        }
        .onFailure { error, _ ->
            showCaptureError(error.description)
        }
}

Clean up

Stop the stream when you no longer need camera data, then stop the parent session if the device interaction is finished.

camera.stop()
session.stop()

If you want to remove the capability entirely before re-adding it, call session.removeCamera().

Links

Больше skills от facebook

api-health
facebook
Мониторинг состояния API для приложения Meta — проверка лимитов запросов, объема вызовов и устаревания API. Используется для диагностики троттлинга, планирования мощности или подготовки к смене версии API…
official
api-integration
facebook
Провести разработчика через настройку интеграции Meta API с нуля — подобрать нужные API, найти руководства по настройке, требования к аутентификации,…
official
app-review-prep
facebook
Prepare a Meta app for App Review — checks current status, outstanding requirements, granted privileges, and submission history. Use before submitting an app…
official
debug-webhooks
facebook
Устранение неполадок с вебхуками для приложения Meta — проверка активных подписок, выявление ошибок конфигурации и отправка тестовых payload для проверки доставки. Используйте, когда…
official
webhook-setup
facebook
Настройте вебхуки для приложения Meta полностью — узнайте доступные темы, подпишитесь на поля и проверьте с помощью тестового payload. Используйте при настройке вебхуков для…
official
buck2-rule-basics
facebook
Помогите пользователям написать их первое правило Buck2, чтобы изучить фундаментальные концепции, включая правила, действия, цели, конфигурации, анализ и select(). Используйте…
official
add-ir-instruction
facebook
Guide for adding a new IR instruction to the Hermes compiler. Use when the user asks to add, create, or define a new IR instruction (Inst/Instruction) in the…
official
binary-size-analysis
facebook
This skill should be used when the user wants to analyze hermesvm binary size changes across a range of commits. Use when the user mentions "binary size",…
official