ক্যামেরা ডিভাইসের ধরণটি দুটি বৈশিষ্ট্য ব্যবহার করে বাস্তবায়িত হয়: PushAvStreamTransport , যা পুশ-ভিত্তিক প্রোটোকল ব্যবহার করে অডিও এবং ভিডিও স্ট্রিম পরিবহন পরিচালনা করে এবং WebRtcLiveView , যা লাইভস্ট্রিম এবং টকব্যাক নিয়ন্ত্রণ করার ক্ষমতা প্রদান করে। ডোরবেল ডিভাইসের ধরণ, যে বাস্তবায়নগুলিতে ক্যামেরা ক্ষমতা রয়েছে, সেগুলির জন্যও এই বৈশিষ্ট্যগুলি ব্যবহার করা হয়।
| হোম এপিআই ডিভাইসের ধরণ | বৈশিষ্ট্য | সুইফট নমুনা অ্যাপ | ব্যবহারের ধরণ |
|---|---|---|---|
ক্যামেরা এমন একটি ডিভাইস যা স্থির ছবি বা ভিডিও ধারণ করে। ক্যামেরাগুলিতে অ্যাক্সেসযোগ্য লাইভস্ট্রিম, দ্বি-মুখী টকব্যাক, অথবা সনাক্তকরণ ইভেন্ট থাকতে পারে। | প্রয়োজনীয় বৈশিষ্ট্য google PushAvStreamTransportTrait গুগল ওয়েবআরটিসিলাইভভিউট্রেট | ক্যামেরা | |
ডোরবেল দরজার বাইরের একটি বোতাম দ্বারা চালিত একটি ডিভাইস যা একটি শ্রবণযোগ্য এবং/অথবা দৃশ্যমান সংকেত তৈরি করে, যা দরজার অন্য পাশে কোথাও থাকা ব্যক্তির দৃষ্টি আকর্ষণ করার জন্য ব্যবহৃত হয়। ডোরবেলগুলিতে অ্যাক্সেসযোগ্য লাইভস্ট্রিম, দ্বি-মুখী টকব্যাক বা সনাক্তকরণ ইভেন্ট থাকতে পারে। | প্রয়োজনীয় বৈশিষ্ট্য google PushAvStreamTransportTrait গুগল ওয়েবআরটিসিলাইভভিউট্রেট | ডোরবেল |
একটি লাইভস্ট্রিম শুরু করুন
লাইভস্ট্রিম শুরু করতে, WebRtcLiveView বৈশিষ্ট্যের startLiveView() পদ্ধতিতে Session Description Protocol (SDP) স্ট্রিং পাঠান, যা তিনটি মান সম্বলিত 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 }
রেকর্ডিং ক্ষমতা সক্ষম এবং অক্ষম করুন
ক্যামেরার রেকর্ডিং ক্ষমতা সক্রিয় করতে, TransportStatusEnum.Active কে PushAvStreamTransport বৈশিষ্ট্যের setTransportStatus() পদ্ধতিতে পাস করুন। রেকর্ডিং ক্ষমতা অক্ষম করতে, এটি 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() ফাংশনটি একটি predicate সহ ব্যবহার করা:
// Fetch the current connections suspend fun queryRecordModeState(cameraDevice: HomeDevice, cameraDeviceType) { val pushAvStreamTransport = getPushAvStreamTransport() return pushAvStreamTransport.findTransport().let { it.transportConfigurations.any { it.transportStatus == TransportStatusEnum.Active } }
টকব্যাক শুরু করুন এবং বন্ধ করুন
টকব্যাক শুরু করতে, 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) } }