• Android学习笔记 49. Android 多媒体技术——MediaPlayer播放视频


    Android学习笔记

    Android 多媒体技术

    49. Android 多媒体技术——MediaPlayer播放视频

    49.1 MediaPlayer播放视频

    MediaPlayer类简介:

    媒体框架最重要的组成部分之一,此类的对象能够获取、解码以及播放音频和视频,而且只需极少量的设置。

    它支持多种不同的媒体源:

    • 本地资源
    • 内部URL
    • 外部网址

    支持的媒体格式

    https://developer.android.google.cn/guide/topics/media/media-formats

    在这里插入图片描述

    创建跳转新的Activity进行播放。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    设置第二个按钮的点击事件。

    VideoActivity布局

    在这里插入图片描述

    和录制视频一样。

    MediaPlayer的使用

    调用

    package com.dingjiaxiong.mymediarecorder;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.Surface;
    import android.view.TextureView;
    import android.view.View;
    import android.widget.Button;
    
    import java.io.File;
    import java.io.IOException;
    
    public class VideoActivity extends AppCompatActivity implements View.OnClickListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener {
    
        private TextureView textureView;
        private Button btn_opt;
        private MediaPlayer mediaPlayer;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_video);
    
    
            textureView = findViewById(R.id.textureView);
            btn_opt = findViewById(R.id.btn_opt);
    
            btn_opt.setOnClickListener(this);
    
        }
    
        @Override
        public void onClick(View v) {
            CharSequence text = btn_opt.getText();
            if (TextUtils.equals(text, "开始")) {
                btn_opt.setText("结束");
    
                mediaPlayer = new MediaPlayer();
                //设置准备监听
                mediaPlayer.setOnPreparedListener(this);
    
                // 设置播放完成监听
                mediaPlayer.setOnCompletionListener(this);
    
                //指定视频源
                try {
                    mediaPlayer.setDataSource(new File(getExternalFilesDir(""), "a.mp4").getAbsolutePath());
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
                //设置画布
    
                mediaPlayer.setSurface(new Surface(textureView.getSurfaceTexture())) ;
    
                mediaPlayer.prepareAsync();
    
    
    
            }else {
                btn_opt.setText("开始");
                mediaPlayer.stop();
                mediaPlayer.release(); // 结束
            }
        }
    
        @Override
        public void onPrepared(MediaPlayer mp) {
            mediaPlayer.start();
        }
    
        @Override
        public void onCompletion(MediaPlayer mp) {
            btn_opt.setText("开始");
            mediaPlayer.release(); // 结束
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    运行

    在这里插入图片描述

    成功,其实是有声音的,这里放GIF,就不方便演示了。

    49.2 VideoView的使用

    新建一个Activity

    在这里插入图片描述

    修改跳转

    在这里插入图片描述

    布局

    
    <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"
        tools:context=".VideoViewActivity">
    
    
        <VideoView
            android:id="@+id/videoView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
    
            />
    
    
    androidx.constraintlayout.widget.ConstraintLayout>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    调用

    package com.dingjiaxiong.mymediarecorder;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.MediaController;
    import android.widget.VideoView;
    
    import java.io.File;
    
    public class VideoViewActivity extends AppCompatActivity implements View.OnClickListener {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_video_view);
    
            VideoView videoView =  findViewById(R.id.videoView);
    
            MediaController mediaController = new MediaController(this);
    
            mediaController.setPrevNextListeners(this,this);
    
            videoView.setMediaController(mediaController);
    
            videoView.setVideoPath(new File(getExternalFilesDir(""), "a.mp4").getAbsolutePath());
            videoView.start();
        }
    
        @Override
        public void onClick(View v) {
            Log.i("VideoView", "onClick:========== ");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    运行

    在这里插入图片描述

    OK

  • 相关阅读:
    Windows 下载编译chromium源码
    openGauss学习笔记-83 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT使用内存和存储规划
    梦开始的地方——C语言指针练习题
    WebDAV之葫芦儿·派盘+咕咚云图
    spark shuffle写操作——UnsafeShuffleWriter
    Syntax Error: Error: PostCSS received undefined instead of CSS string (已解决)
    英语邮件格式范文
    Vue.js 框架源码与进阶 - Vue.js 3.0 响应式系统原理
    深入理解 pytest Fixture 方法及其应用!
    Android SystemUI去掉拖动亮度条QSPanel界面隐藏功能
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126314473