এই দস্তাবেজটি মিডিয়া প্লেয়ারের সাথে কাজ করার আগে আপনার পরিচিত হওয়া উচিত এমন মৌলিক ধারণাগুলির সাথে পরিচয় করিয়ে দেয়৷
সাউন্ড এবং ভিডিও ক্লাস
নিম্নলিখিত ক্লাসগুলি অ্যান্ড্রয়েড ফ্রেমওয়ার্কে শব্দ এবং ভিডিও চালায়:
-
MediaPlayer
: এই ক্লাসটি সাউন্ড এবং ভিডিও চালানোর জন্য প্রাথমিক API। -
AudioManager
: এই ক্লাসটি একটি ডিভাইসে অডিও উত্স এবং অডিও আউটপুট পরিচালনা করে।
ম্যানিফেস্ট ঘোষণা
আপনি MediaPlayer ব্যবহার করে আপনার অ্যাপ্লিকেশনের বিকাশ শুরু করার আগে, নিশ্চিত করুন যে আপনার ম্যানিফেস্টে সংশ্লিষ্ট বৈশিষ্ট্যগুলির ব্যবহারের অনুমতি দেওয়ার জন্য উপযুক্ত ঘোষণা রয়েছে৷
ইন্টারনেট অনুমতি: আপনি যদি নেটওয়ার্ক-ভিত্তিক বিষয়বস্তু স্ট্রিম করতে 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
বিভিন্ন মিডিয়া উত্স সমর্থন করে, যার মধ্যে রয়েছে:
- স্থানীয় সম্পদ
- অভ্যন্তরীণ URI, যেমন আপনি একটি বিষয়বস্তু সমাধানকারী থেকে পেতে পারেন
- বাহ্যিক URL (স্ট্রিমিং)
অ্যান্ড্রয়েড সমর্থন করে এমন মিডিয়া ফর্ম্যাটের একটি তালিকার জন্য, সমর্থিত মিডিয়া ফর্ম্যাট পৃষ্ঠাটি দেখুন৷
অডিও উত্সগুলির সাথে কাজ করার উদাহরণ
স্থানীয় কাঁচা সংস্থান হিসাবে উপলব্ধ অডিও কীভাবে চালানো যায় তার একটি উদাহরণ এখানে রয়েছে (আপনার অ্যাপ্লিকেশনের 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 (অ্যাপ্লিকেশন নট রেসপন্সিং) ত্রুটির কারণ হতে পারে।
আপনার UI থ্রেড ঝুলানো এড়াতে, MediaPlayer
প্রস্তুত করতে অন্য থ্রেড তৈরি করুন এবং হয়ে গেলে প্রধান থ্রেডকে অবহিত করুন। ফ্রেমওয়ার্ক এই কাজটি করার জন্য prepareAsync()
পদ্ধতি সম্পন্ন করার জন্য একটি সুবিধাজনক উপায় সরবরাহ করে। এই পদ্ধতিটি পটভূমিতে মিডিয়া প্রস্তুত করা শুরু করে এবং অবিলম্বে ফিরে আসে। যখন মিডিয়া প্রস্তুতি নিচ্ছে, তখন MediaPlayer.OnPreparedListener
onPrepared()
setOnPreparedListener()
বলা হয়।
আরও জানুন
Jetpack Media3 হল আপনার অ্যাপে মিডিয়া প্লেব্যাকের জন্য প্রস্তাবিত সমাধান। এটি সম্পর্কে আরও পড়ুন .
এই পৃষ্ঠাগুলি অডিও এবং ভিডিও রেকর্ডিং, সঞ্চয় করা এবং প্লে ব্যাক করা সম্পর্কিত বিষয়গুলি কভার করে:
,এই দস্তাবেজটি মিডিয়া প্লেয়ারের সাথে কাজ করার আগে আপনার পরিচিত হওয়া উচিত এমন মৌলিক ধারণাগুলির সাথে পরিচয় করিয়ে দেয়৷
সাউন্ড এবং ভিডিও ক্লাস
নিম্নলিখিত ক্লাসগুলি অ্যান্ড্রয়েড ফ্রেমওয়ার্কে শব্দ এবং ভিডিও চালায়:
-
MediaPlayer
: এই ক্লাসটি সাউন্ড এবং ভিডিও চালানোর জন্য প্রাথমিক API। -
AudioManager
: এই ক্লাসটি একটি ডিভাইসে অডিও উত্স এবং অডিও আউটপুট পরিচালনা করে।
ম্যানিফেস্ট ঘোষণা
আপনি MediaPlayer ব্যবহার করে আপনার অ্যাপ্লিকেশনের বিকাশ শুরু করার আগে, নিশ্চিত করুন যে আপনার ম্যানিফেস্টে সংশ্লিষ্ট বৈশিষ্ট্যগুলির ব্যবহারের অনুমতি দেওয়ার জন্য উপযুক্ত ঘোষণা রয়েছে৷
ইন্টারনেট অনুমতি: আপনি যদি নেটওয়ার্ক-ভিত্তিক বিষয়বস্তু স্ট্রিম করতে 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
বিভিন্ন মিডিয়া উত্স সমর্থন করে, যার মধ্যে রয়েছে:
- স্থানীয় সম্পদ
- অভ্যন্তরীণ URI, যেমন আপনি একটি বিষয়বস্তু সমাধানকারী থেকে পেতে পারেন
- বাহ্যিক URL (স্ট্রিমিং)
অ্যান্ড্রয়েড সমর্থন করে এমন মিডিয়া ফর্ম্যাটের একটি তালিকার জন্য, সমর্থিত মিডিয়া ফর্ম্যাট পৃষ্ঠাটি দেখুন৷
অডিও উত্সগুলির সাথে কাজ করার উদাহরণ
স্থানীয় কাঁচা সংস্থান হিসাবে উপলব্ধ অডিও কীভাবে চালানো যায় তার একটি উদাহরণ এখানে রয়েছে (আপনার অ্যাপ্লিকেশনের 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 (অ্যাপ্লিকেশন নট রেসপন্সিং) ত্রুটির কারণ হতে পারে।
আপনার UI থ্রেড ঝুলানো এড়াতে, MediaPlayer
প্রস্তুত করতে অন্য থ্রেড তৈরি করুন এবং হয়ে গেলে প্রধান থ্রেডকে অবহিত করুন। ফ্রেমওয়ার্ক এই কাজটি করার জন্য prepareAsync()
পদ্ধতি সম্পন্ন করার জন্য একটি সুবিধাজনক উপায় সরবরাহ করে। এই পদ্ধতিটি পটভূমিতে মিডিয়া প্রস্তুত করা শুরু করে এবং অবিলম্বে ফিরে আসে। যখন মিডিয়া প্রস্তুতি নিচ্ছে, তখন MediaPlayer.OnPreparedListener
onPrepared()
setOnPreparedListener()
বলা হয়।
আরও জানুন
Jetpack Media3 হল আপনার অ্যাপে মিডিয়া প্লেব্যাকের জন্য প্রস্তাবিত সমাধান। এটি সম্পর্কে আরও পড়ুন .
এই পৃষ্ঠাগুলি অডিও এবং ভিডিও রেকর্ডিং, সঞ্চয় করা এবং প্লে ব্যাক করা সম্পর্কিত বিষয়গুলি কভার করে:
,এই দস্তাবেজটি মিডিয়া প্লেয়ারের সাথে কাজ করার আগে আপনার পরিচিত হওয়া উচিত এমন মৌলিক ধারণাগুলির সাথে পরিচয় করিয়ে দেয়৷
সাউন্ড এবং ভিডিও ক্লাস
নিম্নলিখিত ক্লাসগুলি অ্যান্ড্রয়েড ফ্রেমওয়ার্কে শব্দ এবং ভিডিও চালায়:
-
MediaPlayer
: এই ক্লাসটি সাউন্ড এবং ভিডিও চালানোর জন্য প্রাথমিক API। -
AudioManager
: এই ক্লাসটি একটি ডিভাইসে অডিও উত্স এবং অডিও আউটপুট পরিচালনা করে।
ম্যানিফেস্ট ঘোষণা
আপনি MediaPlayer ব্যবহার করে আপনার অ্যাপ্লিকেশনের বিকাশ শুরু করার আগে, নিশ্চিত করুন যে আপনার ম্যানিফেস্টে সংশ্লিষ্ট বৈশিষ্ট্যগুলির ব্যবহারের অনুমতি দেওয়ার জন্য উপযুক্ত ঘোষণা রয়েছে৷
ইন্টারনেট অনুমতি: আপনি যদি নেটওয়ার্ক-ভিত্তিক বিষয়বস্তু স্ট্রিম করতে 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
বিভিন্ন মিডিয়া উত্স সমর্থন করে, যার মধ্যে রয়েছে:
- স্থানীয় সম্পদ
- অভ্যন্তরীণ URI, যেমন আপনি একটি বিষয়বস্তু সমাধানকারী থেকে পেতে পারেন
- বাহ্যিক URL (স্ট্রিমিং)
অ্যান্ড্রয়েড সমর্থন করে এমন মিডিয়া ফর্ম্যাটের একটি তালিকার জন্য, সমর্থিত মিডিয়া ফর্ম্যাট পৃষ্ঠাটি দেখুন৷
অডিও উত্সগুলির সাথে কাজ করার উদাহরণ
স্থানীয় কাঁচা সংস্থান হিসাবে উপলব্ধ অডিও কীভাবে চালানো যায় তার একটি উদাহরণ এখানে রয়েছে (আপনার অ্যাপ্লিকেশনের 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 (অ্যাপ্লিকেশন নট রেসপন্সিং) ত্রুটির কারণ হতে পারে।
আপনার UI থ্রেড ঝুলানো এড়াতে, MediaPlayer
প্রস্তুত করতে অন্য থ্রেড তৈরি করুন এবং হয়ে গেলে প্রধান থ্রেডকে অবহিত করুন। ফ্রেমওয়ার্ক এই কাজটি করার জন্য prepareAsync()
পদ্ধতি সম্পন্ন করার জন্য একটি সুবিধাজনক উপায় সরবরাহ করে। এই পদ্ধতিটি পটভূমিতে মিডিয়া প্রস্তুত করা শুরু করে এবং অবিলম্বে ফিরে আসে। যখন মিডিয়া প্রস্তুতি নিচ্ছে, তখন MediaPlayer.OnPreparedListener
onPrepared()
setOnPreparedListener()
বলা হয়।
আরও জানুন
Jetpack Media3 হল আপনার অ্যাপে মিডিয়া প্লেব্যাকের জন্য প্রস্তাবিত সমাধান। এটি সম্পর্কে আরও পড়ুন .
এই পৃষ্ঠাগুলি অডিও এবং ভিডিও রেকর্ডিং, সঞ্চয় করা এবং প্লে ব্যাক করা সম্পর্কিত বিষয়গুলি কভার করে:
,এই দস্তাবেজটি মিডিয়া প্লেয়ারের সাথে কাজ করার আগে আপনার পরিচিত হওয়া উচিত এমন মৌলিক ধারণাগুলির সাথে পরিচয় করিয়ে দেয়৷
সাউন্ড এবং ভিডিও ক্লাস
নিম্নলিখিত ক্লাসগুলি অ্যান্ড্রয়েড ফ্রেমওয়ার্কে শব্দ এবং ভিডিও চালায়:
-
MediaPlayer
: এই ক্লাসটি সাউন্ড এবং ভিডিও চালানোর জন্য প্রাথমিক API। -
AudioManager
: এই ক্লাসটি একটি ডিভাইসে অডিও উত্স এবং অডিও আউটপুট পরিচালনা করে।
ম্যানিফেস্ট ঘোষণা
আপনি MediaPlayer ব্যবহার করে আপনার অ্যাপ্লিকেশনের বিকাশ শুরু করার আগে, নিশ্চিত করুন যে আপনার ম্যানিফেস্টে সংশ্লিষ্ট বৈশিষ্ট্যগুলির ব্যবহারের অনুমতি দেওয়ার জন্য উপযুক্ত ঘোষণা রয়েছে৷
ইন্টারনেট অনুমতি: আপনি যদি নেটওয়ার্ক-ভিত্তিক বিষয়বস্তু স্ট্রিম করতে 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
বিভিন্ন মিডিয়া উত্স সমর্থন করে, যার মধ্যে রয়েছে:
- স্থানীয় সম্পদ
- অভ্যন্তরীণ URI, যেমন আপনি একটি বিষয়বস্তু সমাধানকারী থেকে পেতে পারেন
- বাহ্যিক URL (স্ট্রিমিং)
অ্যান্ড্রয়েড সমর্থন করে এমন মিডিয়া ফর্ম্যাটের একটি তালিকার জন্য, সমর্থিত মিডিয়া ফর্ম্যাট পৃষ্ঠাটি দেখুন৷
অডিও উত্সগুলির সাথে কাজ করার উদাহরণ
স্থানীয় কাঁচা সংস্থান হিসাবে উপলব্ধ অডিও কীভাবে চালানো যায় তার একটি উদাহরণ এখানে রয়েছে (আপনার অ্যাপ্লিকেশনের 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 (অ্যাপ্লিকেশন নট রেসপন্সিং) ত্রুটির কারণ হতে পারে।
আপনার UI থ্রেড ঝুলানো এড়াতে, MediaPlayer
প্রস্তুত করতে অন্য থ্রেড তৈরি করুন এবং হয়ে গেলে প্রধান থ্রেডকে অবহিত করুন। ফ্রেমওয়ার্ক এই কাজটি করার জন্য prepareAsync()
পদ্ধতি সম্পন্ন করার জন্য একটি সুবিধাজনক উপায় সরবরাহ করে। এই পদ্ধতিটি পটভূমিতে মিডিয়া প্রস্তুত করা শুরু করে এবং অবিলম্বে ফিরে আসে। যখন মিডিয়া প্রস্তুতি নিচ্ছে, তখন MediaPlayer.OnPreparedListener
onPrepared()
setOnPreparedListener()
বলা হয়।
আরও জানুন
Jetpack Media3 হল আপনার অ্যাপে মিডিয়া প্লেব্যাকের জন্য প্রস্তাবিত সমাধান। এটি সম্পর্কে আরও পড়ুন .
এই পৃষ্ঠাগুলি অডিও এবং ভিডিও রেকর্ডিং, সঞ্চয় করা এবং প্লে ব্যাক করা সম্পর্কিত বিষয়গুলি কভার করে: