ড্যাশক্যাম ইন্টিগ্রেট করুন

ড্যাশক্যাম অ্যাপটি AAOS-এর সাথে সমন্বিত হওয়ার জন্য ডিজাইন করা হয়েছে, যা চালকদের উন্নত নিরাপত্তা ও সুরক্ষার জন্য ভিডিও রেকর্ডিংয়ের সুবিধা প্রদান করে। এই নির্দেশিকাটিতে একটি সফল বাস্তবায়ন নিশ্চিত করার জন্য প্রযুক্তিগত প্রয়োজনীয়তা, সমন্বয়ের ধাপসমূহ এবং সর্বোত্তম অনুশীলনসমূহ তুলে ধরা হয়েছে।

পূর্বশর্ত

এগিয়ে যাওয়ার আগে, এই পূর্বশর্তগুলো পূরণ হয়েছে কিনা তা নিশ্চিত করুন:

এসডিকে:

  • এসডিকে ৩১ বা উচ্চতর সংস্করণ প্রয়োজন।

হার্ডওয়্যার:

  • AAOS-এর জন্য EVS বা Camera2 ক্যামেরা উপলব্ধ।
  • পর্যাপ্ত অভ্যন্তরীণ স্টোরেজ স্পেস অথবা অপসারণযোগ্য বাহ্যিক স্টোরেজের জন্য সাপোর্ট
    ভিডিও রেকর্ডিংয়ের জন্য অবশ্যই উপস্থিত থাকতে হবে।

সফটওয়্যার প্রয়োজনীয়তা:

  • আনবান্ডলড সাপোর্ট। আরও জানতে, আনবান্ডলড অ্যাপস দেখুন।
  • অনুমতি। ড্যাশক্যামের জন্য সিস্টেম অনুমতির প্রয়োজন।

সোর্স কোডটি নিন

ড্যাশক্যাম AAOS-এর আনবান্ডলড অ্যাপগুলোর একটি অংশ। আনবান্ডলড কোডটি দেখতে, ‘কোডটি দেখুন’ দেখুন।

অ্যান্ড্রয়েড কোড সার্চ ব্যবহার করে সোর্স কোড ব্রাউজ করুন।

সোর্স কোডটি এই তিনটি মডিউলে প্রদান করা হয়েছে:

  • ড্যাশক্যাম পরিষেবা। স্ট্রিমিং, রেকর্ডিং এবং ট্রিগারিং লজিক।
  • ড্যাশক্যাম ম্যানেজার। ড্যাশক্যাম সার্ভিসের সাথে সংযোগ স্থাপন করে এবং ক্লায়েন্টদের জন্য একটি স্থিতিশীল এপিআই (API) উন্মুক্ত করে।
  • ড্যাশক্যাম অ্যাপ। ড্যাশক্যাম ম্যানেজার এপিআই ব্যবহার করে ড্যাশক্যাম অ্যাপ্লিকেশনটির রেফারেন্স দিন।

স্থাপত্য ডায়াগ্রাম

ড্যাশক্যাম তৈরি করুন

ড্যাশক্যাম বিল্ড করতে সুং (Soong) বা গ্র্যাডল (Gradle) ব্যবহার করুন।

সুং

সুং-এর উপর:

mma DashcamService DashcamManager-lib DashcamApp

APK ফাইলগুলো out/target/product/[lunch-target]/system/priv-app/ ফোল্ডারে অবস্থিত।

গ্রেডল

গ্রেডলে:

./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble

APK ফাইলগুলো out/aaos-apps-gradle-build/ ফোল্ডারে অবস্থিত।

Gradle ব্যবহার করে ড্যাশক্যাম বিল্ড করার বিস্তারিত নির্দেশাবলী README ফাইলে দেওয়া আছে।

অনুমতি

ড্যাশক্যাম সার্ভিস এবং ড্যাশক্যাম অ্যাপের জন্য একাধিক সিস্টেম পারমিশন প্রয়োজন।

এই অনুমতিগুলো প্রদান করার সবচেয়ে সহজ উপায় হলো ব্লুপ্রিন্ট বা মেক ব্যবহার করে একটি পূর্ব-নির্মিত সেটআপে সেগুলোকে অন্তর্ভুক্ত করা।

