在很多项目里面都有视频一类,Android中视频播放框架有VideoView,SurfaceView+MediaPlayer,Vitamin,jiaozivideoplayer

等几种。一般就看公司要求,没有要求就看自己的喜好。我就喜欢用饺子播放器,下面就最简单的实现一下:

一   导入依赖

饺子依赖:implementation 'cn.jzvd:jiaozivideoplayer:6.2.4'
图片加载依赖implementation 'com.github.bumptech.glide:glide:4.3.1'

二  xml 布局

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

 注意:如果需要横竖屏切换需要在AndroidManifest.xml中加上以下代码,没有添加的话切换的时候会报错:

android:configChanges="orientation|screenSize|keyboardHidden"android:screenOrientation="portrait

三 代码实现

import android.annotation.TargetApi;import android.content.pm.ActivityInfo;import android.graphics.Bitmap;import android.hardware.Sensor;import android.hardware.SensorManager;import android.media.MediaMetadataRetriever;import android.media.ThumbnailUtils;import android.os.Build;import android.provider.MediaStore;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ImageView;import com.bumptech.glide.Glide;import java.util.HashMap;import cn.jzvd.JZVideoPlayer;import cn.jzvd.JZVideoPlayerStandard;public class MainActivity extends AppCompatActivity {    private  JZVideoPlayerStandard mJC;    SensorManager sensorManager;    JZVideoPlayer.JZAutoFullscreenListener jzAutoFullscreenListener;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                   initView();    }    private void initView() {        //初始化        mJC = (JZVideoPlayerStandard) findViewById(R.id.mJC);        //用于实现重力感应下切换横竖屏        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);        jzAutoFullscreenListener = new JZVideoPlayer.JZAutoFullscreenListener();        //设置图片为全屏        mJC.thumbImageView.setScaleType(ImageView.ScaleType.FIT_XY);        //内置视频的高度,可以去除黑边      JZVideoPlayer.setVideoImageDisplayType(JZVideoPlayer.VIDEO_IMAGE_DISPLAY_TYPE_FILL_PARENT);        //播放视频        mJC.TOOL_BAR_EXIST = false;        mJC.thumbImageView.setImageResource(R.drawable.i1);//先设置一张默认图片        mJC.setUp("https://ali-v4d.xiaoying.tv/20181027/zfll0y/3zlmkoU574.mp4", JZVideoPlayerStandard.SCROLL_AXIS_HORIZONTAL, "这视频真好,去除黑边了");        //设置第一帧作为视频的缩略图        new Thread(new Runnable() {            @Override            public void run() {                final Bitmap bitmap = createVideoThumbnail("https://ali-v4d.xiaoying.tv/20181027/zfll0y/3zlmkoU574.mp4", mJC.thumbImageView.getMaxWidth(), mJC.thumbImageView.getMaxHeight());                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        mJC.thumbImageView.setImageBitmap(bitmap);                    }                });            }        }).start();        //视频的缩略图地址       //Glide.with(getApplicationContext()).load("http://p0.so.qhmsg.com/bdr/_240_/t01c10808f98a39bd4f.jpg").into(mJC.thumbImageView);        //播放比例,可以设置为16:9,4:3        mJC.widthRatio = 4;        mJC.heightRatio = 3;        //设置全屏播放        JZVideoPlayer.FULLSCREEN_ORIENTATION = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;  //横向        JZVideoPlayer.NORMAL_ORIENTATION = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;  //纵向    }    //获取视频的第一帧作为视频的缩略图(网络视频):    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)    private Bitmap createVideoThumbnail(String url, int width, int height) {        Bitmap bitmap = null;        MediaMetadataRetriever retriever = new MediaMetadataRetriever();        int kind = MediaStore.Video.Thumbnails.MINI_KIND;        try {            if (Build.VERSION.SDK_INT >= 14) {                retriever.setDataSource(url, new HashMap());            } else {                retriever.setDataSource(url);            }            bitmap = retriever.getFrameAtTime();        } catch (IllegalArgumentException ex) {            // 假设这是一个损坏的视频文件        } catch (RuntimeException ex) {            //假设这是一个损坏的视频文件        } finally {            try {                retriever.release();            } catch (RuntimeException ex) {                // 清理时忽略故障            }        }        if (kind == MediaStore.Images.Thumbnails.MICRO_KIND && bitmap != null) {            bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);        }        return bitmap;    }    @Override    public void onBackPressed() {        if (JZVideoPlayer.backPress()) {            return;        }        super.onBackPressed();    }    @Override    protected void onPause() {        super.onPause();        sensorManager.unregisterListener(jzAutoFullscreenListener);        JZVideoPlayer.releaseAllVideos();    }    @Override    protected void onResume() {        super.onResume();        //播放器重力感应        Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);        sensorManager.registerListener(jzAutoFullscreenListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);    }}

借鉴于https://blog.csdn.net/weixin_41787393/article/details/82222145 

 

更多相关文章

  1. 二、VR全景图显示器开发 ---- Android VR视频/Google VR for And
  2. MediaRecorder音视频框架
  3. 搭建WebRTC Android视频demo
  4. Android视频文件格式解析相关分析
  5. 原生Android缩略图填满SD卡的问题
  6. 有关android中加载MP4,3gp等视频文件,无法播放问题的解决
  7. Android音视频 - Camera+AudioRecord采集数据
  8. Skype 视频电话功能终于支持更多 Android 手机

随机推荐

  1. AutoCompleteTextView的基本使用
  2. Android之国际化(在程序内部强制转换语言
  3. android 使用include 调用内部组件
  4. Android(安卓)应用启动时去掉应用图标
  5. 2014.01.07 ——— android开发实例之Qui
  6. android 自定义checkbox
  7. AndroidManifest.xml - activity 详细说
  8. Android(安卓)NDK JNI 入门笔记-day01-创
  9. Android(安卓)问题集
  10. Android(安卓)studio ndk编译配置