初级视频播放功能

作者: Ad大成 | 来源:发表于2019-08-15 17:15 被阅读4次

打开相册选择视频

/**
 * 打开相册,选择视频
 */
public void pickVideo(View view) {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("video/*");
    startActivityForResult(intent, REQUEST_CODE);
}

使用系统播放器播放视频

/**
 * 调用系统播放器播放视频
 */
private void playVideoBySystemPlayer(Uri uri) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(uri, "video/*");
    startActivity(intent);
}

使用VideoView播放视频

public void playInVideoView(Uri uri) {
    VideoView videoView = this.findViewById(R.id.videoView);
//创建视频设置控制栏
    MediaController controller = new MediaController(activity); 
// 必须传有Window的Context,比如Activity
//给videoview设置控制栏
    videoView.setMediaController(controller);
//控制栏的位置依附到videoview上
    controller.setAnchorView(videoView);
//加载视频
    videoView.setVideoURI(uri);
//开启视频
    videoView.start();
}
// 获取视频的长度
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mediaPlayer) {
        // 视频的播放时长
        int duration = videoView.getDuration(); 
    }
});

使用SurfaceView播放视频

  1. void surfaceCreated(SurfaceHolder holder):当SurfaceHolder被创建的时候回调。
  1. void surfaceChange(SurfaceHolder holder):当SurfaceHolder的尺寸发生变化的时候被回调。
  1. void surfaceDestroyed(SurfaceHolder holder):当SurfaceHolder被销毁的时候回调。
private void playVideo(SurfaceView surfaceView) {
    try {
        // MediaPlayer
        final MediaPlayer mediaPlayer = new MediaPlayer();
        Uri uri = Uri.parse("http://vfx.mtime.cn/Video/2019/03/17/mp4/190317150237409904.mp4");
        mediaPlayer.setDataSource(this, uri);
        // SurfaceHolder
        surfaceView.getHolder().addCallback(new SurfaceHolder.Callback2() {
            @Override
            public void surfaceRedrawNeeded(SurfaceHolder holder) {

            }

            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                // SurfaceView创建时调用
                try {
                    mediaPlayer.setDisplay(holder);
                    mediaPlayer.prepare();
                    mediaPlayer.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                // 横竖屏切换
            }

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                // SurfaceView销毁时调用
                mediaPlayer.stop();
                mediaPlayer.release();
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }
}

获取视频封面

public void getVideoCover() {
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    Uri uri = Uri.parse("http://vfx.mtime.cn/Video/2019/03/17/mp4/190317150237409904.mp4");
    retriever.setDataSource(uri.toString(), new HashMap<String, String>()); // 获取网络视频的元信息
    // retriever.setDataSource(context,uri); // 获取本地视频的元信息
    Bitmap bitmap = retriever.getFrameAtTime();
    imageView.setImageBitmap(bitmap);
    // 获取屏幕的宽高
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    int widthPixels = metrics.widthPixels;
    int heightPixels = metrics.heightPixels;
    // 重新设置SurfaceView宽高
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    // 计算最佳缩放比例
    float widthRatio = width * 1.0f / widthPixels;
    float heightRatio = height * 1.0f / heightPixels;
    float ratio = Math.max(widthRatio, heightRatio);
    // 计算视频显示的宽高
    int displayWidth = (int) (width / ratio);
    int displayHeight = (int) (height / ratio);
    // 设置SurfaceView的宽高
    ViewGroup.LayoutParams layoutParams = surfaceView.getLayoutParams();
    layoutParams.width = displayWidth;
    layoutParams.height = displayHeight;
    surfaceView.requestLayout();
}

相关文章

  • 初级视频播放功能

    打开相册选择视频 使用系统播放器播放视频 使用VideoView播放视频 使用SurfaceView播放视频 vo...

  • iOS 关于启动app播放视频功能

    iOS 关于启动app播放视频功能 iOS 关于启动app播放视频功能

  • Android音视频播放库:wlmedia

    wlmedia android 音视频播放SDK,几句代码即可实现音视频播放功能~ 功能 **支持:http、ht...

  • 百思不得姐数据挖掘第三篇

    播放视频的界面现在只剩下视频的功能了,对于这种播放视频的应该属于功能块。我们可以单独把这个功能提取出来。 我们新建...

  • 播放器相关知识点详解

    最近的项目需要实现视频的播放功能,底层的播放实现需要兼容常规的url视频源播放和基于搜狐SDK的视频源播放(...

  • 01.视频播放器框架介绍

    视频播放器介绍文档 目录介绍 01.该视频播放器介绍 02.视频播放器功能 03.视频播放器架构说明 04.视频播...

  • VideoView and TextureVideoView o

    此文章你将会学会在android的视频播放功能 使用VideoView视频播放使用TextureVideoView...

  • HTML5倍数功能视频播放器(加速2倍,1.5倍播放)

    HTML5倍数功能视频播放器(加速2倍,1.5倍播放) 倍数功能视频播放器的应用: 培训场景,教育教学场景下,可以...

  • VideoView使用心得

    最近需要写一个关于视频播放的功能,功能很简单,就是实现简单的视频播放,暂停,和播放进度的显示,所以就不考虑使用第三...

  • iOS 视频播放器的实现

    最近工作之余, 写了一个视频播放器,输入要播放的视频资源地址,即可实现播放功能。目前功能比较简单,支持锁屏、屏幕旋...

网友评论

    本文标题:初级视频播放功能

    本文链接:https://www.haomeiwen.com/subject/textsctx.html