মাল্টি-ক্লায়েন্ট ক্যামেরা সক্ষম করুন

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

  • প্রাইমারি ক্লায়েন্ট: শেয়ার করা ক্লায়েন্টদের মধ্যে সর্বোচ্চ অগ্রাধিকারপ্রাপ্ত ক্লায়েন্ট। একটি প্রাইমারি ক্লায়েন্ট ক্যাপচার রিকোয়েস্ট তৈরি করতে এবং ক্যাপচার প্যারামিটার পরিবর্তন করতে পারে।

  • সেকেন্ডারি ক্লায়েন্ট: অন্য সকল শেয়ার্ড ক্লায়েন্ট হলো সেকেন্ডারি ক্লায়েন্ট। সেকেন্ডারি ক্লায়েন্টরা ক্যাপচার রিকোয়েস্ট তৈরি করতে পারে না বা ক্যাপচার প্যারামিটার পরিবর্তন করতে পারে না। সেকেন্ডারি ক্লায়েন্টরা শুধুমাত্র স্ট্রিমিং শুরু বা বন্ধ করার জন্য রিকোয়েস্ট পাঠাতে পারে।

    স্ট্রিমিংয়ের জন্য, ক্যামেরা সার্ভিসটি প্রিভিউ টেমপ্লেটের জন্য ডিফল্ট ক্যাপচার রিকোয়েস্ট প্যারামিটার ব্যবহার করে। যদি প্রাইমারি ক্লায়েন্ট স্ট্রিমিং করে, তবে সার্ভিসটি প্রাইমারি ক্লায়েন্ট কর্তৃক নির্দিষ্ট করা ক্যাপচার রিকোয়েস্ট প্যারামিটার ব্যবহার করে।

একটি শেয়ার্ড সেশন কনফিগার করুন

একটি ক্যামেরা ডিভাইস শেয়ার করতে, /system_ext/etc/ -এ অবস্থিত shared_session_config.xml নামের ফাইলে শেয়ার্ড সেশন কনফিগারেশনটি প্রদান করুন। এই কোড স্যাম্পলটিতে, ক্যামেরা আইডি 0 এমন একটি কনফিগারেশনের মাধ্যমে ক্যামেরা শেয়ারিং সমর্থন করে, যাতে ImageReader এবং SurfaceView এই দুটি স্ট্রিম অন্তর্ভুক্ত রয়েছে।

<SharedCameraSessionConfigurations colorSpace="-1">
    <!-- colorSpace: ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED -->
    <SharedCameraSessionConfiguration cameraId="0">
        <!-- First OutputConfiguration: All optional fields are provided -->
        <OutputConfiguration>
            <!-- surfaceType: SURFACE_TYPE_IMAGE_READER -->
            <surfaceType>4</surfaceType>
            <width>1920</width>
            <height>1080</height>
            <!-- physicalCameraId is omitted; defaults to "" -->
            <!-- streamUseCase: ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT -->
            <streamUseCase>0</streamUseCase>
            <!-- timestampBase: TIMESTAMP_BASE_DEFAULT -->
            <timestampBase>0</timestampBase>
            <!-- mirrorMode: MIRROR_MODE_AUTO -->
            <mirrorMode>0</mirrorMode>
            <useReadoutTimestamp>0</useReadoutTimestamp>
            <!-- format: HAL_PIXEL_FORMAT_RGBA_8888 -->
            <format>1</format>
            <!-- usage: AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN -->
            <usage>3</usage>
            <!-- dataSpace: HAL_DATASPACE_UNKNOWN -->
            <dataSpace>0</dataSpace>
        </OutputConfiguration>
        <!-- Second OutputConfiguration: All optional fields are provided -->
        <OutputConfiguration>
            <!-- surfaceType: SURFACE_TYPE_SURFACE_VIEW -->
            <surfaceType>0</surfaceType>
            <width>1920</width>
            <height>1080</height>
            <!-- physicalCameraId is omitted; defaults to "" -->
            <!-- streamUseCase: ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT -->
            <streamUseCase>0</streamUseCase>
            <!-- timestampBase: TIMESTAMP_BASE_DEFAULT -->
            <timestampBase>0</timestampBase>
            <!-- mirrorMode: MIRROR_MODE_AUTO -->
            <mirrorMode>0</mirrorMode>
            <useReadoutTimestamp>0</useReadoutTimestamp>
            <!-- format: HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED -->
            <format>34</format>
            <!-- usage: AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE|AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY -->
            <usage>256|2048</usage>
            <!-- dataSpace: HAL_DATASPACE_UNKNOWN -->

            <dataSpace>0</dataSpace>
        </OutputConfiguration>
      </SharedCameraSessionConfiguration>
</SharedCameraSessionConfigurations>

