2022年3月27日 星期日

Android Studio - MediaPlayer 播放網上視頻程式(七十七)

Android Studio - MediaPlayer 播放網上視頻程式(七十七):

除了使用 MediaRecorder 可以進行錄影和錄音,支援捕獲和編碼各種常見的音訊和視頻格式。MediaPlayer 還可以播放音樂和視頻。除了播放手機內的視頻外,還可以播放網上(URL)的視頻(MediaPlayer Internet Video Program)。

Android MediaPlayer 播放網上視頻程式(MediaPlayer Internet Video Program)
  • 操作系統:Windows 7 64-bit 版本
  • 開發環境:Android Studio 4.0.1 版本
  • 原程式:C:\Development\Development_Android\Android_Project\DIY-Android-141-16 MediaPlayer URL Video Bugworkshop
  • 程式:C:\Development\Development_Android\Android_Project\DIY-Android-141-16 MediaPlayer URL Video Bugworkshop
  • 測試環境:Vivo(維沃)X5Max Android 4.4.4(KitKat)版本
Android MediaPlayer 播放網上視頻程式(MediaPlayer Internet Video Program)編程步驟:
  • 設定 MediaPlayer 參數
  • 設置Button - Play Pause Stop 參數
  • 加入 Video mp4 檔案在 raw內

AndroidManifest.xml 獲取 Internet 許可權:

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


activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

 

    <SurfaceView

        android:id="@+id/sfv_show"

        android:layout_width="411dp"

        android:layout_height="296dp"

        tools:ignore="MissingConstraints" />

 

    <Button

        android:id="@+id/btn_start"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginStart="20dp"

        android:layout_marginLeft="20dp"

        android:layout_marginTop="124dp"

        android:text="Start"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toBottomOf="@+id/sfv_show" />

 

    <Button

        android:id="@+id/btn_pause"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginStart="30dp"

        android:layout_marginLeft="30dp"

        android:layout_marginTop="124dp"

        android:text="Pause"

        app:layout_constraintStart_toEndOf="@+id/btn_start"

        app:layout_constraintTop_toBottomOf="@+id/sfv_show" />

 

    <Button

        android:id="@+id/btn_stop"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginStart="30dp"

        android:layout_marginLeft="30dp"

        android:layout_marginTop="124dp"

        android:text="Stop"

        app:layout_constraintStart_toEndOf="@+id/btn_pause"

        app:layout_constraintTop_toBottomOf="@+id/sfv_show" />

 

</androidx.constraintlayout.widget.ConstraintLayout>


MainActivity.java:

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

 

import android.media.AudioManager;

import android.media.MediaPlayer;

import android.net.Uri;

import android.os.Bundle;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

 

import java.io.IOException;

import java.net.URL;

 

public class MainActivity extends AppCompatActivity implements View.OnClickListener, SurfaceHolder.Callback{

 

    private MediaPlayer mPlayer = null;

    private SurfaceView sfv_show;

    private SurfaceHolder surfaceHolder;

    private Button btn_start;

    private Button btn_pause;

    private Button btn_stop;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        sfv_show = (SurfaceView) findViewById(R.id.sfv_show);

        btn_start = (Button) findViewById(R.id.btn_start);

        btn_pause = (Button) findViewById(R.id.btn_pause);

        btn_stop = (Button) findViewById(R.id.btn_stop);

 

        btn_start.setOnClickListener(this);

        btn_pause.setOnClickListener(this);

        btn_stop.setOnClickListener(this);

 

        surfaceHolder = sfv_show.getHolder();

        surfaceHolder.addCallback(this);

        surfaceHolder.setFixedSize(320, 220);

    }

 

    @Override

    protected void onDestroy() {

        super.onDestroy();

        if (mPlayer.isPlaying()) {

            mPlayer.stop();

        }

        mPlayer.release();

    }

 

    @Override

    public void onClick(View view) {

        switch (view.getId()) {

            case R.id.btn_start:

                mPlayer.start();

                break;

            case R.id.btn_pause:

                mPlayer.pause();

                break;

            case R.id.btn_stop:

                mPlayer.stop();

                break;

        }

    }

 

    @Override

    public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder) {

        mPlayer = new MediaPlayer();

        mPlayer.setDisplay(surfaceHolder);

        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

        String url = "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4";

        try {

            mPlayer.setDataSource(url);

            mPlayer.prepare();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    @Override

    public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int i, int i1, int i2) {

    }

 

    @Override

    public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder) {

    }

}


2022年 3月 27日(Sun)天氣報告
氣溫:47.0°F / 8.0°C @ 07:00
風速:每小時 2公里
降雨機會:3%
相對濕度:百分之 90%
天氣:大致晴朗

沒有留言:

張貼留言