Andorid播放多媒体文件——播放视频

以下内容摘自郭霖《第一行代码》第三版

播放视频

VideoView的常用方法

方法名 功能描述
setVideoPath() 设置要播放的视频文件的位置
start() 开始或继续播放视频
pause() 暂停播放视频
resume() 将视频从头开始播放
seekTo() 从指定的位置开始播放视频
isPlaying() 判断当前是否正在播放视频
getDuration() 获取载入的视频文件的时长
suspend() 释放ViedoView所占用的资源

activity_main.xml


<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <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"
            android:text="Pause" />

        <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/videoView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

LinearLayout>

VideoView不支持直接播放assets目录下的视频资源,所以我们只能寻找其他的解决方案。res目录下允许我们再创建一个raw目录,像诸如音频、视频之类的资源文件也可以放在这里,并且VideoView是可以直接播放这个目录下的视频资源的。

MainActivity

package com.example.playvideotest

import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.VideoView

class MainActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val uri = Uri.parse("android.resource://$packageName/${R.raw.video}")

        val play: Button = findViewById(R.id.play)
        val pause: Button = findViewById(R.id.pause)
        val replay: Button = findViewById(R.id.replay)
        val videoView: VideoView = findViewById(R.id.videoView)

        videoView.setVideoURI(uri)

        play.setOnClickListener {
            if(!videoView.isPlaying){
                videoView.start()                   // 开始播放
            }
        }

        pause.setOnClickListener {
            if(videoView.isPlaying){
                videoView.pause()                   // 暂停播放
            }
        }

        replay.setOnClickListener {
            if(videoView.isPlaying){
                videoView.resume()                  // 重新播放
            }
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        val videoView: VideoView = findViewById(R.id.videoView)
        videoView.suspend()
    }
}

首先在onCreate()方法中调用了Uri.parse()方法,将raw目录下的video.mp4文件解析成了一个Uri对象,这里使用的写法是Android要求的固定写法。然后调用VideoView的setVideoURI()方法将刚才解析出来的Uri对象传入,这样VideoView就初始化完成了。

最后在onDestroy()方法中,我们还需要调用一下suspend()方法,将VideoView所占用的资源释放掉。

注意:VideoView并不是一个万能的视频播放工具类,它在视频格式的支持以及播放效率方面都存在着较大的不足。所以,如果想要仅仅使用VideoView就编写出一个功能非常强大的视频播放器是不太现实的。但是如果只是用于播放一些游戏的片头动画,或者某个应用的视频宣传,使用VideoView还是绰绰有余的。

效果图:
Andorid播放多媒体文件——播放视频_第1张图片

你可能感兴趣的:(Android,音视频)