মিডিয়া প্লেয়ার দিয়ে শুরু করুন

মিডিয়া প্লেয়ার নিয়ে কাজ করার আগে আপনার যে মৌলিক ধারণাগুলো জেনে রাখা উচিত, এই ডকুমেন্টটিতে সেগুলির পরিচয় দেওয়া হয়েছে।

শব্দ এবং ভিডিও ক্লাস

নিম্নলিখিত ক্লাসগুলো অ্যান্ড্রয়েড ফ্রেমওয়ার্কে শব্দ এবং ভিডিও প্লে করে:

  • MediaPlayer : এই ক্লাসটি শব্দ এবং ভিডিও চালানোর প্রধান এপিআই।
  • AudioManager : এই ক্লাসটি একটি ডিভাইসে অডিও উৎস এবং অডিও আউটপুট পরিচালনা করে।

প্রকাশ্য ঘোষণা

MediaPlayer ব্যবহার করে আপনার অ্যাপ্লিকেশনের ডেভেলপমেন্ট শুরু করার আগে, নিশ্চিত করুন যে আপনার ম্যানিফেস্টে সংশ্লিষ্ট ফিচারগুলো ব্যবহারের অনুমতি দেওয়ার জন্য যথাযথ ডিক্লারেশন রয়েছে।

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

    <uses-permission android:name="android.permission.INTERNET" />
    
  • ওয়েক লক পারমিশন: যদি আপনার প্লেয়ার অ্যাপ্লিকেশনটির স্ক্রিন ম্লান হওয়া বা প্রসেসরকে স্লিপিং মোডে যাওয়া থেকে বিরত রাখার প্রয়োজন হয়, অথবা এটি MediaPlayer.setScreenOnWhilePlaying(boolean) বা MediaPlayer.setWakeMode(android.content.Context, int) মেথডগুলো ব্যবহার করে, তাহলে আপনাকে অবশ্যই এই পারমিশনটির জন্য অনুরোধ করতে হবে।

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    

MediaPlayer ক্লাস ব্যবহার করুন

MediaPlayer ক্লাসটি মিডিয়া ফ্রেমওয়ার্কের একটি অপরিহার্য উপাদান। এই ক্লাসের একটি অবজেক্ট ন্যূনতম সেটআপের মাধ্যমে অডিও এবং ভিডিও উভয়ই ফেচ, ডিকোড এবং প্লে করতে পারে। MediaPlayer বিভিন্ন মিডিয়া সোর্স সমর্থন করে, যার মধ্যে রয়েছে:

  • স্থানীয় সম্পদ
  • অভ্যন্তরীণ URI, যেমনটি আপনি একটি কন্টেন্ট রিসলভার থেকে পেতে পারেন।
  • বাহ্যিক ইউআরএল (স্ট্রিমিং)

অ্যান্ড্রয়েড যেসব মিডিয়া ফরম্যাট সমর্থন করে তার তালিকার জন্য, সমর্থিত মিডিয়া ফরম্যাট পৃষ্ঠাটি দেখুন।

অডিও উৎস নিয়ে কাজ করার উদাহরণ

আপনার অ্যাপ্লিকেশনের res/raw/ ডিরেক্টরিতে সংরক্ষিত লোকাল র রিসোর্স হিসেবে উপলব্ধ অডিও কীভাবে প্লে করতে হয় তার একটি উদাহরণ এখানে দেওয়া হলো:

কোটলিন

var mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1)
mediaPlayer.start() // no need to call prepare(); create() does that for you

জাভা

MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you

এক্ষেত্রে, একটি 'র' রিসোর্স হলো এমন একটি ফাইল যা সিস্টেম কোনো নির্দিষ্ট উপায়ে পার্স করার চেষ্টা করে না। তবে, এই রিসোর্সের বিষয়বস্তু র অডিও হওয়া উচিত নয়। এটি সমর্থিত ফরম্যাটগুলোর মধ্যে কোনো একটিতে যথাযথভাবে এনকোড ও ফরম্যাট করা একটি মিডিয়া ফাইল হওয়া উচিত।