একটি শেয়ার্ড সেশন কনফিগারেশন জানতে, ক্লায়েন্টরা SHARED_SESSION_CONFIGURATION এর জন্য CameraCharacteristics ব্যবহার করে। যে ক্লায়েন্টরা শেয়ার্ড মোডে ক্যামেরা অ্যাক্সেস করে, তাদের অবশ্যই শেয়ার্ড সেশন কনফিগারেশন ব্যবহার করতে হবে। যখন কোনো ক্লায়েন্টের দেওয়া সেশন কনফিগারেশন শেয়ার্ড সেশন কনফিগারেশনের সাথে মেলে না, তখন একটি createCaptureSession কল ব্যর্থ হয়।

জাভা এপিআই

CameraManager এবং CameraDevice শেয়ার্ড মোডে ক্যামেরা খোলার জন্য এপিআই (API) প্রদান করে।

ক্যামেরাম্যানেজার এপিআই

CameraManager এই এপিআইগুলো প্রদান করে:

  • isCameraDeviceSharingSupported : কোনো ক্যামেরা শেয়ার্ড মোড সমর্থন করে কিনা, তা নির্ধারণ করতে ক্লায়েন্টরা এই API ব্যবহার করে।

  • openSharedCamera : যদি কোনো ক্যামেরা শেয়ার্ড মোড সমর্থন করে, তাহলে ক্লায়েন্টরা এই API ব্যবহার করে ক্যামেরাটি শেয়ার্ড মোডে খুলতে পারে।

ক্যামেরাডিভাইস.স্টেটকলব্যাক এপিআই

CameraDevice.StateCallback এই API-গুলো প্রদান করে:

  • onOpenedInSharedMode : ক্যামেরা শেয়ার্ড মোডে খোলা হলে ক্লায়েন্টরা এই কলব্যাকটি পায়। এই কলব্যাকটি নির্দেশ করে যে ক্লায়েন্টটি প্রাইমারি নাকি সেকেন্ডারি ক্লায়েন্ট।

  • onClientSharedAccessPriorityChanged : যখন একটি শেয়ার্ড সেশন খোলা হয়, তখন এই কলব্যাকটি ট্রিগার হয় যদি কোনো উচ্চ অগ্রাধিকারের ক্লায়েন্ট একই ক্যামেরাটি খোলা বা বন্ধ করার কারণে কোনো ক্লায়েন্টের অগ্রাধিকার পরিবর্তিত হয়।

ক্যামেরাশেয়ারডক্যাপচারসেশন

CameraSharedCaptureSession ক্লাসটি একটি শেয়ার্ড ক্যাপচার সেশনকে প্রতিনিধিত্ব করে। শেয়ার্ড ক্যামেরা মোডে, যে ক্লায়েন্ট একটি সেশন তৈরি করে, তাকে অবশ্যই SESSION_SHARED সেশন টাইপটি ব্যবহার করতে হবে।

সিস্টেম যখন একটি সেশন তৈরি করে, তখন CameraCaptureSession কে CameraSharedCaptureSession এ কাস্ট করুন।

সেকেন্ডারি ক্লায়েন্টরা createCaptureRequest ব্যবহার করতে পারে না। এর পরিবর্তে, সেকেন্ডারি ক্লায়েন্টরা নির্দিষ্ট সারফেসে স্ট্রিমিং শুরু করার জন্য startStreaming API এবং স্ট্রিমিং বন্ধ করার জন্য stopStreaming API ব্যবহার করে।

অ্যান্ড্রয়েড এনডিকে এপিআই

বিল্ট-ইন অ্যাপগুলো শেয়ার্ড মোডে ক্যামেরা খুলতে এই অ্যান্ড্রয়েড এনডিকে এপিআইগুলো ব্যবহার করে:

শেয়ার করা ক্যামেরা পরীক্ষা করুন

মাল্টি-ক্লায়েন্ট ক্যামেরার জন্য নির্দিষ্ট এই পরীক্ষাগুলো দেখুন:

বিধিনিষেধ

শেয়ার্ড ক্যামেরা মোড এই অপশনগুলো সমর্থন করে না :

  • বার্স্ট ক্যাপচার অনুরোধ
  • বর্ধিত অধিবেশন
  • উচ্চ-গতির সেশন
  • অফলাইন সেশন
  • পৃষ্ঠ ভাগাভাগি সহ OutputConfiguration
  • পুনঃপ্রক্রিয়াজাতযোগ্য ক্যাপচার সেশন
  • তৃতীয় পক্ষের অ্যাপগুলি

যখন কোনো উচ্চ অগ্রাধিকারপ্রাপ্ত ক্লায়েন্ট সাধারণ মোডে একটি ক্যামেরা খোলে, তখন সিস্টেম সমস্ত শেয়ার করা ক্যামেরা ক্লায়েন্টকে বহিষ্কার করে দেয়।