使用SurfaceView+MediaPlayer视频播放
2017-12-10 16:20
483 查看
使用SurfaceView+MediaPlayer,这种方式效果比较好,这里也重点介绍
SurfaceView从android 1.0就有了,十分好用。一般来说,UI对刷新都需要在UI线程中完成,但是,surfaceview可以在非UI线程中完成刷新。这样以来就很方便了,比如在线播放,就不需要自己去写handler来实现两个线程之间的通信了,直接可以在非UI线程中播放视频。
步骤:
调用player.setDataSource()方法设置要播放的资源,可以是文件、文件路径、或者URL。
调用MediaPlayer.setDisplay(holder)设置surfaceHolder,surfaceHolder可以通过surfaceview的getHolder()方法获得。
调用MediaPlayer.prepare()来准备。
调用MediaPlayer.start()来播放视频。
SurfaceView从android 1.0就有了,十分好用。一般来说,UI对刷新都需要在UI线程中完成,但是,surfaceview可以在非UI线程中完成刷新。这样以来就很方便了,比如在线播放,就不需要自己去写handler来实现两个线程之间的通信了,直接可以在非UI线程中播放视频。
步骤:
调用player.setDataSource()方法设置要播放的资源,可以是文件、文件路径、或者URL。
调用MediaPlayer.setDisplay(holder)设置surfaceHolder,surfaceHolder可以通过surfaceview的getHolder()方法获得。
调用MediaPlayer.prepare()来准备。
调用MediaPlayer.start()来播放视频。
public class VideoActivity extends AppCompatActivity { private SurfaceView surfaceView; private MediaPlayer player; private SurfaceHolder holder; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video); surfaceView = (SurfaceView) findViewById(R.id.surfaceView); progressBar= (ProgressBar) findViewById(R.id.progressBar); //视频链接可能已失效 String uri="http://pic.ibaotu.com/00/34/35/51S888piCamj.mp4_10s.mp4"; player=new MediaPlayer(); try { player.setDataSource(this, Uri.parse(uri)); holder=surfaceView.getHolder(); holder.addCallback(new MyCallBack()); player.prepare(); player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { progressBar.setVisibility(View.INVISIBLE); player.start(); player.setLooping(true); } }); } catch (IOException e) { e.printStackTrace(); } } private class MyCallBack implements SurfaceHolder.Callback { @Override public void surfaceCreated(SurfaceHolder holder) { player.setDisplay(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } } }
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.mediaplayer.VideoActivity"> <SurfaceView android:id="@+id/surfaceView" android:layout_width="match_parent" android:layout_height="400dp" /> <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> <TextView android:id="@+id/numText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="3dp" android:layout_gravity="bottom|left" android:text="1" android:textSize="30dp" android:textColor="#f00"/> </android.support.constraint.ConstraintLayout>
相关文章推荐
- 使用IjkMediaPlayer结合surfaceView播放视频,自己写的播放和暂停按钮(四)
- 使用mediaplayer + surfaceview来播放视频
- Android中使用surfaceview+MediaPlayer播放视频
- Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频
- android下面使用SurfaceView+ mediaPlayer播放视频
- 使用SurfaceView+MediaPlayer+SeekBar实现视频播放
- 使用mediaplayer + surfaceview来播放视频
- android中使用surfaceview+MediaPlayer播放视频
- Android 使用 MediaPlayer + SurfaceView 播放视频
- Android MediaPlayer+SurfaceView播放视频(附Demo)
- android播放视频(三)利用原生的MediaPlayer+SurfaceView之提高
- SurfaceView+MediaPlayer视频播放并用SharedPreferences实现暂停功能
- android视频播放(二) 利用android原生的MediaPlayer+SurfaceView
- Android SurfaceView+MediaPlayer 播放本地raw文件夹下的视频
- SurfaceView+MediaPlayer 播放视频 锁屏 没有画面等各种问题的解决方案。
- Android MediaPlayer+SurfaceView播放视频 (异常处理)
- Android - SurfaceView+MediaPlayer、VideoView 2种方法播放视频
- Android 视频播放之MediaPlayer+SurfaceView
- android开发SurfaceView+MediaPlayer实现视频播放
- Android - SurfaceView + MediaPlayer实现分段视频无缝播放