我们知道android本身播放视频的的能力是有限的。。先来一个Demo

另附我的一个还未成熟的播放器,下载地址:http://www.eoemarket.com/soft/370334.html,正在完善中

package cn.marsXTU.mediaplayer;import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.Toast;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.app.Activity;/*** 1.确保在音乐能播放的情况下,进行功能增强* @author hjl**/
public class MainActivity extends Activity implements OnSeekBarChangeListener, OnCompletionListener {private boolean isStopUpdatingProgress=false;private EditText etPath;private MediaPlayer mMediapPlayer;private SeekBar mSeekbar;private TextView tvCurrentTime;private TextView tvTotalTime;private final int NORMAL=0;//闲置private final int PLAYING=1;//播放中private final int PAUSING=2;//暂停private final int STOPING=3;//停止中private  int currentstate=NORMAL;//播放器当前的状态,默认是空闲状态//用行动打消忧虑private SurfaceHolder holder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);etPath=(EditText)findViewById(R.id.et_path);mSeekbar=(SeekBar) findViewById(R.id.sb_progress);tvCurrentTime=(TextView)findViewById(R.id.tv_current_time);tvTotalTime=(TextView)findViewById(R.id.tv_total_time);mSeekbar.setOnSeekBarChangeListener(this);SurfaceView mSurfaceView=(SurfaceView) findViewById(R.id.surfaceview);holder=mSurfaceView.getHolder();//SurfaceView帮助类对象//是采用自己内部的双缓冲区,而是等待别人推送数据holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}/*** 开始* @param v*/public void start(View v){if(mMediapPlayer!=null){if(currentstate!=PAUSING){mMediapPlayer.start();currentstate=PLAYING;isStopUpdatingProgress=false;//每次在调用刷新线程时,都要设为falsereturn ;//下面这个判断完美的解决了停止后重新播放的,释放两个资源的问题 }else if(currentstate==STOPING){mMediapPlayer.reset();mMediapPlayer.release();}}play();}/*** 停止* @param v*/public void stop(View v){if(mMediapPlayer!=null){mMediapPlayer.stop();}}/*** 播放输入框的文件*/private void play(){String path=etPath.getText().toString().trim();mMediapPlayer=new MediaPlayer();try {//设置数据类型mMediapPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置以下播放器显示的位置mMediapPlayer.setDisplay(holder);mMediapPlayer.setDataSource(path);mMediapPlayer.prepare();mMediapPlayer.start();mMediapPlayer .setOnCompletionListener(this);//把当前播放器的状诚置为:播放中currentstate=PLAYING;//把音乐文件的总长度取出来,设置给seekbar作为最大值int duration=mMediapPlayer.getDuration();//总时长mSeekbar.setMax(duration);//把总时间显示textView上int m=duration/1000/60;int s=duration/1000%60;tvTotalTime.setText("/"+m+":"+s);tvCurrentTime.setText("00:00");isStopUpdatingProgress=false;new Thread(new UpdateProgressRunnable()).start();}catch(Exception e) {e.printStackTrace();}}/*** 暂停* @param v*/public void pause(View v){if(mMediapPlayer!=null&¤tstate==PLAYING){mMediapPlayer.pause();currentstate=PAUSING;isStopUpdatingProgress=true;//停止刷新主线程}}/*** 重播* @param v*/public void restart(View v){if(mMediapPlayer!=null){mMediapPlayer.reset();mMediapPlayer.release();play();}}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {isStopUpdatingProgress=true;//当开始拖动时,那么就开始停止刷新线程}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {int progress=seekBar.getProgress();//播放器切换到指定的进度位置上mMediapPlayer.seekTo(progress);isStopUpdatingProgress=false;new Thread(new UpdateProgressRunnable()).start();}/*** 当播放完成时回调此方法*/@Overridepublic void onCompletion(MediaPlayer mp) {Toast.makeText(this, "播放完了,重新再播放", 0).show();mp.start();}/*** 刷新进度和时间的任务* @author hjl**/class  UpdateProgressRunnable implements Runnable{@Overridepublic void run() {//每隔1秒钟取一下当前正在播放的进度,设置给seekbarwhile(!isStopUpdatingProgress){//得到当前进度int currentPosition=mMediapPlayer.getCurrentPosition();mSeekbar.setProgress(currentPosition);final int m=currentPosition/1000/60;final int s=currentPosition/1000%60;//此方法给定的runable对象,会执行主线程(UI线程中)runOnUiThread(new Runnable(){@Overridepublic void run() {tvCurrentTime.setText(m+":"+s);}});SystemClock.sleep(1000);}}}}

使用Mediaplay类写一个播放器相关推荐

  1. 从0开始写一个播放器系列-开篇

    从0开始写一个播放器系列-开篇 阅读本系列博客所需要具备的知识: js, ts , canvas Api , DOM, webpack, 不懂也没有太大的关系, 我会捎带着写出来, 剩下的自行百度 第 ...

