कैमरा डिवाइस टाइप को दो ट्रेट का इस्तेमाल करके लागू किया जाता है:
PushAvStreamTransportTrait
,
यह पुश-आधारित प्रोटोकॉल का इस्तेमाल करके, ऑडियो और वीडियो स्ट्रीम को ट्रांसफ़र करता है. साथ ही,
WebRtcLiveViewTrait
,
यह लाइव स्ट्रीम और टॉकबैक को कंट्रोल करने की सुविधा देता है.
कैमरे की सुविधा वाले डोरबेल डिवाइस के लिए भी इन ट्रेट का इस्तेमाल किया जाता है.
Home APIs डिवाइस टाइप | विशेषताएं | Swift का सैंपल ऐप्लिकेशन | इस्तेमाल का उदाहरण |
---|---|---|---|
कैमरा
ऐसा डिवाइस जो फ़ोटो या वीडियो रिकॉर्ड करता है. कैमरों में, लाइव स्ट्रीम देखने, बातचीत करने या गतिविधियों का पता लगाने जैसी सुविधाएं हो सकती हैं. |
ज़रूरी एट्रिब्यूट google PushAvStreamTransportTrait google WebRtcLiveViewTrait |
कैमरा | |
दरवाज़े की घंटी
यह दरवाज़े के बाहर मौजूद एक बटन से चालू होने वाला डिवाइस है. इससे सुनाई देने वाला और/या दिखने वाला सिग्नल मिलता है. इसका इस्तेमाल दरवाज़े के दूसरी ओर मौजूद व्यक्ति का ध्यान खींचने के लिए किया जाता है. डोरबेल में, सुलभ लाइव स्ट्रीम, दोनों ओर से बातचीत करने की सुविधा या गतिविधि का पता लगाने की सुविधा हो सकती है. |
ज़रूरी एट्रिब्यूट google PushAvStreamTransportTrait google WebRtcLiveViewTrait |
डोरबेल |
लाइव स्ट्रीम शुरू करना
लाइव स्ट्रीम शुरू करने के लिए, सेशन डिस्क्रिप्शन प्रोटोकॉल (एसडीपी) स्ट्रिंग को WebRtcLiveViewTrait
ट्रेट के startLiveView(offerSdp:)
तरीके पर भेजें. इससे तीन वैल्यू मिलती हैं:
- सेशन के लिए एसडीपी.
- सत्र की अवधि, सेकंड में.
- यह सेशन आईडी है. इसका इस्तेमाल सेशन को बढ़ाने या खत्म करने के लिए किया जा सकता है.
public func sendOffer(offerSdp: String) async throws
-> (answerSdp: String, mediaSessionId: String, liveViewDuration: TimeInterval)
{
do {
Logger.info("Sending StartLiveView command...")
let response = try await liveViewTrait.startLiveView(
offerSdp: offerSdp
)
Logger.info("Received StartLiveView response: \(response)")
return (
answerSdp: response.answerSdp,
mediaSessionId: response.mediaSessionId,
liveViewDuration: TimeInterval(response.liveSessionDurationSeconds)
)
} catch {
Logger.error("Failed to send StartLiveView command: \(error)")
throw error
}
}
लाइव स्ट्रीम की अवधि बढ़ाना
लाइव स्ट्रीम की अवधि पहले से तय होती है. इसके बाद, वे खत्म हो जाती हैं. चालू स्ट्रीम की अवधि बढ़ाने के लिए, extendLiveView(mediaSessionId:optionalArgsProvider:)
तरीके का इस्तेमाल करके, अवधि बढ़ाने का अनुरोध करें:
public func extendLiveView(mediaSessionId: String) async throws {
do {
Logger.info("Extending live view...")
let extendedDuration = try await liveViewTrait.extendLiveView(mediaSessionId: mediaSessionId)
Logger.info("Extended live view for \(extendedDuration.liveSessionDurationSeconds) seconds.")
} catch {
Logger.error("Failed to extend live view: \(error)")
throw error
}
}
रिकॉर्डिंग की सुविधा को चालू और बंद करना
कैमरे की रिकॉर्डिंग की सुविधा चालू करने के लिए, PushAvStreamTransportTrait
ट्रेट के setTransportStatus(transportStatus:optionalArgsProvider:)
तरीके में TransportStatusEnum.Active
पास करें. रिकॉर्डिंग की सुविधा बंद करने के लिए, इसे TransportStatusEnum.Inactive
पर सेट करें.
यहां दिए गए उदाहरण में, हमने इन कॉल को एक ही कॉल में रैप किया है. इसमें रिकॉर्डिंग की सुविधा को टॉगल करने के लिए, Boolean
का इस्तेमाल किया गया है:
public func toggleIsRecording(isOn: Bool) {
self.uiState = .loading
guard let pushAvStreamTransportTrait else {
Logger.error("PushAvStreamTransportTrait not found.")
return
}
Task {
do {
Logger.debug("Toggling onOff to \(isOn ? "ON" : "OFF")...")
try await pushAvStreamTransportTrait.setTransportStatus(
transportStatus: isOn ? .active : .inactive)
if isOn {
do {
self.player = try self.createWebRtcPlayer()
} catch {
Logger.error("Failed to initialize WebRtcPlayer: \(error)")
self.uiState = .disconnected
return
}
await self.player?.initialize()
self.uiState = .live
} else {
self.player = nil
self.uiState = .off
}
} catch {
Logger.error("Failed to toggle onOff: \(error)")
}
}
}
देखें कि रिकॉर्डिंग की सुविधा चालू है या नहीं
यह पता लगाने के लिए कि कैमरे की रिकॉर्डिंग की सुविधा चालू है या नहीं, देखें कि कोई कनेक्शन चालू है या नहीं. यहां दिए गए उदाहरण में, ऐसा करने के लिए दो फ़ंक्शन तय किए गए हैं:
public func isDeviceRecording() -> Bool {
guard let pushAvStreamTransportTrait else {
Logger.error("PushAvStreamTransportTrait not found.")
return false
}
guard
let hasActiveConnection =
pushAvStreamTransportTrait
.attributes
.currentConnections?
.contains(where: { $0.transportStatus == .active })
else {
return false
}
return hasActiveConnection
}
TalkBack को चालू और बंद करना
TalkBack की सुविधा शुरू करने के लिए, WebRtcLiveViewTrait
ट्रेट के startTalkback(mediaSessionId:optionalArgsProvider:)
तरीके को कॉल करें.
इसे बंद करने के लिए, stopTalkback(mediaSessionId:)
का इस्तेमाल करें.
public func toggleTwoWayTalk(isOn: Bool, mediaSessionId: String) async throws {
do {
Logger.info("Toggling twoWayTalk to \(isOn ? "ON" : "OFF")...")
if isOn {
try await liveViewTrait.startTalkback(mediaSessionId: mediaSessionId)
} else {
try await liveViewTrait.stopTalkback(mediaSessionId: mediaSessionId)
}
} catch {
throw HomeError.commandFailed("Failed to toggle twoWayTalk: \(error)")
}
}