آموزش پخش استریم ویدیو از سرور در اندروید

منتشرشده توسط حامد قنبری در تاریخ

در این آموزش،  ما قصد داریم به شما نحوه استریم  ویدئو   از راه دور یا سرور را،  با استفاده از MediaController و نمایش آن توسط  VideoView  در برنامه Android آموزش دهیم. MediaController یک کنترل کننده برای مدیا پلیر محسوب می شودکه دارای متدهای همانند پخش / مکث، عقب، سریع به جلو و نوار لغزنده  است. فیلم ها را می توان از منابع مختلف مانند سرورهای راه دور، ذخیره سازی های ابری و کارت SD داخلی بارگیری کرد. بدون ذکر توضیحات بیشتر به سراغ اجرای پروژه می رویم:

اگر در داخل برنامه اکلیپس یا اندروید استودیو قرار دارید پروژه جدیدی را  ایجاد کنید

اکلیپس :File ⇒ New Android ⇒ Application Project

اندروید استودیو :File ⇒ New  ⇒ New Project

اما اگر هنوز برنامه خود را باز نکرده اید یکی از برنامه های فوق را باز نموده و بعد از تعیین مشخصات(نامگذاری) ، تعیین حداقل sdk  و نوع اکتیویتی (blank  یا Empty) ، نام اکتیویتی ابتدایی و اصلی خود  را همان MainActivity قرار دهید. بعد از لود کامل برنامه ، در مسیر res ⇒layout لایه متناظر اکتیوتی اصلی یعنی activity_main را پیدا نمود و کدهای مندرج و پیش فرض آن را پاک کرده و کدهای xml  زیر را به آن اضافه کنید:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Button
        android:id="@+id/MyButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="استریم آنلاین و یدیو"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="89dp" />

</RelativeLayout>

سپس کلاس اصلی یعنی MainActivity.java را باز کرده و کدهای زیر را در آن قرار دهید:

package ir.psrd.example.StramOnline;



    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.app.Activity;
    import android.content.Intent;

    public class MainActivity extends Activity {

        Button button;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Get the layout from video_main.xml
            setContentView(R.layout.activity_main);

            // Locate the button in activity_main.xml
            button = (Button) findViewById(R.id.MyButton);

            // Capture button clicks
            button.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {

                    // Start NewActivity.class
                    Intent myIntent = new Intent(MainActivity.this,
                            VideoViewActivity.class);
                    startActivity(myIntent);
                }
            });
        }
    }

 

به دنبال درج کدهای کلاس MainActivity، لازم است اکتیویتی جدیدی را با نام VideoViewActivity ایجاد کنید با توجه به شکل زیر اکتیویتی جدیدی را با نام مذکور ایجاد کنید.

در مسیر res ⇒layout لایه متناظر اکتیوتی VideoViewActivity یعنی activity_video_view.xml را پیدا نمود و کدهای مندرج و پیش فرض آن را پاک کرده و کدهای xml  زیر را به آن اضافه کنید:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <VideoView
        android:id="@+id/VideoView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />

</RelativeLayout>

به دنبال درج کدهای فوق کلاس VideoViewActivity .java را باز کرده و کدهای زیر بدان اضافه می کنیم:

 

package ir.psrd.example.StramOnline;

import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.widget.MediaController;
import android.widget.VideoView;

public class VideoViewActivity extends Activity {

    // Declare variables
    ProgressDialog pDialog;
    VideoView videoview;

    // Insert your Video URL
    String VideoURL = "http://psrd.ir/wp-content/uploads/2018/01/streamonlinevideo.3gp";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the layout from video_main.xml
        setContentView(R.layout.activity_video_view);
        // Find your VideoView in your video_main.xml layout
        videoview = (VideoView) findViewById(R.id.VideoView);
        // Execute StreamVideo AsyncTask

        // Create a progressbar
        pDialog = new ProgressDialog(VideoViewActivity.this);
        // Set progressbar title
        pDialog.setTitle("Android Video Streaming Tutorial");
        // Set progressbar message
        pDialog.setMessage("Buffering...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        // Show progressbar
        pDialog.show();

        try {
            // Start the MediaController
            MediaController mediacontroller = new MediaController(
                    VideoViewActivity.this);
            mediacontroller.setAnchorView(videoview);
            // Get the URL from String VideoURL
            Uri video = Uri.parse(VideoURL);
            videoview.setMediaController(mediacontroller);
            videoview.setVideoURI(video);

        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }

        videoview.requestFocus();
        videoview.setOnPreparedListener(new OnPreparedListener() {
            // Close the progress bar and play the video
            public void onPrepared(MediaPlayer mp) {
                pDialog.dismiss();
                videoview.start();
            }
        });

    }

}

با توجه به نیاز برنامه برای اتصال به اینترنت لازم است مجوز اتصال به اینترنت در قسمت Androidmanifest.xml تعریف شود از این رو مجوز اتصال به اینترنت را به شکل زیر در مانیفست پروژه تعریف می کنیم:

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ir.psrd.example.StramOnline">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".VideoViewActivity"
            android:label="@string/title_activity_video_view"
            android:theme="@style/AppTheme.NoActionBar">

        </activity>
    </application>

</manifest>

حال می توانید پروژه خود را اجرا کرده و نتیجه کار خودتان را ببینید. اگر مشکلی در اجرای کدها دارید یا سوال به خصوصی ذهن شما را مشغول کرده است می توانید در قسمت دیدگاه آن را مطرح کنید. باعث خرسندی ما خواهد بود که پاسخگوی سوالات تخصصی شما باشیم.

 

 

 

 


0 دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --