surfaceview+mediaplayer
2024-10-20 16:13:43
public class VideosurfaceView extends SurfaceView implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener {
private SurfaceHolder holder;
private MediaPlayer mediaPlayer;
public VideosurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
holder= getHolder();
holder.addCallback(this);
holder.setKeepScreenOn(true);
}
//设置路径并播放
public void playVideo(String patn){
if (mediaPlayer==null){
mediaPlayer=new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);
}
try {
//重置mediaplayer
mediaPlayer.reset();
//设置播放路径
//设置画面播放源
mediaPlayer.setDisplay(holder);
mediaPlayer.setDataSource(patn);
//准备播放
mediaPlayer.prepareAsync();
//开始播放
mediaPlayer.start();
mediaPlayer.isPlaying();
} catch (IOException e) {
e.printStackTrace();
}
}
// public void kuaijin(){
// int currentPosition = mediaPlayer.getCurrentPosition();
// currentPosition+=2000;
// mediaPlayer.seekTo(currentPosition);
//
// }
//停止播放
public void stop(){
if (mediaPlayer!=null){
if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
}else {
mediaPlayer.start();
}
}
}
//重新播放
public void replay(){
mediaPlayer.reset();
}
@Override
//当surface第一次创建的时候
public void surfaceCreated(SurfaceHolder holder) {
}
@Override
//当surface要改变的时候
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
//当surface要销毁的时候
public void surfaceDestroyed(SurfaceHolder holder) {
if (mediaPlayer!=null){
mediaPlayer.release();//释放资源
mediaPlayer=null;
}
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
mediaPlayer.isPlaying();
}
}
//在主函数里只需调用即可
public void onClick(View v) {
switch (v.getId()) {
case R.id.play_btn:
patn = Environment.getExternalStorageDirectory().getPath() + "/1508553914748.mp4";
// 获取外部存储目录
// 设置显示
video_view.setVisibility(View.VISIBLE);
// 设置路径
video_view.playVideo(patn);
break;
case R.id.pause_btn:
video_view.stop();
//video_view.kuaijin();
break;
case R.id.replay_btn:
video_view.playVideo(patn);
break;
}
}
最新文章
- XSS(跨站脚本攻击)的最全总结
- wordpress的创建
- hdu1507二分匹配
- 使用spring + cxf +tomcat构建webservice
- systemverilog interface
- Ajax与C#应用详细实例
- selenium + python 部署自动化测试环境
- javascript中自定义事件
- java里程碑之泛型--擦除和转换
- ionic页面间跳转的动画实现
- 第18月第10天 iOS11 uicollectionview
- Linux 部署 ASP.NET Core 的一些问题记录
- C语言结构体及typedef关键字定义结构体别名和函数指针的应用
- new operator
- maven工程下testng简单使用
- weblogic线程阻塞性能调优(图解)转
- vue.单选和多选,纯css自定义单选框样式
- noip2017行记
- 前端进阶之路:初涉Less
- [Bzoj3233][Ahoi2013]找硬币[基础DP]
热门文章
- IT之软件公司组织架构
- 【C学习笔记】day3-1 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
- C++ 中的匿名函数(lambda表达式)
- react toolkit 异步请求之后调取其他函数
- lowcodeEngine 组件面板的拖拽功能
- HIVE- INSERT 方法使用
- [3] ScanRefer论文精读 3DVisual Grounding开山之作
- ios打开第三方地图app
- Neural Network模型复杂度之Dropout - Python实现
- Science Word丨快速创建各种数学、物理、化学图形,让老师的工作更轻松!