कैमरा डिवाइस टाइप को दो ट्रेट का इस्तेमाल करके लागू किया जाता है:
PushAvStreamTransport
,
यह पुश-आधारित प्रोटोकॉल का इस्तेमाल करके, ऑडियो और वीडियो स्ट्रीम को ट्रांसफ़र करता है. साथ ही,
WebRtcLiveView
,
यह लाइव स्ट्रीम और टॉकबैक को कंट्रोल करने की सुविधा देता है.
कैमरे की सुविधा वाले डोरबेल डिवाइस के लिए भी इन ट्रेट का इस्तेमाल किया जाता है.
Home APIs डिवाइस टाइप | विशेषताएं | Kotlin का सैंपल ऐप्लिकेशन | इस्तेमाल का उदाहरण |
---|---|---|---|
कैमरा
ऐसा डिवाइस जो फ़ोटो या वीडियो रिकॉर्ड करता है. कैमरों में, लाइव स्ट्रीम देखने, बातचीत करने या गतिविधियों का पता लगाने जैसी सुविधाएं हो सकती हैं. |
ज़रूरी ट्रेट google PushAvStreamTransport google WebRtcLiveView |
कैमरा | |
दरवाज़े की घंटी
यह दरवाज़े के बाहर मौजूद एक बटन से चालू होने वाला डिवाइस है. इससे सुनाई देने वाला और/या दिखने वाला सिग्नल मिलता है. इसका इस्तेमाल दरवाज़े के दूसरी ओर मौजूद व्यक्ति का ध्यान खींचने के लिए किया जाता है. डोरबेल में, सुलभ लाइव स्ट्रीम, दोनों ओर से बातचीत करने की सुविधा या गतिविधि का पता लगाने की सुविधा हो सकती है. |
ज़रूरी ट्रेट google PushAvStreamTransport google WebRtcLiveView |
डोरबेल |
लाइव स्ट्रीम शुरू करना
लाइव स्ट्रीम शुरू करने के लिए, Session Description Protocol (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) } }