  2. 用qt帮我写一个播放器,要求实时解码h264

    好的,我来帮你写一个基于 Qt 的播放器,它可以实时解码 H.264 视频流. 首先,你需要安装 Qt 开发环境和相关工具,然后打开 Qt Creator 创建一个新项目.在新项目中,你需要添加一些代 ...

  3. FFmpegSDL教程:用不到1000行代码写一个播放器

    序 更新:本教程最近一次更新于2015年2月. FFmpeg是一个创建视频应用,甚至更通用程序的强大音视频工具库.FFmpeg能够完成视频处理过程中解码,编码,封装和解封装所有这些棘手工作.借助它,可 ...

  4. 免费音乐接口,当时写音乐播放器没资源,今天特意用nodejs写了一个,并布署到了cloudfo......

    2019独角兽企业重金招聘Python工程师标准>>> 接口首地址为ttpod.cloudfoundry.com 音乐搜索接口为ttpod.cloudfoundry.com/musi ...

  5. 制作一个播放器(二)

    制作一个播放器(一) 制作一个播放器(二) 接着上一章的热身,咱们继续写播放器.上一篇中咱们用的是句柄的方式来播放视频.实际开发中,我们更多的是把数据给回调出来,这样更好的去显示视频,处理视频.这期, ...

  6. 使用纯css做一个播放器

    首先,贴出成品图,如下: 可以发现播放器的基本形状有了,但是需要精确到每一个方向,不能溢出,就得以如下的方式写,贴出静态代码: html如下: <!DOCTYPE html> <ht ...

  7. 易语言用多文件对话框写MP3播放器

    利用多文件对话框和超级列表框,示范了一个本地MP3播放器. 视频链接: 511遇见易语言教程 教程源码: .版本 2 .支持库 iext .支持库 xplib.程序集 窗口程序集_启动窗口.子程序 _ ...

  8. 用Pyqt5写一个视频播放器

    用Pyqt5写一个视频播放器 编写方式: Qt Designer设计,pyuic5转化为.py文件. 播放器效果: 代码链接:https://github.com/GRF-Sunomikp31/Qt_ ...

  9. C#——窗体程序声明一个播放器接口IPlayer,包含5个接口方法:播放、停止、暂停、上一首和下一首。

    声明一个播放器接口IPlayer,包含5个接口方法:播放.停止.暂停.上一首和下一首.设计一个窗体程序,在该程序中定义一个MP3播放器类和一个AVI播放器类,以实现该接口,最后创建相应类的实例测试程序 ...

  10. 声明一个播放器接口IPlayer,包含5个接口方法:播放、停止、暂停、上一首和下一首。

    声明一个播放器接口IPlayer,包含5个接口方法:播放.停止.暂停.上一首和下一首.设计一个Windows应用程序,在该程序中定义一个MP3播放器类和一个AVI播放器类,以实现该接口,最后创建相应类 ...

最新文章

  1. Delphi 之Copyrect的使用
  2. 图形处理(六)拖拽式网格融合-Siggraph 2010
  3. after oracle alter,关于数据库级ALTER的触发器
  4. python获取剪切板内容_如何从python中读取(windows)剪贴板中的文本?
  5. 代码实现两个数交换方法
  6. python数据类型之元组类型
  7. Java转换难题者,不适合工作(或面试)
  8. 最小权顶点覆盖问题分析
  9. 三种分布式锁 简易说说(包含前一篇提到的redis分布式锁)
  10. Valine魔改教程——添加自定义表情和QQ头像
  11. PostgreSQL 生成空间热力图
  12. 总结了Mybatis,原来知识点也没多少嘛
  13. 任天堂服务器维护11.2,switch11.0.0版本更新内容汇总 NS11.0.0更新维护公告
  14. vmware不支持linux,vmware不支持opengl
  15. NoSQL之Redis配置与数据库常用命令
  16. JS基础—移动端网页特效
  17. 百度地图API获取某个行政区
  18. openwrt - 入门( uHTTPd, opkg, uci, luci, mtd等)
  19. GitHub 上标星 115k+ 的 Java 教程
  20. 卷起来了!往届最快1.5个月完成见刊检索的IEEE学术会议

热门文章

  1. 单例模式懒汉Java_java 单例模式(懒汉式与饿汉式)
  2. 随手记_常用coding软件的快捷键-clion/vs code/vs/kdevelop
  3. base/7/x86_64/filelists_db FAILED
  4. winform npoi 将execl转换成datatable,导入数据库
  5. 04.如何升级扩展以支持Visual Studio 2019
  6. Ehcache 3.7文档—基础篇—XML Configuration
  7. 喵哈哈村的魔法考试 Round #14 (Div.2) 题解
  8. debian添加快捷启动方式
  9. 网络监听Network Daemon(Android Netd)架构和源码分析网络监听
  10. 七言 感大兴安岭大火