简单视频播放器的使用

一、简单使用videoView和MediaController实现播放控制

1、添加需要的权限

2、设置布局

android:id="@+id/main_video"

android:layout_width="match_parent"

android:layout_height="240dp"

/>

3、实例化VideoView

VideoView videoView = (VideoView) findViewById(R.id.main_video);

MediaController controller = new MediaController(this);//实例化控制器

// String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"jiaoxue.mp4";

/**

* 本地播放

*/

// videoView.setVideoPath("path");

/**

* 网络播放

*/

videoView.setVideoURI(Uri.parse("http://192.168.1.109:8080/video/jiaoxue.mp4"));

/**

* 将控制器和播放器进行互相关联

*/

controller.setMediaPlayer(videoView);

videoView.setMediaController(controller);

二、自定义播放器 (贴上源码)

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.zzj.myeasyvideoplaydemo.MainActivity">

android:layout_width="match_parent"

android:layout_height="240dp">

android:id="@+id/main_video"

android:layout_width="match_parent"

android:layout_height="240dp"

/>

android:layout_width="match_parent"

android:layout_height="50dp"

android:orientation="vertical"

android:layout_alignParentBottom="true"

>

android:layout_width="match_parent"

android:layout_height="5dp"

android:layout_marginLeft="-20dp"

android:layout_marginRight="-20dp"

android:max="100"

android:indeterminate="false"

android:progress="20"

/>

android:gravity="center_vertical"

android:background="#101010"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal"

>

android:id="@+id/play_pasue_image"

android:layout_marginLeft="5dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@mipmap/video_play_blue"

/>

android:id="@+id/main_current_time"

android:layout_marginLeft="16dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="00:00:00"

android:textSize="14dp"

android:textColor="#ffffff"

/>

android:layout_marginLeft="5dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="/"

android:textSize="14dp"

android:textColor="#4c4c4c"

/>

android:id="@+id/main_totally_time"

android:layout_marginLeft="5dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="00:00:00"

android:textSize="14dp"

android:textColor="#ffffff"

/>

android:layout_marginRight="5dp"

android:layout_alignParentRight="true"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@mipmap/video_sound_switch"

/>

android:layout_width="100dp"

android:layout_height="5dp"

android:progress="20"

android:max="100"

/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@mipmap/play"

/>

视频Java类:

public class TestMovieActivity extends BaseActivity {

public static final int UPDATA_VIDEO_NUM = 1;

private CustomVideoView videoView;

private MediaController controller;//控制器

private RelativeLayout videoLayout;

private LinearLayout controllerLayout;//播放器的总控制布局

private SeekBar play_seek, volume_seek;//播放进度和音量控制进度

private ImageView play_controller_image, screen_image,volume_Image;

private TextView current_time_tv, totally_time_tv;

private String path;

private int screen_width, screen_height;

private AudioManager audioManager;//音量控制器

private boolean screen_flag = true;//判断屏幕转向

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//实例化音量控制器

audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

setContentView(R.layout.act_testmovie);

initView();

initData();

initViewOnClick();

// controller = new MediaController(this);//实例化控制器

// path = Environment.getExternalStorageDirectory().getAbsolutePath()+"jiaoxue.mp4";

/**

* 本地播放

*/

// videoView.setVideoPath("");

/**

* 网络播放

*/

videoView.setVideoURI(Uri.parse("http://192.168.1.109:8080/video/jiaoxue.mp4"));

//视频播放时开始刷新

// videoView.start();

play_controller_image.setImageResource(R.mipmap.video_play_blue);

// handler.sendEmptyMessage(UPDATA_VIDEO_NUM);

/**

* 将控制器和播放器进行互相关联

*/

// controller.setMediaPlayer(videoView);

// videoView.setMediaController(controller);

}

@Override

protected void onPause() {

super.onPause();

handler.removeMessages(UPDATA_VIDEO_NUM);

}

@Override

protected void onDestroy() {

super.onDestroy();

handler.removeMessages(UPDATA_VIDEO_NUM);

}

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

// 判断当前屏幕的横竖屏状态

int screenOritentation = getResources().getConfiguration().orientation;

if (screenOritentation == Configuration.ORIENTATION_LANDSCAPE) {

//横屏时处理

setVideoScreenSize(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

volume_seek.setVisibility(View.VISIBLE);

volume_Image.setVisibility(View.VISIBLE);

screen_flag = false;

//清除全屏标记,重新添加

getWindow().clearFlags((WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN));

getWindow().addFlags((WindowManager.LayoutParams.FLAG_FULLSCREEN));

} else {

//竖屏时处理

setVideoScreenSize(ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dp2px(mContext,240));

screen_flag = true;

volume_seek.setVisibility(View.GONE);

volume_Image.setVisibility(View.GONE);

//清除全屏标记,重新添加

getWindow().clearFlags((WindowManager.LayoutParams.FLAG_FULLSCREEN));

getWindow().addFlags((WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN));

}

}

/**

* 通过handler对播放进度和时间进行更新

*/

private Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

if (msg.what == UPDATA_VIDEO_NUM) {

//获取视频播放的当前时间

int currentTime = videoView.getCurrentPosition();

//获取视频的总时间

int totally = videoView.getDuration();

//格式化显示时间

updataTimeFormat(totally_time_tv, totally);

updataTimeFormat(current_time_tv, currentTime);

//设置播放进度

play_seek.setMax(totally);

play_seek.setProgress(currentTime);

//自己通知自己更新

handler.sendEmptyMessageDelayed(UPDATA_VIDEO_NUM, 500);//500毫秒刷新

}

}

};

/**

* 设置横竖屏时的视频大小

*

* @param width

* @param height

*/

private void setVideoScreenSize(int width, int height) {

//获取视频控件的布局参数

ViewGroup.LayoutParams videoViewLayoutParams = videoView.getLayoutParams();

//设置视频范围

videoViewLayoutParams.width = width;

videoViewLayoutParams.height = height;

videoView.setLayoutParams(videoViewLayoutParams);

//设置视频和控制组件的layout

ViewGroup.LayoutParams videoLayoutLayoutParams= videoLayout.getLayoutParams();

videoLayoutLayoutParams.width = width;

videoLayoutLayoutParams.height = height;

videoLayout.setLayoutParams(videoLayoutLayoutParams);

}

/**

* 时间格式化

*

* @param textView 时间控件

* @param millisecond 总时间 毫秒

*/

private void updataTimeFormat(TextView textView, int millisecond) {

//将毫秒转换为秒

int second = millisecond / 1000;

//计算小时

int hh = second / 3600;

//计算分钟

int mm = second % 3600 / 60;

//计算秒

int ss = second % 60;

//判断时间单位的位数

String str = null;

if (hh != 0) {//表示时间单位为三位

str = String.format("%02d:%02d:%02d", hh, mm, ss);

} else {

str = String.format("%02d:%02d", mm, ss);

}

//将时间赋值给控件

textView.setText(str);

}

/**

* 按钮点击事件

*/

private void initViewOnClick() {

//播放按钮事件

play_controller_image.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//判断播放按钮的状态

if (videoView.isPlaying()) {

play_controller_image.setImageResource(R.mipmap.video_play_blue);

//视频暂停

videoView.pause();

//当视频处于暂停状态,停止handler的刷新

handler.removeMessages(UPDATA_VIDEO_NUM);

} else {

play_controller_image.setImageResource(R.mipmap.video_pause_white);

videoView.start();

//当视频播放时,通知刷新

handler.sendEmptyMessage(UPDATA_VIDEO_NUM);

}

}

});

//播放进度条事件

play_seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

@Override

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

//设置当前的播放时间

updataTimeFormat(current_time_tv, progress);

if (videoView.getDuration() == progress) {

play_controller_image.setImageResource(R.mipmap.video_play_blue);

}

}

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

//拖动视频进度时,停止刷新

handler.removeMessages(UPDATA_VIDEO_NUM);

}

@Override

public void onStopTrackingTouch(SeekBar seekBar) {

//停止拖动后,获取总进度

int totall = seekBar.getProgress();

//设置VideoView的播放进度

videoView.seekTo(totall);

//重新handler刷新

handler.sendEmptyMessage(UPDATA_VIDEO_NUM);

}

});

//音量控制条事件

volume_seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

@Override

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

//设置音量变动后系统的值

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);

}

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override

public void onStopTrackingTouch(SeekBar seekBar) {

}

});

//设置全屏按钮点击事件

screen_image.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

showLog("------当前屏幕标记----:"+screen_flag);

if(screen_flag){

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//控制屏幕竖屏

}else {

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//控制屏幕横屏

}

}

});

}

@Override

protected void initView() {

videoView = (CustomVideoView) findViewById(R.id.main_video);

videoLayout = (RelativeLayout) findViewById(R.id.act_testmovie_videolayout);

controllerLayout = (LinearLayout) findViewById(R.id.main_controller_liner);

play_seek = (SeekBar) findViewById(R.id.main_play_seek);

volume_seek = (SeekBar) findViewById(R.id.main_volume_seek);

current_time_tv = (TextView) findViewById(R.id.main_current_time);

totally_time_tv = (TextView) findViewById(R.id.main_totally_time);

play_controller_image = (ImageView) findViewById(R.id.play_pasue_image);

screen_image = (ImageView) findViewById(R.id.main_screen_image);

volume_Image = (ImageView) findViewById(R.id.act_testmovies_volume_image);

DisplayMetrics metric = new DisplayMetrics();

screen_width = metric.widthPixels;

screen_height = metric.heightPixels;

}

@Override

protected void initData() {

//获取设置音量的最大值

int volumeMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

volume_seek.setMax(volumeMax);

//获取设置当前音量

int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

volume_seek.setProgress(currentVolume);

}

}

补上CustomVideoView

