Android 饺子播放器
16lz
2021-01-23
在很多项目里面都有视频一类,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
更多相关文章
- 二、VR全景图显示器开发 ---- Android VR视频/Google VR for And
- MediaRecorder音视频框架
- 搭建WebRTC Android视频demo
- Android视频文件格式解析相关分析
- 原生Android缩略图填满SD卡的问题
- 有关android中加载MP4,3gp等视频文件,无法播放问题的解决
- Android音视频 - Camera+AudioRecord采集数据
- Skype 视频电话功能终于支持更多 Android 手机