ব্লুপ্রিন্টে:

Android.bp
android_app_import {
    name: "DashcamApp-prebuilt",
    apk: "DashcamApp.apk",
    privileged: true,
    certificate: "platform",
    required: ["allowed_privapp_com.android.car.dashcam"],
}

prebuilt_etc {
    name: "allowed_privapp_com.android.car.dashcam",
    sub_dir: "default-permissions",
    src: "allowed_privapp_com.android.car.dashcam.xml",
    filename_from_src: true,
}

নির্মাণাধীন:

dashcam.mk
PRODUCT_PACKAGES += \
    DashcamApp
PRODUCT_COPY_FILES :=\
vendor/[path-to-vendor-prebuilts]/apps/Dashcam/allowed_privapp_com.android.car.dashcam:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/com.android.car.dashcam.xml \

allowed_privapp_com.android.car.dashcam.xml নামে একটি পারমিশন ফাইল তৈরি করুন:

<permissions>
  <privapp-permissions package="com.android.car.dashcam.service">
      <permission name="" />
  </privapp-permissions>
  <privapp-permissions package="com.android.car.dashcam.app">
      <permission name="" />
  </privapp-permissions>
</permissions>

ম্যানিফেস্ট থেকে পারমিশনগুলো পারমিশন ফাইলে যোগ করুন।

ড্যাশক্যাম ব্যবহার করার আগে, AAOS Camera- তে দেখানো পদ্ধতি অনুযায়ী ড্যাশক্যাম সার্ভিসকে Camera2-এর জন্য পূর্ব-অনুমতি প্রদান করুন।

পারমিশন ফাইলের মতোই একই পদ্ধতিতে প্রি-গ্র্যান্টেড পারমিশন ফাইলটি ব্লুপ্রিন্ট বা মেক ফাইলে যোগ করুন।

pre-grant-permissions-com.android.car.dashcam.xml এ:

<exceptions>
    <exception package="com.android.car.dashcam.service">
        <permission name="android.permission.CAMERA" fixed="false" />
        <permission name="android.permission.SYSTEM_CAMERA" fixed="false" />
        <permission name="android.permission.CAMERA_HEADLESS_SYSTEM_USER" fixed="false" />
    </exception>
</exceptions>

Android.bp তে :

...
required["pre-grant-permissions-com.android.car.dashcaml"]
...

prebuilt_etc {
    name: "pre-grant-permissions-com.android.car.dashcaml",
    sub_dir: "default-permissions",
    src: "pre-grant-permissions-com.android.car.dashcam.xml",
    filename_from_src: true,
}

আরও জানতে, ‘সিস্টেম ইমেজে একটি প্রি-বিল্ড ইন্টিগ্রেট করুন’ এবং ‘একটি অ্যালাওলিস্ট যোগ করুন ’ দেখুন।

সাইডলোড

পারমিশন ফাইলটি সাইডলোডও করা যায়। যখন প্রি-বিল্ট ড্যাশক্যামটি কনফিগার করা থাকে না, তখন এই পদ্ধতিটি ব্যবহার করুন।

পূর্বে প্রি-বিল্টস বিভাগে তৈরি করা পারমিশন ফাইলটি ব্যবহার করে, চালান:

adb root
adb remount
adb push allowed_privapp_com.android.car.dashcam.xml /etc/permissions/allowed_privapp_com.android.car.dashcam.xml
adb shell chmod 644 /etc/permissions/allowed_privapp_com.android.car.dashcam.xml

etc/default-permissions/ এর অনুরূপ পদ্ধতিতে pregrant permissions ফাইলটি যোগ করুন।

ওভারলে কনফিগার করুন

ড্যাশক্যাম পরিষেবাতে ওভারলেযোগ্য কনফিগারেশন রয়েছে।

পরিষেবা কনফিগারেশন

dashcam-service/res/values/config.xml

