Android 비디오 재생

동영상 재생:

비디오 파일을 재생하는 것은 실제로 오디오 파일을 재생하는 것보다 복잡하지 않습니다. 주로 VideoView 클래스를 사용하여 구현합니다.이 클래스는 비디오의 표시 및 제어를 통합하므로 도움만으로 간단한 비디오 플레이어를 완성 할 수 있습니다.

VideoView의 사용법은 MediaPlayer의 사용법과 유사하며 다음과 같은 일반적인 방법이 있습니다.

setVideoPath () 는 재생할 비디오 파일의 위치를 ​​설정합니다.

start () 비디오 재생 시작 또는 계속

pause () 비디오 일시 중지

resume () 비디오 다시 시작

seekTo () 는 지정된 위치에서 비디오 재생을 시작합니다.

isPlaying () 은 동영상이 현재 재생 중인지 확인합니다.

getDuration () 로드 된 비디오 파일의 길이를 가져옵니다.

PlayVideoTest 프로젝트 만들기

activity_main.xml에서 코드를 수정하십시오.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/play"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Play"
            />
        <Button
            android:id="@+id/pause"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            />
        <Button
            android:id="@+id/replay"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Replay"
            />
    </LinearLayout>
    <VideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

이 레이아웃 파일에서 먼저 비디오의 재생, 일시 중지 및 재생을 제어하기 위해 세 개의 버튼이 배치 된 다음 다른 VideoView가 버튼 아래에 배치되고 이후 비디오가 여기에 표시됩니다.

다음으로 MainActivity의 코드를 다음과 같이 수정합니다.

package net.nyist.lenovo.playvideotest;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.widget.VideoView;

import java.io.File;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private VideoView videoView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button play = (Button) findViewById(R.id.play);
        Button pause = (Button) findViewById(R.id.pause);
        Button replay = (Button) findViewById(R.id.replay);
        play.setOnClickListener(this);
        pause.setOnClickListener(this);
        replay.setOnClickListener(this);

        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
        }else {
            initVideoPath();//初始化MediaPlayer
        }
    }
    private void initVideoPath(){
        File file = new File(Environment.getExternalStorageDirectory(),"movie.mp4");
        videoView.setVideoPath(file.getPath());
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case 1:
                if (grantResults.length > 0&&grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    initVideoPath();
                }else {
                    Toast.makeText(this, "拒绝权限将无法使用程序", Toast.LENGTH_SHORT).show();
                    finish();
                }
                break;
            default:

        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (videoView!=null){
            videoView.suspend();//将VideoView所占用的资源释放掉。
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.play:
                if (!videoView.isPlaying()){
                    videoView.start();//开始播放
                }
                break;
            case R.id.pause:
                if (!videoView.isPlaying()){
                    videoView.pause();//暂停播放
                }
                break;
            case R.id.replay:
                if (!videoView.isPlaying()){
                    videoView.resume();//重新播放
                break;
                }
        }

    }
}

이 코드 부분은 오디오 재생을위한 이전 코드와 매우 유사하기 때문에 이해하기 쉽습니다. 첫째, 비디오 파일이 SD 카드에 저장되기 때문에 onCreate () 메서드에서도 런타임 권한 처리가 수행됩니다.

사용자가 승인에 동의하면 initVideoPath () 메서드가 호출되어 동영상 파일의 경로를 설정합니다. 여기에서는 미리 SD 카드의 루트 디렉토리에 movie.mp4라는 동영상 파일을 배치해야합니다.

각 버튼의 클릭 이벤트에있는 코드를 살펴 보겠습니다.

当点击Play按钮时会进行判断,
如果当前并没有正在播放视频,
则调用start()方法开始播放,
当点击Pause按钮时会判断,
如果当前视频正在播放,
则调用pause()方法暂停播放。
当点击Replay按钮时会判断,
如果当前视频正在播放,
则调用resume()方法从头播放视频。

마지막으로 onDestroy () 메서드에서 VideoView가 차지하는 리소스를 해제하기 위해 suspend () 메서드도 호출해야합니다.

또한 항상 AndroidManifest.xml 파일에 사용 된 권한을 선언해야합니다.

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

비디오 재생을 일시 중지하려면 일시 중지 단추를 클릭하고 비디오를 다시 시작하려면 다시 재생 단추를 클릭하십시오.

추천

출처blog.csdn.net/i_nclude/article/details/77749589