প্রতিটি অবজেক্ট অনুরোধের সাথে মিডিয়া প্লেয়ার ক্লায়েন্টরা কন্টেন্ট ডেলিভারি নেটওয়ার্ক (CDN)-এ গুরুত্বপূর্ণ তথ্য ট্রান্সমিট করতে পারে। সেই ডেটা ট্রান্সমিট করলে QoS মনিটরিং, অ্যাডাপ্টিভ ট্রাফিক অপ্টিমাইজেশন ও ডেলিভারি পারফর্ম্যান্স উন্নত করা যায়। এর ফলে গ্রাহকের অভিজ্ঞতাও উন্নত হয়।
ExoPlayer-এ প্রয়োগ করা পদ্ধতিটি CTA-5004-এ সংজ্ঞায়িত স্পেসিফিকেশনের উপর ভিত্তি করে তৈরি করা হয়েছে।
Exoplayer-এ CMCD সাপোর্ট
ExoPlayer-এ CMCD সহায়তা শুধুমাত্র অ্যাডাপ্টিভ স্ট্রিমিং ফর্ম্যাটের জন্য চালু করা যেতে পারে, যেমন DASH, HLS এবং SmoothStreaming.
CMCD ডেটা কী
CMCD ডেটা কীগুলিকে চারটি আলাদা আলাদা বিভাগে ভাগ করা হয়েছে:
- CMCD-Request: প্রতিটি অনুরোধের সাথে মান পরিবর্তিত হয় এমন কী।
- CMCD-Object: অনুরোধ করা অবজেক্টের সাথে সাথে ভ্যালু পরিবর্তিত হয় এমন কী।
- CMCD-স্ট্যাটাস: এমন কী যার ভ্যালু প্রতিটি অনুরোধ বা অবজেক্টের সাথে পরিবর্তিত হয় না।
- CMCD-Session: সেশনের লাইফটাইম জুড়ে যেসব কীয়ের ভ্যালু অপরিবর্তিত থাকার কথা।
ডেটা ট্রান্সমিট করার মোড
দুটি পদ্ধতির মধ্যে একটি ব্যবহার করে CMCD ডেটা ট্রান্সমিট করা যেতে পারে:
- কাস্টম HTTP অনুরোধ হেডার হিসেবে, যা হল ডিফল্ট আচরণ।
- HTTP কোয়েরি আর্গুমেন্ট হিসেবে।
CMCD চালু করা
CMCD চালু করতে, আপনাকে CmcdConfiguration.Factory
এর একটি ইনস্ট্যান্স তৈরি করতে হবে এবং এটি MediaSource.Factory-এ পাস করতে হবে, যা প্লেয়ার তৈরি করার সময়
ব্যবহার করা হয়। আপনি ডিফল্ট CmcdConfiguration.Factory ব্যবহার করতে পারেন অথবা
আপনার নিজস্ব কাস্টম ফ্যাক্টরি প্রদান করতে পারেন, প্রদত্ত মিডিয়া আইটেমের জন্য
অ্যাডাপ্টিভ মিডিয়া সোর্স তৈরি করার সময় এটি কল করা হয়।
ডিফল্ট কনফিগারেশন ফ্যাক্টরি সহ CMCD চালু করা
Kotlin
// Create media source factory and set default cmcdConfigurationFactory. val mediaSourceFactory = DefaultMediaSourceFactory(context) .setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT)
জাভা
// Create media source factory and set default cmcdConfigurationFactory. MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT);
কাস্টম কনফিগারেশন ফ্যাক্টরি সহ CMCD চালু করা
Kotlin
val cmcdConfigurationFactory = object : CmcdConfiguration.Factory { override fun createCmcdConfiguration(mediaItem: MediaItem): CmcdConfiguration { val cmcdRequestConfig = object : CmcdConfiguration.RequestConfig { override fun isKeyAllowed(key: String): Boolean { return key == "br" || key == "bl" } override fun getCustomData(): ImmutableListMultimap<@CmcdConfiguration.HeaderKey String, String> { return ImmutableListMultimap.of( CmcdConfiguration.KEY_CMCD_OBJECT, "key1=stringValue", ) } override fun getRequestedMaximumThroughputKbps(throughputKbps: Int): Int { return 5 * throughputKbps } } val sessionId = UUID.randomUUID().toString() val contentId = UUID.randomUUID().toString() return CmcdConfiguration(sessionId, contentId, cmcdRequestConfig, MODE_QUERY_PARAMETER) } } // Create media source factory and set your custom cmcdConfigurationFactory. val mediaSourceFactory = DefaultMediaSourceFactory(context).setCmcdConfigurationFactory(cmcdConfigurationFactory)
জাভা
CmcdConfiguration.Factory cmcdConfigurationFactory = mediaItem -> { CmcdConfiguration.RequestConfig cmcdRequestConfig = new CmcdConfiguration.RequestConfig() { @Override public boolean isKeyAllowed(String key) { return key.equals("br") || key.equals("bl"); } @Override public ImmutableListMultimap<@HeaderKey String, String> getCustomData() { return ImmutableListMultimap.of( CmcdConfiguration.KEY_CMCD_OBJECT, "key1=stringValue"); } @Override public int getRequestedMaximumThroughputKbps(int throughputKbps) { return 5 * throughputKbps; } }; String sessionId = UUID.randomUUID().toString(); String contentId = UUID.randomUUID().toString(); return new CmcdConfiguration( sessionId, contentId, cmcdRequestConfig, MODE_QUERY_PARAMETER); }; // Create media source factory and set your custom cmcdConfigurationFactory. MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setCmcdConfigurationFactory(cmcdConfigurationFactory);
CMCD ডেটার উদাহরণ
এইসব উদাহরণ থেকে মিডিয়া চ্যাঙ্ক ফেচ করার সময় পাঠানো ডেটার সঠিক ডেটা কম্বিনেশন সম্পর্কে ধারণা পাওয়া যায়:
কাস্টম HTTP অনুরোধ হেডার হিসেবে
CMCD-Session:sid="6e2fb550-c457-11e9-bb97-0800200c9a66"CMCD-Request:mtp=25400 CMCD-Object:br=3200,d=4004,ot=v,tb=6000 CMCD-Status:bs,rtp=15000 CMCD-Session:sid="6e2fb550-c457-11e9-bb97-0800200c9a66"HTTP কোয়েরি আর্গুমেন্ট হিসেবে
?CMCD=sid%3D%226e2fb550-c457-11e9-bb97-0800200c9a66%22?CMCD=br%3D3200%2Cbs%2Cd%3D4004%2Cmtp%3D25400%2Cot%3Dv%2Crtp %3D15000%2Csid%3D%226e2fb550-c457-11e9-bb97- 0800200c9a66%22%2Ctb%3D6000