অ্যান্ড্রয়েডের জন্য ক্যামেরা ডিভাইস গাইড

ক্যামেরা ডিভাইসের ধরণটি দুটি বৈশিষ্ট্য ব্যবহার করে বাস্তবায়িত হয়: PushAvStreamTransport , যা পুশ-ভিত্তিক প্রোটোকল ব্যবহার করে অডিও এবং ভিডিও স্ট্রিম পরিবহন পরিচালনা করে এবং WebRtcLiveView , যা লাইভস্ট্রিম এবং টকব্যাক নিয়ন্ত্রণ করার ক্ষমতা প্রদান করে। ডোরবেল ডিভাইসের ধরণ, যে বাস্তবায়নগুলিতে ক্যামেরা ক্ষমতা রয়েছে, সেগুলির জন্যও এই বৈশিষ্ট্যগুলি ব্যবহার করা হয়।

হোম এপিআই ডিভাইসের ধরণ বৈশিষ্ট্য সুইফট নমুনা অ্যাপ ব্যবহারের ধরণ

ক্যামেরা

Google Camera DeviceType

home.matter.6006.types.0158

এমন একটি ডিভাইস যা স্থির ছবি বা ভিডিও ধারণ করে। ক্যামেরাগুলিতে অ্যাক্সেসযোগ্য লাইভস্ট্রিম, দ্বি-মুখী টকব্যাক, অথবা সনাক্তকরণ ইভেন্ট থাকতে পারে।

প্রয়োজনীয় বৈশিষ্ট্য
google PushAvStreamTransportTrait
গুগল ওয়েবআরটিসিলাইভভিউট্রেট

ক্যামেরা

ডোরবেল

Google Doorbell DeviceType

home.matter.6006.types.0113

দরজার বাইরের একটি বোতাম দ্বারা চালিত একটি ডিভাইস যা একটি শ্রবণযোগ্য এবং/অথবা দৃশ্যমান সংকেত তৈরি করে, যা দরজার অন্য পাশে কোথাও থাকা ব্যক্তির দৃষ্টি আকর্ষণ করার জন্য ব্যবহৃত হয়। ডোরবেলগুলিতে অ্যাক্সেসযোগ্য লাইভস্ট্রিম, দ্বি-মুখী টকব্যাক বা সনাক্তকরণ ইভেন্ট থাকতে পারে।

প্রয়োজনীয় বৈশিষ্ট্য
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)
  }
}