অ্যান্ড্রয়েড অ্যাপ্লিকেশনে ভিডিও স্ট্রিম করার উপায়
Bengali (বাংলা) translation by Syeda Nur-E-Royhan (you can also view the original English article)
অ্যান্ড্রয়েড প্ল্যাটফর্মে কিছু লাইব্রেরী আছে যেখানে আপনি রিমোট ভিডিওর মতো মিডিয়া ফাইল চালাতে বা স্ট্রিম করতে পারবেন।আপনার অ্যাপ্লিকেশনে এগুলো প্লেব্যাক করার জন্য উপস্থাপন করা যাবে। এই টিউটোরিয়ালে আপনি একটি ভিডিও ফাইল চালানো শিখবেন। ব্যবহারকারী যাতে প্লেব্যাক কন্ট্রোল করতে পারে সেজন্য VideoView
কম্পোনেন্টের সাথে MediaController
ব্যবহার করে এটিকে ডিসপ্লে করতে পারবেন।
একই সাথে আমরা MediaPlayer
শ্রেণি ব্যবহার করে ভিডিও উপস্থাপন করার পদ্ধতিও সংক্ষেপে জানিয়ে দিবো। আপনি যদি অ্যান্ড্রয়েডের জন্য মিউজিক প্লেয়ার তৈরির সিরিজটি সম্পন্ন করে থাকেন তাহলে সেই শিক্ষা এই টিউটোরিয়ালে কাজে লাগিয়ে আরও ত্বরান্বিত করতে পারেন। আপনার যদি ইতোমধ্যে অন্তত কিছু অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরির অভিজ্ঞতা থেকে থাকে তাহলে আপনি এই টিউটোরিয়ালটি সম্পন্ন করতে পারবেন।
১। নতুন একটি অ্যাপ্লিকেশন তৈরি করুন
প্রথম ধাপ
আপনি এই মুহূর্তে কাজ করছেন এমন একটি অ্যাপ্লিকেশনের দক্ষতা বৃদ্ধি করতে এই টিউটোরিয়ালের কোড ব্যবহার করতে পারেন অথবা এখন এক্লিপস বা অ্যান্ড্রয়েড স্টুডিওতে একটি নতুন অ্যাপ্লিকেশন তৈরি করতে পারেন। একটি নতুন অ্যান্ড্রয়েড প্রজেক্ট তৈরি করুন, আপনার পছনের কোন একটা নাম দিন, এর বিস্তারিত বিবরণ তৈরি করুন, এবং এটিকে একটি প্রাথমিক Activity
শ্রেণি এবং লেআউট দিন।
দ্বিতীয় ধাপ
প্রথমে চলুন মিডিয়া চালানর জন্য প্রজেক্টের বিস্তারিত বিবরণ তৈরি করে ফেলি। আপনার প্রজেক্টের বিবরণী ফাইল ওপেন করুন এবং আপনার IDE-তে XML সম্পাদনা অংশে চলে যান। মিডিয়া চালাতে হলে আপনার ইন্টারনেট সুবিধা থাকতে হবে। কাজেই manifest
এলিমেন্টে নিচের পদ্ধতিতে অনুমতি যুক্ত করে দিন।
<uses-permission android:name="android.permission.INTERNET" />
২। VideoView
যোগ করুন
প্রথম ধাপ
অ্যান্ড্রয়েড প্ল্যাটফর্মে VideoView
শ্রেণি রয়েছে যেখানে আপনি ভিডিও ফাইল চালাতে পারবেন। চলুন মূল লেআউট ফাইলে একটি যোগ করে ফেলি:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:background="#000000" tools:context=".MainActivity" > <VideoView android:id="@+id/myVideo" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" /> </RelativeLayout>
প্রয়োজনবোধে আপনার নিজের অ্যাপ্লিকেশনের সাথে মিলিয়ে নিতে প্যারেন্ট লেআউটটি পরিবর্তন করে ফেলতে পারেন। আমরা VideoView
-কে এক ধরণের id
চিহ্ন দেই যাতে করে পরবর্তীতে এটিকে রেফার করা যায়। আপনার নিজের ডিজাইনের জন্য আপনাকে অন্যান্য লেআউট প্রপার্টি সমন্বয় করে নিতে হতে পারে।
দ্বিতীয় ধাপ
এখন চলুন VideoView
-এর নমুনার একটি রেফারেন্স কোড আকারে উদ্ধার করে ফেলি। আপনার অ্যাপ্লিকেশনের মূল Activity
শ্রেণি ওপেন করুন এবং নিচের অ্যাডিশনাল ইম্পোর্টগুলো যোগ করুন।
import android.net.Uri; import android.widget.MediaController; import android.widget.VideoView;
আপনার Activity
শ্রেণিতে onCreate
প্রক্রিয়াটি ইতোমধ্যেই থাকার কথা যেখানে কন্টেন্ট ভিউ সেট করা আছে।
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
setContentView
লাইনের পর, নিচের মতো করে VideoView
-এর নমুনায় একটি রেফারেন্স যুক্ত করে দিন। এক্ষেত্রে XML লেআউটে আমরা যে id
সেট করেছি তা ব্যবহার করতে হবে।
VideoView vidView = (VideoView)findViewById(R.id.myVideo);
৩। ভিডিও ফাইল চালিয়ে দেখুন
প্রথম ধাপ
এখন আমরা অ্যাপ্লিকেশনে ভিডিও ফাইল চালাতে পারব। শেষ অংশটুকুর জন্য নিচের মতো করে URI প্রস্তুত করে ফেলুন:
String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4"; Uri vidUri = Uri.parse(vidAddress);
এইজন্য আপনাকে অবশ্যই যে ভিডিও ফাইলটি চালাতে চান সেটির রিমোট অ্যাড্রেস দরকার হবে। এখানে যে উদাহরণটি দেওয়া হয়েছে তা ইন্টারনেট আর্কাইভে হোস্ট করা একটি পাবলিক ডোমেইনের ভিডিও ফাইল। আমরা এই অ্যাড্রেস স্ট্রিংটিকে ছোট ছোট করে URI হিসেবে বিশ্লেষণ করবো যাতে করে এটিকে VideoView
অবজেক্টে স্থানান্তরিত করা যায়।
vidView.setVideoURI(vidUri);
এখন আপনি সহজেই প্লেব্যাক চালু করতে পারেন।
vidView.start();
অ্যান্ড্রয়েড অপারেটিং সিস্টেম বিভিন্ন ফরম্যাটের ভিডিও এবং মিডিয়া চালাতে সক্ষম। কখনও কখনও প্রতিটি যন্ত্র আলাদাভাবে বাড়তি আরও কিছু ফরম্যাট চালাতে পারে।
ডেভেলপার গাইডে আপনারা দেখেছেন, যেসব ভিডিও ফাইল ফরম্যাট চালানো সম্ভব তার মধ্যে রয়েছে থ্রিজিপি, এমপিফোর, ডাব্লিউইবিএম, এবং এমকেভি। এটা নির্ভর করে কোন ফরম্যাট ব্যবহার করা হচ্ছে আর কোন স্তরের প্ল্যাটফর্মে ব্যবহারকারী ফাইলটি ইন্সটল করেছেন।
অডিও ফাইল ফরম্যাটে আপনি বিল্ট-ইন সহায়তা আশা করতেই পারেন যাতে করে এমপিথ্রি, এমআইডি, ওজিজি, এবং ডাব্লিউএভি যুক্ত করা যায়। আপনি আরটিএসপি, এইচটিটিপি, এবং এইচটিটিপিএসের উপরের স্তরের অ্যান্ড্রয়েডে (অ্যান্ড্রয়েড ৩.১ থেকে শুরু করে) মিডিয়া চালাতে পারবেন।
৪। প্লেব্যাক কন্ট্রোল যুক্ত করুন
প্রথম ধাপ
আমরা ভিডিও প্লেব্যাক সম্পূর্ণ করেছি। কিন্তু ব্যবহারকারী চাইবেন এবং অভ্যস্ত থাকবেন যে এর উপর তার সম্পূর্ণ নিয়ন্ত্রণ থাকবে। আবার, অ্যান্ড্রয়েড প্ল্যাটফর্মে এই সমস্যা সমাধানের জন্য MediaController
শ্রেণি থেকে কাছাকাছি কোন পারস্পরিক ক্রিয়া ব্যবহার করার সুযোগ রয়েছে।
আপনার Activity
শ্রেণীর onCreate
প্রক্রিয়ায়, VideoView
-তে start
লাইনের আগে এই শ্রেণীর একটি নমুনা তৈরি করে ফেলুন:
MediaController vidControl = new MediaController(this);
এরপর, VideoView
-এর নমুনাটিকে নোঙরের মতো ব্যবহার করুন।
vidControl.setAnchorView(vidView);
সবশেষে, VideoView
অবজেক্টের জন্য এটিকে মিডিয়া কন্ট্রোলার হিসেবে সেট করুন।
vidView.setMediaController(vidControl);
এখন যদি আপনি অ্যাপ্লিকেশনটি চালু করেন, তাহলে ব্যবহারকারী চালু হওয়া ভিডিওটির প্লেব্যাক নিয়ন্ত্রণ করতেপারবে। একই সাথে ফাস্ট ফরোয়ার্ড এবং রিওয়াইন্ড বাটন, প্লে/পজ বাটন, এবং সিক বারও নিয়ন্ত্রণ করতে পারবে।
সিক বার কন্ট্রোলের ডানে থাকবে মিডিয়া ফাইলটির দৈর্ঘ্য এবং বামে থাকবে প্লেব্যাকের বর্তমান অবস্থান। একই সাথে সিক বারে স্পর্শ করে ফাইলের যে কোন অবস্থানে চলে যাওয়া যাবে। ভিডিও চলাকালীন অবস্থানের নির্দেশনা ইউটিউবের মতো যে কোন সাইট বা অ্যাপ্লিকেশনের ডিসপ্লের মতোই হবে যাতে ব্যবহারকারী এতে আগে থেকেই অভ্যস্ত থাকেন।



আপনি খেয়াল করে থাকবেন যে সাধারণত ফাইল নিয়ন্ত্রণের এই নির্দেশিকাগুলো অ্যাপ্লিকেশন চালানোর সময় কিছুক্ষণ পর অদৃশ্য হয়ে যায়। আপনি এই MediaController
-এর কার্যক্রম বিভিন্নভাবে নির্দিষ্ট করতে পারবেন। এটা কিভাবে করতে হবে তা জানতে হলে অ্যান্ড্রয়েডের জন্য মিউজিক প্লেয়ার অ্যাপ্লিকেশন তৈরির সিরিজটি দেখতে পারেন। আপনি আপনার অ্যাপ্লিকেশনের কার্যক্রম নির্দিষ্ট করতে বিভিন্ন ধরণের শ্রোতা ব্যবহার করে মিডিয়া প্লেব্যাকের দক্ষতা বৃদ্ধি করতে পারেন।
৫। MediaPlayer
ব্যবহার করা
প্রথম ধাপ
শেষ করার আগে, চলুন একটি ভিন্ন পদ্ধতিতে MediaPlayer
ব্যবহার করে ভিডিও চালানোর চেষ্টা করি। কারণ এর আগে আমরা মিউজিক প্লেয়ার তৈরির সিরিজেও এটি ব্যবহার করেছিলাম। আপনি চাইলে একটি সারফেস ভিউ ব্যবহার করে MediaPlayer
-এ ভিডিওসহ অন্যান্য মিডিয়া চালাতে পারবেন। যেমন, আপনি নিচের লেআউটটি ব্যবহার করতে পারেন:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <SurfaceView android:id="@+id/surfView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout>
আমরা Activity
শ্রেণীর কার্যক্রমে SurfaceView
-এর প্রতি নির্দেশ করবো।
দ্বিতীয় ধাপ
আপনার Activity
শ্রেণিতে নিচের ইন্টারফেসগুলো যোগ করুন:
public class MainActivity extends Activity implements SurfaceHolder.Callback, OnPreparedListener
আপনার IDE আপনাকে এই অবাস্তবায়িত প্রক্রিয়াগুলো যোগ করতে তাগাদা দিবে।
@Override public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder arg0) { //setup } @Override public void surfaceDestroyed(SurfaceHolder arg0) { // TODO Auto-generated method stub } @Override public void onPrepared(MediaPlayer mp) { //start playback }
আমরা SurfaceCreated
এবং onPrepared
প্রক্রিয়াতে এটি যোগ করবো।
তৃতীয় ধাপ
প্লেব্যাক কার্যকর করতে হলে নিচের নমুনাগুলোর ভ্যারিয়েবল শ্রেণিতে যোগ করুন।
private MediaPlayer mediaPlayer; private SurfaceHolder vidHolder; private SurfaceView vidSurface; String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4";
Activity
-র onCreate
প্রক্রিয়ায়, আপনি লেআউটে যুক্ত SurfaceView
অবজেক্ট ব্যবহার করে এই ভ্যারিয়েবলগুলো বাস্তবায়ন করতে পারেন।
vidSurface = (SurfaceView) findViewById(R.id.surfView); vidHolder = vidSurface.getHolder(); vidHolder.addCallback(this);
চতুর্থ ধাপ
SurfaceCreated
প্রক্রিয়ায়, আপনার মিডিয়া প্লেব্যাকের উৎস সেট করুন:
try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDisplay(vidHolder); mediaPlayer.setDataSource(vidAddress); mediaPlayer.prepare(); mediaPlayer.setOnPreparedListener(this); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); } catch(Exception e){ e.printStackTrace(); }
সবশেষে, onPrepared
প্রক্রিয়ায় প্লেব্যাক শুরু করুন:
mediaPlayer.start();
আপনি এখন অ্যাপ্লিকেশনটি চালু করলে MediaPlayer
-এর নমুনাটি চালু হয়ে যাবে।
উপসংহার
এই টিউটোরিয়ালে আমরা VideoView
এবং MediaPlayer
শ্রেণি ব্যবহার করে অ্যান্ড্রয়েডে ভিডিও চালানোর মৌলিক পদ্ধতিগুলো চিহ্নিত করেছি। আপনি চাইলে আমরা এখানে যে কোড কাজে লাগিয়েছি তা আরও বেশি উন্নত করতে পারেন। যেমন আমরা যে মিউজিক প্লেয়ার অ্যাপ্লিকেশন তৈরি করেছি সেখানে ভিডিও বা মিডিয়া সাপোর্ট চালু করা যায়। আপনি চাইলে ইউটিউব অ্যান্ড্রয়েড প্লেয়ার এপিআই-এর মতো অ্যান্ড্রয়েডের জন্য অন্যান্য সংশ্লিষ্ট উৎসগুলোও দেখতে পারেন।