এই ফাইলে পরিষেবাটির জন্য কনফিগারেশন রয়েছে:

  • config_file /assets এ থাকা ট্রিগার কনফিগারেশন ফাইলের নাম
  • অভ্যন্তরীণ স্টোরেজে রেকর্ডিং সংরক্ষণ করার allow_internal_storage দিন।
  • boot_startup_enabled ডিভাইস বুট আপের সময় ড্যাশক্যাম পরিষেবা চালু হয়
  • রেকর্ডিং শুরু হলে notifications_on দেখান
  • default_app_component হলো ডিফল্ট ড্যাশক্যাম অ্যাপ, যেটির গ্লোবাল রেকর্ডিং অ্যাক্সেস এবং গ্লোবাল ট্রিগার অ্যাক্সেস রয়েছে।
  • IRecordingModule বাস্তবায়নের recording_module উপাদানের নাম
  • IStreamingModule বাস্তবায়নের streaming_module উপাদানের নাম
  • trigger_module ITriggerModule বাস্তবায়নের উপাদানের নাম

ট্রিগার কনফিগারেশন

রেকর্ডিং ট্রিগারগুলো কনফিগার করতে, নিম্নলিখিতটির একটি অনুলিপি তৈরি করুন:

dashcam-service/src/assets/config.xml

এবং এটি অ্যাসেটস ডিরেক্টরিতে যোগ করুন। সার্ভিস কনফিগারেশন ফাইলের config_file এলিমেন্টে এই ফাইলটিকে নির্দেশ করুন।

ট্রিগার কনফিগারেশনটি স্টোরেজ, ক্যামেরা এবং ট্রিগার অংশগুলো নিয়ে গঠিত:

স্টোরেজ

স্টোরেজ কনফিগারেশনে নিম্নলিখিত উপাদানগুলো রয়েছে:

  • maxStorageUsagePercent রেকর্ডিং ছাঁটাই করার আগে ড্যাশক্যাম উপলব্ধ স্টোরেজের সর্বোচ্চ কত শতাংশ ব্যবহার করবে।

  • maxStorageUsageMegabytes রেকর্ডিং ছাঁটাই করার আগে ড্যাশক্যাম দ্বারা ব্যবহৃত সর্বোচ্চ স্টোরেজের পরিমাণ (মেগাবাইটে)।

  • maxAgeHoursBeforePrune একটি রেকর্ডিং ছাঁটাই করার আগে সর্বোচ্চ ঘণ্টার সংখ্যা। স্টোরেজ সীমা পূর্ণ হয়ে গেলে একটি রেকর্ডিং আগেও ছাঁটাই করা যেতে পারে।

ক্যামেরা

ক্যামেরা কনফিগারেশনে নিম্নলিখিত উপাদানগুলো রয়েছে:

  • ক্যামেরা আইডি। ক্যামেরা প্রিফিক্স সহ ক্যামেরার আইডি।

  • prerollLengthMs প্রতিটি ইভেন্টের সাথে সংরক্ষণ করার জন্য প্রিরোলের দৈর্ঘ্য।

  • width ক্যামেরা থেকে প্রাপ্ত বাফারের ঐচ্ছিক প্রস্থ।

  • height ক্যামেরা থেকে প্রাপ্ত বাফারের ঐচ্ছিক উচ্চতা।

<CameraConfig>
  <Camera
      ID="EVS:1"
      prerollLengthMs="10000"
      width="1920"
      height="1080" />
  <Camera
      ID="Camera2:1"
      prerollLengthMs="10000" />
</CameraConfig>

এই উদাহরণে ক্যামেরা আইডি EVS:1-কে 1080p রেজোলিউশনে 10 সেকেন্ডের প্রি-রোল সহ এবং ক্যামেরা আইডি Camera2:1-কে ডিফল্ট প্রস্থ ও উচ্চতা সহ 10 সেকেন্ডের প্রি-রোল সহ দেখানো হয়েছে।

ট্রিগার

ট্রিগার কনফিগারেশনটি নিম্নলিখিতভাবে সংজ্ঞায়িত ট্রিগারগুলির একটি তালিকা নিয়ে গঠিত:

  • name অনন্য ট্রিগার নাম।

  • cameras আইডি।

  • sensorPropertyID হলো সেন্সরের আইডি, যার আগে সেন্সর গ্রুপের নাম যুক্ত থাকে। প্রিফিক্স অপশনগুলো হলো VHAL বা SENSOR_MANAGER

  • ট্রিগারের description যা UI-তে প্রদর্শিত হয়।

  • recordingLengthMs দৈর্ঘ্য (Ms) ইভেন্টের পরে রেকর্ড করার সময়কাল (মিলিসেকেন্ডে)।

  • sensorValueType হলো সেন্সর দ্বারা উৎপাদিত ডেটার ধরন। বিকল্পগুলো হলো INT , INT_ARRAY , FLOAT , FLOAT_ARRAY , BOOLEAN, STRING

  • thresholdType thresholdValue সাপেক্ষে সেন্সরের মান কীভাবে মূল্যায়ন করা হবে তার উপায়। বিকল্পগুলো হলো AVERAGE , BOOLEAN , EQUALS , LEAP , LEAP_AVERAGE , LEAP_OVER , PEAK এবং PEAK_HOLD

  • thresholdValue সেন্সরের মানের সাথে তুলনা করা মান।

  • thresholdExtra কিছু থ্রেশহোল্ড টাইপের জন্য প্রয়োজনীয় অতিরিক্ত মান, যেমন AVERAGE জন্য রেঞ্জ।

  • triggerCooldown এই ধরনের আরেকটি ইভেন্ট চালু হওয়ার আগে শীতল হওয়ার সময় (মিলিসেকেন্ডে)।

<EventTriggers>
  <EventTrigger
      name="AEB"
      cameras="EVS:1, EVS:2"
      sensorPropertyID="VHAL:289411073"
      description="Automatic Emergency Braking"
      recordingLengthMs="20000"
      sensorValueType="INT"
      thresholdType="EQUALS"
      thresholdValue="2"
      triggerCooldown="5000"/>
</EventTriggers>

এই উদাহরণটি এমন একটি ট্রিগার দেখায় যেখানে TriggerModule পূর্ণসংখ্যা মান উৎপাদনকারী একটি VHAL সেন্সরকে পর্যবেক্ষণ করে। TriggerModule থ্রেশহোল্ড মানের সাথে সমতার তুলনা করে। যখন সমতার শর্তটি পূরণ হয়, তখন EVS ক্যামেরা ১ এবং ২-এ একটি ট্রিগার রেকর্ডিং শুরু করে।

<EventTrigger
            name="SPEED"
            cameras="Camera2:0, Camera2:1,  Camera2:2,  Camera2:3"
            sensorPropertyID="VHAL:291504648"
            description="Over speed"
            recordingLengthMs="10000"
            sensorValueType="FLOAT"
            thresholdType="AVERAGE"
            thresholdValue="20.0"
            thresholdExtra="10"
            triggerCooldown="2000"/>

এই উদাহরণটি এমন একটি ট্রিগার দেখায় যেখানে TriggerModule ফ্লোট মান উৎপাদনকারী একটি VHAL সেন্সরকে পর্যবেক্ষণ করে। TriggerModule 10 স্যাম্পলের একটি পরিসরের মধ্যে সেন্সরের গড়কে 20.0 এর থ্রেশহোল্ড মানের সাথে তুলনা করে। স্যাম্পল পরিসরটি thresholdExtra )-তে সেট করা থাকে। triggerCooldown -এ সেট করা অনুযায়ী প্রতি 2000 মিলিসেকেন্ড পর পর একটি নতুন ইভেন্ট ট্রিগার করা যেতে পারে।

মডিউল

ড্যাশক্যাম পরিষেবাটি তিনটি মডিউল নিয়ে গঠিত:

  • স্ট্রিম-এর মধ্যে ক্যামেরা থেকে আসা স্ট্রিমগুলো পরিচালনা করার লজিক রয়েছে।

  • রেকর্ডিং-এ রেকর্ডিংগুলো পরিচালনা করার লজিক থাকে।

  • সেন্সর ডেটা থেকে রেকর্ডিং শুরু করার লজিকটি ট্রিগারে থাকে। মডিউল এপিআইগুলো তাদের সংশ্লিষ্ট ইন্টারফেস— IStreamModule , IRecorderModule এবং ITriggerModule এ সংজ্ঞায়িত করা হয়েছে এবং DashcamServiceAPI মাধ্যমে DashcamManager কাছে উন্মুক্ত করা হয়েছে।

ওভারলে মডিউল

ড্যাশক্যাম সার্ভিস মডিউল ইমপ্লিমেন্টেশনগুলো কোথায় পাওয়া যাবে তা নির্ধারণ করতে dashcam-service/res/values/config.xml ব্যবহার করে। প্রতিটি মডিউলের জন্য ডিফল্ট ইমপ্লিমেন্টেশন দেওয়া থাকে। তবে, সংশ্লিষ্ট কনফিগ ভ্যালুতে কম্পোনেন্ট সেট করার মাধ্যমে প্রতিটি মডিউলকে ওভারলে করা যায়।

OEM বাস্তবায়ন উপাদানের নাম সেট করুন:

  • IRecorderModule থেকে recording_module
  • IStreamModule থেকে streaming_module
  • ITriggerModule থেকে trigger_module

রানটাইমে, ড্যাশক্যাম সার্ভিসটি প্রতিটি মডিউলের জন্য config.xml এ সেট করা কম্পোনেন্ট নামটি ইনস্ট্যানশিয়েট করে।

অ্যাপ ডেভেলপারদের জন্য নির্দেশিকা

ড্যাশক্যাম হলো একটি উৎপাদন-উপযোগী এবং কাস্টমাইজযোগ্য ড্যাশক্যাম সলিউশন। ড্যাশক্যাম, Dashcam service সাথে যোগাযোগের জন্য ড্যাশক্যাম ম্যানেজার এপিআই (API) ব্যবহার করে। ড্যাশক্যাম ম্যানেজার এপিআই-টি IDashcamManager এ পাওয়া যাবে। প্রয়োজনীয় অনুমতি আছে এমন যেকোনো অ্যাপ ড্যাশক্যাম ম্যানেজার ব্যবহার করতে পারে।

ওভারলেইউআই

অ্যাপটি রানটাইম রিসোর্স ওভারলে ব্যবহার করে কাস্টমাইজ করা যায়। আরও জানতে, রানটাইম রিসোর্স ওভারলে দেখুন। ওভারলেযোগ্য এলিমেন্টগুলোর তালিকা দেখতে, overlayable.xml দেখুন।

ট্রিগার প্রসারিত করুন

DashcamManager#addTrigger() কল করার মাধ্যমে বর্তমান সেশনের জন্য ট্রিগারগুলো সম্প্রসারিত করা যায়। যোগ করা ট্রিগারগুলো শুধুমাত্র বর্তমান সেশনের জন্যই স্থায়ী থাকে।

স্বয়ংক্রিয় সূচনা

স্বয়ংক্রিয়ভাবে রেকর্ডিং শুরু হওয়া সমর্থিত নয়। তবে, onBoot ) অবস্থায় DashcamManager.startRecording() কল করার মাধ্যমে একটি ম্যানুয়াল ট্রিগার চালু করা যেতে পারে।

সর্বোত্তম অনুশীলন

  • সংরক্ষণ। বাইরে অপসারণযোগ্য সংরক্ষণ ব্যবস্থা ব্যবহারের জন্য বিশেষভাবে সুপারিশ করা হচ্ছে।

  • ব্যবহারকারীর অভিজ্ঞতা। AAOS ডিজাইন নির্দেশিকা মেনে ড্যাশক্যাম অ্যাপের UI-টি স্বজ্ঞাত এবং ব্যবহারকারী-বান্ধব করে ডিজাইন করুন।

  • পারফরম্যান্স অপ্টিমাইজেশন। রিসোর্স ব্যবহার কমাতে এবং AAOS-এ এর মসৃণ কার্যক্রম নিশ্চিত করতে অ্যাপটির পারফরম্যান্স অপ্টিমাইজ করুন।

সমস্যা সমাধান

  • ক্যামেরা সংযোগ সমস্যা। AAOS IVI-তে EVS বা Camera2 অবশ্যই সমর্থিত এবং উপলব্ধ থাকতে হবে।

  • স্টোরেজ ত্রুটি। উপলব্ধ স্টোরেজ স্পেস যাচাই করুন এবং রেকর্ডিংগুলি পরিচালনা করুন। এক্সটার্নাল স্টোরেজ ব্যবহার করার জন্য বিশেষভাবে সুপারিশ করা হচ্ছে, কারণ ইন্টারনাল স্টোরেজ ব্যবহার করলে তা সময়ের আগেই নষ্ট হয়ে যেতে পারে।