Android के लिए कैमरा डिवाइस गाइड

कैमरा डिवाइस टाइप को दो ट्रेट का इस्तेमाल करके लागू किया जाता है: PushAvStreamTransport, यह पुश-आधारित प्रोटोकॉल का इस्तेमाल करके, ऑडियो और वीडियो स्ट्रीम को ट्रांसफ़र करता है. साथ ही, WebRtcLiveView, यह लाइव स्ट्रीम और टॉकबैक को कंट्रोल करने की सुविधा देता है. कैमरे की सुविधा वाले डोरबेल डिवाइस के लिए भी इन ट्रेट का इस्तेमाल किया जाता है.

Home APIs डिवाइस टाइप विशेषताएं Swift का सैंपल ऐप्लिकेशन इस्तेमाल का उदाहरण

कैमरा

GoogleCameraDeviceType

home.matter.6006.types.0158

ऐसा डिवाइस जो फ़ोटो या वीडियो रिकॉर्ड करता है. कैमरों में, सुलभ लाइवस्ट्रीम, बातचीत करने की सुविधा या गतिविधियों का पता लगाने की सुविधा हो सकती है.

ज़रूरी एट्रिब्यूट
     google PushAvStreamTransportTrait
     google WebRtcLiveViewTrait

कैमरा

दरवाज़े की घंटी

GoogleDoorbellDeviceType

home.matter.6006.types.0113

यह दरवाज़े के बाहर मौजूद एक बटन से चालू होने वाला डिवाइस है. इससे सुनाई देने वाला और/या दिखने वाला सिग्नल मिलता है. इसका इस्तेमाल दरवाज़े के दूसरी तरफ़ मौजूद व्यक्ति का ध्यान खींचने के लिए किया जाता है. डोरबेल में, लाइव स्ट्रीम को ऐक्सेस करने की सुविधा, दोनों ओर से बातचीत करने की सुविधा या गतिविधि का पता लगाने की सुविधा हो सकती है.

ज़रूरी एट्रिब्यूट
     google PushAvStreamTransportTrait
     google WebRtcLiveViewTrait

डोरबेल

लाइव स्ट्रीम शुरू करना

लाइवस्ट्रीम शुरू करने के लिए, सत्र विवरण प्रोटोकॉल (SDP) स्ट्रिंग को WebRtcLiveView विशेषता के startLiveView() विधि पर भेजें, जो तीन मानों वाला WebRtcLiveViewTrait.StartLiveViewCommand.Response लौटाता है:

  • सेशन के लिए एसडीपी.
  • सत्र की अवधि, सेकंड में.
  • सत्र आईडी, जिसका उपयोग सत्र को बढ़ाने या समाप्त करने के लिए किया जा सकता है.
suspend fun getWebRtcLiveViewTrait(cameraDevice, cameraDeviceType) {
 return cameraDevice.type(cameraDeviceType).trait(WebRtcLiveView).first {
    it?.metadata?.sourceConnectivity?.connectivityState == ConnectivityState.ONLINE
  }

}

// Start the live view
suspend fun startCameraStream(trait: WebRtcLiveView,offerSdp: String) {
  val response = trait.startLiveView(offerSdp)
  // Response contains three fields (see below)
  return response
}
  ...

// This is used to manage the WebRTC connection
val peerConnection: RTCPeerConnection = ...

   ...

val startResponse = startCameraStream(sdp)
val answerSdp = startResponse?.answerSdp
val sessionDuration = startResponse?.liveSessionDurationSeconds
val mediaSessionId = startResponse?.mediaSessionId

peerConnection.setRemoteDescription(SessionDescription.Type.ANSWER,
                                    answerSdp)

लाइव स्ट्रीम की अवधि बढ़ाना

लाइवस्ट्रीम की एक पूर्व निर्धारित अवधि होती है जिसके बाद वे समाप्त हो जाती हैं. चालू स्ट्रीम की अवधि बढ़ाने के लिए, WebRtcLiveView.extendLiveView() तरीके का इस्तेमाल करके, अवधि बढ़ाने का अनुरोध करें:

// Assuming camera stream has just been started
suspend fun scheduleExtension(trait: WebRtcLiveView, mediaSessionId: String, liveSessionDurationSeconds: UShort ) {
  delay(liveSessionDurationSeconds - BUFFER_SECONDS * 1000)
  val response = trait.extendLiveView(mediaSessionId)
  // returns how long the session will be live for
  return response.liveSessionDurationSeconds
}

रिकॉर्डिंग की सुविधा को चालू और बंद करना

कैमरे की रिकॉर्डिंग की सुविधा चालू करने के लिए, PushAvStreamTransport ट्रेट के setTransportStatus() तरीके में TransportStatusEnum.Active पास करें. रिकॉर्डिंग की सुविधा बंद करने के लिए, इसे TransportStatusEnum.Inactive पर सेट करें. यहां दिए गए उदाहरण में, हमने इन कॉल को एक ही कॉल में रैप किया है. इसमें रिकॉर्डिंग की सुविधा को टॉगल करने के लिए, Boolean का इस्तेमाल किया गया है:

// Start or stop recording for all connections.
suspend fun setCameraRecording(isOn: Boolean) {
  val pushAvStreamTransport = getPushAvStreamTransport
  if(isOn) {
    pushAvStreamTransport.setTransportStatus(TransportStatusEnum.Active)
  } else {
    pushAvStreamTransport.setTransportStatus(TransportStatusEnum.Inactive)
  }
}

देखें कि रिकॉर्डिंग की सुविधा चालू है या नहीं

यह पता लगाने के लिए कि कैमरे की रिकॉर्डिंग की सुविधा चालू है या नहीं, देखें कि कोई कनेक्शन चालू है या नहीं. यहां दिए गए उदाहरण में, ऐसा करने के लिए दो फ़ंक्शन तय किए गए हैं:

// Get the on/off state
suspend fun onOffState(cameraDevice: HomeDevice, cameraDeviceType) {
  // Query the device for pushAvStreamTransport
  val pushAvTrait = getPushAvStreamTransport()
  return pushAvTrait.recordModeActive()
}

// Check to see if the camera's recording capability is enabled
fun PushAvStreamTransport.recordModeActive(): Boolean {
  return currentConnections?.any { it.transportStatus == TransportStatusEnum.Active } ?: false
}

जांच करने का दूसरा तरीका है findTransport() फ़ंक्शन का उपयोग एक प्रेडिकेट के साथ करना:

// Fetch the current connections
suspend fun queryRecordModeState(cameraDevice: HomeDevice, cameraDeviceType) {
  val pushAvStreamTransport = getPushAvStreamTransport()
  return pushAvStreamTransport.findTransport().let {
      it.transportConfigurations.any { it.transportStatus == TransportStatusEnum.Active
    }
}

TalkBack को चालू और बंद करना

TalkBack की सुविधा शुरू करने के लिए, WebRtcLiveView ट्रेट के startTalkback() तरीके को कॉल करें. इसे बंद करने के लिए, stopTalkback() का इस्तेमाल करें.

// Make sure camera stream is on
suspend fun setTalkback(isOn: Boolean, trait: WebRtcLiveView, mediaSessionId: String) {
  if(isOn) {
    trait.startTalkback(mediaSessionId)
  } else {
    trait.stopTalkback(mediaSessionId)
  }
}