আর এখানে দেখানো হলো কীভাবে আপনি সিস্টেমে স্থানীয়ভাবে উপলব্ধ একটি URI থেকে প্লে করতে পারেন (যা আপনি, উদাহরণস্বরূপ, একটি কন্টেন্ট রিসলভারের মাধ্যমে পেয়েছেন):

কোটলিন

val myUri: Uri = .... // initialize Uri here
val mediaPlayer = MediaPlayer().apply {
    setAudioAttributes(
        AudioAttributes.Builder()
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .build()
    )
    setDataSource(applicationContext, myUri)
    prepare()
    start()
}

জাভা

Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
    new AudioAttributes.Builder()
        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
        .setUsage(AudioAttributes.USAGE_MEDIA)
        .build()
);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();

HTTP স্ট্রিমিং ব্যবহার করে দূরবর্তী URL থেকে প্লে করার প্রক্রিয়াটি দেখতে এইরকম:

কোটলিন

val url = "http://........" // your URL here
val mediaPlayer = MediaPlayer().apply {
    setAudioAttributes(
        AudioAttributes.Builder()
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .build()
    )
    setDataSource(url)
    prepare() // might take long! (for buffering, etc)
    start()
}

জাভা

String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
    new AudioAttributes.Builder()
        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
        .setUsage(AudioAttributes.USAGE_MEDIA)
        .build()
);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();

কর্মক্ষমতা উন্নত করতে অ্যাসিঙ্ক্রোনাস প্রস্তুতি ব্যবহার করুন।

MediaPlayer ব্যবহার করার সময় পারফরম্যান্সের কথা মাথায় রাখুন। উদাহরণস্বরূপ, prepare() কলটি কার্যকর হতে অনেক সময় নিতে পারে, কারণ এতে মিডিয়া ডেটা ফেচ এবং ডিকোড করার মতো কাজ জড়িত থাকতে পারে। তাই, কার্যকর হতে দীর্ঘ সময় নিতে পারে এমন যেকোনো মেথডের মতো, এটিকে আপনার অ্যাপ্লিকেশনের UI থ্রেড থেকে কখনোই কল করবেন না । এমনটা করলে মেথডটি রিটার্ন না করা পর্যন্ত UI সাড়া দেওয়া বন্ধ করে দেয়, যা ব্যবহারকারীর জন্য একটি খারাপ অভিজ্ঞতা এবং এর ফলে একটি ANR (Application Not Responding) এরর হতে পারে।

আপনার UI থ্রেড যাতে আটকে না যায়, সেজন্য MediaPlayer প্রস্তুত করতে আরেকটি থ্রেড তৈরি করুন এবং কাজ শেষ হলে মূল থ্রেডকে জানান। এই কাজটি করার জন্য ফ্রেমওয়ার্কটি prepareAsync() মেথডের মাধ্যমে একটি সুবিধাজনক উপায় সরবরাহ করে। এই মেথডটি ব্যাকগ্রাউন্ডে মিডিয়া প্রস্তুত করা শুরু করে এবং সাথে সাথেই রিটার্ন করে। মিডিয়া প্রস্তুত হয়ে গেলে, setOnPreparedListener() এর মাধ্যমে কনফিগার করা MediaPlayer.OnPreparedListener এর onPrepared() ) মেথডটি কল করা হয়।

আরও জানুন

আপনার অ্যাপে মিডিয়া প্লেব্যাকের জন্য Jetpack Media3 হলো প্রস্তাবিত সমাধান। এ সম্পর্কে আরও পড়ুন

এই পৃষ্ঠাগুলিতে অডিও এবং ভিডিও রেকর্ড করা, সংরক্ষণ করা এবং প্লেব্যাক করা সম্পর্কিত বিষয়গুলি আলোচনা করা হয়েছে: