آموزش برنامه نویسی اندروید با اندروید استودیو (بخش سی و ششم: کار با VideoView در اندروید)

استاندارد

بعضی اوقات پیش می آید که بخواهیم در قسمتی از برنامه ای که میسازیم، نمایش ویدیو داشته باشیم. برای این منظور قسمتی از لایه برنامه را به محل پخش ویدیو اختصاص می دهیم.

توجه داشته باشید که ما در این آموزش می خواهیم پخش ویدیو در اپلیکیشن اندرویدی به صورت آفلاین را آموزش دهیم. زیرا نحوه پخش ویدیو به صورت آنلاین تفاوتهایی با پخش ویدیو به صورت آفلاین دارد. و پخش آفلاین ویدیویی را نیز بعدا آموزش خواهیم داد.

من یک پروژه جدید ایجاد می کنم و اسم آن را VideoView-Gsm میذارم.

سپس به activity_main.xml رفته و از Paletteها و در قسمت Images & Media یک ابزار VideoView را بر روی لایه اپلیکیشن خودم می کشم.

در قسمت Properties از ابزار VideoView که به لایه اپلیکیشن کشیدیم، مقدار layout_width را fill_parent می گذاریم تا عرض صفحه را بپوشاند. مقدار layout_height را نیز، wrap_content میگذاریم تا VideoView ارتفاع خودش را با فایل ویدیویی ما هماهنگ کند.

کد VideoView

<VideoView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/videoView"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="60dp" />

به سراغ کدنویسی جاوای برنامه می رویم. فایل MainActivity.xml را باز کرده و طبق مراحل زیر پیش می رویم.

در این قسمت، فایل ویدیویی که می خواهیم پخش شود را در یکی پوشه های پروژه برنامه می ریزیم. برای این کار باید فایل ویدیویی را در پوشه Raw کپی کنیم. در قسمت پخش صوت، از آموزش های اندروید چگونگی آن توضیح داده شد ولی برای راحتی شما، در اینجا نیز همان توضیحات را می دهیم. (مراحل زیر) :

قبلا گفته شد که پوشه Res پوشه منابع ما است و عکس ها و فایل های ما برای استفاده در برنامه در این پوشه قرار می گیرد. پس باید یک پوشه جدید به نام Raw در پوشه Res ایجاد کنیم.

برای این کار طبق عکس، بر روی پوشه Res کلیک راست کرده و سپس از قسمت New، بر روی Android Resource Directory کلیک می کنیم.

android-studio-beginners-gsm-developers_86

با باز شدن پنجره ی جدید طبق عکس، Raw را انتخاب کرده و سپس بر روی Ok کلیک می کنیم.

android-studio-beginners-gsm-developers_87

می بینید که پوشه raw در دایرکتوری Res ایجاد شده است.

android-studio-beginners-gsm-developers_88

برای کپی کردن فایل ویدیویی ، طبق عکس میتوانید بر روی پوشه Raw کلیک راست کنید و سپس Show in explorer را بزنید تا پوشه Raw را در explorer برای شما باز کند. سپس فایل ویدیویی خود را در این پوشه کپی کنید.

ویدیویی که من کپی کردم، نامش Myvideo.mp4 است که مشاهده می کنید در پوشه Raw اضافه شده است.

اولین باری که من به همین صورت ادامه دادم. برای همین خواستم در اینجا نیز با همین اشتباه پیش برم تا شما یاد بگیرد.

اگر از اینجا به بعد با نام بالا پیش بروید، با خطا مواجه می شوید. ولی چرا؟

چون که من اولین بار فایل خودم را با حروف بزرگ مثل My که در بالا نوشته بودم، نوشتم. پس در برنامه نویسی اندروید فایل ها در منابع نباید با حروف بزرگ باشند.

در بخش منابع آموزش های اندروید نیز به این نکته اشاره شد.

اسم فایل را به myvideo.mp4 تغییر میدهم.

ابزار VideoView را که در بخش لایه اپلیکیشن، اضافه کرده بودیم در این قسمت معرفی می کنیم. و نام متغیر آن را Video می گذاریم.

VideoView Video = (VideoView) findViewById(R.id.videoView);

برای ابزار VideoView باید کلاس VideoView به برنامه، Import شود:

import android.widget.VideoView;

برای پخش ویدیو، اول ویدیو باید بافر شود. بافر در اینجا یعنی قسمتی از ویدیو زودتر در حافظه اصلی دستگاه ما قرار می گیرد و آماده پخش می شود، تا در زمان مناسب پخش شود. اگر از سایتهایی مثل یوتوب و یا آپارت ویدیو به صورت آنلاین نگاه کنید، متوجه می شوید که نوار ویدیویی، نیمه پررنگی، جلوتر می رود. در آنجا بافر یعنی تا آن قسمت از ویدیو، از اینترنت به حافظه ما منتقل شده است و در صورت قطع اینترنت نیز شما تا آن قسمتی که بافر شده است را می توانید مشاهده کنید.

در این جا زیاد لازم نیست وارد این جزئیات شویم، این توضیحات فقط برای این بود که بگوییم ما در این پروژه، به یک رشته احتیاج داریم تا کار بافر را برای ما انجام دهد و ویدیوی ما در آن رشته ذخیره شود. و سپس از همان رشته، VideoView ویدیوی ما را پخش کند.

 متغیر Buffer را از نوع String معرفی می کنیم. برای این کار، کد زیر را می نویسیم:

String Buffer = "android.resource://com.gsm_developers.videoview_gsm/"+R.raw.myvideo;

توجه داشته باشید در کد بالا مقدار android.resource، در واقع محل فایل ویدیویی ما است. که اول این آدرس، نام پکیج و سپس محل قرار گیری فایل ویدیویی ما در پروژه می باشد.

“android.resource:// نام پکیج /”R.محل فایل ما در پروژه

در اینجا نام پکیج، com.gsm_developers.videoview_gsm می باشد. (نام پکیج را می توانید در اولین خط از فایل جاوا MainActivity.java مشاهده نمایید.)

محل فایل ما نیز در پوشه Raw و اسم آن myvideo است. که می شود: R.raw.myvideo

در مرحله بعد، یک متغیر از نوع Uri را معرفی می کنم تا اطلاعات را از رشته بگیرد. این اطلاعات جهت پخش، به VideoView فرستاده می شود.

Uri uri = Uri.parse(Buffer);

حال باید Uri ما که در مرحله قبل آن را معرفی کردیم، توسط VideoURI ست شود.

Video.setVideoURI(uri);

کد زیر نیز، ویدیو شما را پخش می کند.

Video.start();

کد کامل MainActivity

package com.gsm_developers.videoview_gsm;

import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        VideoView Video = (VideoView) findViewById(R.id.videoView);

        String Buffer = "android.resource://com.gsm_developers.videoview_gsm/"+R.raw.myvideo;

        Uri uri = Uri.parse(Buffer);
        Video.setVideoURI(uri);
        Video.start();
    }
}

اگر اپلیکیشینی را که نوشته ایم اجرا نمایید، خروجی زیر را مشاهده می کنید.