public class CustomVideoView extends VideoView {

//声明屏幕的大小

int width = 1920;

int height = 1080;

public CustomVideoView(Context context) {

super(context);

}

public CustomVideoView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

public CustomVideoView(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

//设置宽高

int defaultWidth = getDefaultSize(width,widthMeasureSpec);

int defaultHeight = getDefaultSize(height,heightMeasureSpec);

setMeasuredDimension(defaultWidth,defaultHeight);

}

}

android 实现视频播放功能,android开发之简单视频播放器(VideoView)相关推荐

  1. android 实现视频播放功能,Android项目实现视频播放器

    本文实例为大家分享了Android项目实现视频播放器的具体代码,供大家参考,具体内容如下 VideoView控件是播放视频用的,借助它可以完成一个简易的视频播放器. ①在activity_main.x ...

  2. 文件管理器android实现,Android开发之简单文件管理器实现方法

    易采站长站为您分析Android开发之简单文件管理器实现方法,简单实现了Android的文件目录查看,文件重命名,打开,删除等功能,需要的朋友可以参考下 本文实例讲述了Android开发之简单文件管理 ...

  3. Android Studio——简单视频播放器

    1.界面分析 三个界面:主界面,视频列表界面,视频播放界面,如下图所示: 2.实现思路 (1)主界面设计 很简单,就一个背景和一个控件,然后为控件设置点击事件,然后跳转到视频列表界面 activity ...

  4. java如何开发视频软件_使用JAVA编写视频播放器

    Java因其跨平台优势而陷入困境. 当时,我以为"写一次,到处跑". 这听起来不错,它应该是所有语言开发的最终方法. Java必将统治世界. 事实证明当时我还太小. 所谓的鱼和熊掌 ...

  5. 安卓打开java文件管理器_Android开发之简单文件管理器实现方法

    本文实例讲述了Android开发之简单文件管理器实现方法.分享给大家供大家参考,具体如下: 这里运用Java I/O.ListActivity.Dialog.Bitmap等实现简单文件管理器,可以查看 ...

  6. android studio多媒体播放器,Android支持全屏、小窗口的视频播放器

    NiceVieoPlayer Android支持全屏.小窗口的视频播放器,完美实现全屏.小窗口播放切换 Features 用IjkPlayer/MediaPlayer + TextureView封装, ...

  7. 集音频和视频播放功能于一身的简易播放器

    <Win32_17>集音频和视频播放功能于一身的简易播放器 搜索源代码

  8. 【音视频零基础入门 1】视频播放器原理、流媒体协议、封装格式、视频编码、音频编码

    [音视频零基础入门 1]视频播放器原理.流媒体协议.封装格式.视频编码 一.视频播放器原理 1.1 解协议 1.2 解封装 1.3 解码 1.4 视音频同步 二.流媒体协议 三.封装格式 四.封装格式 ...

  9. linux音视频质量,linux好用的视频播放器

    想知道在Linux上应该使用哪种视频播放器吗?我们在这里列出了Linux发行版中可用的7款最佳开源视频播放器. 您可以在Linux上观看在线流媒体服务,但是在电脑上观看电影/电视连续剧或其他视频内容还 ...

最新文章

  1. python学习路线-Python学习路线
  2. MFC中滚动条slider和编辑框edit的联动
  3. CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下
  4. java max sum_杭电1024 Max Sum Plus Plus状压dp(java)
  5. 2017 JMP Discovery Summit China圆满落幕
  6. Springcloud整理
  7. mysql数据库常用备份、恢复命令
  8. 利用C++Builder自定义Windows窗体“系统菜单”
  9. sota和fota区别_汽车fota是什么意思
  10. 数据可视化(3)--Google Charts
  11. 经典机器学习系列(十四)PAC-Learning
  12. 遗传算法是一种进化算法_一种算法的少量更改可以减少种族主义的借贷
  13. 基于邮件推拉技术的数据库远程数据同步解决方案
  14. 使用OBS录屏神器,完美录制第二块屏幕。
  15. 魅族开售跳票,创饥饿营销新高度?
  16. Dw怎么背景图片设置
  17. hdu5442 后缀数组
  18. Chrome 添加【微信 / QQ】内置浏览器(解决 “请在微信客户端打开链接” 提示)
  19. 2022陈箫箫胡程灿信息论课程作业 MIMO信道(multi-input multi-output,MIMO)简介
  20. 字节跳动-飞书视频-测试开发面试题

热门文章

  1. 没有计算机网络适配器,WinXP没有网络适配器怎么添加?本地连接消失了如何恢复?...
  2. Ubuntu22.04编译Android切换Python2.7版本
  3. ESP32设备驱动-DS3231实时时钟(RTC)驱动
  4. WPF最新的电子书整理打包下载
  5. 人生苦短,为何一定要学Python?
  6. 刷脸支付技术的最大特征是能避免个人信息泄露
  7. 杜克大学计算机专业本科入学条件,杜克大学录取条件
  8. 100%完美解决 mac系统不能使用su命令问题 —— sudo和su的区别
  9. Java项目:医药进销存系统(java+SSM+JSP+Layui+jQuery+Maven+mysql)
  10. OSCAR开源大会 | 「开源学」:如何分门别类理解开源