android使用surfaceview+MediaPlayer播放视频

概述android使用surfaceview+MediaPlayer播放视频 Android中播放视频主要有两种方式: 使用其自带的播放器.指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型 使用android自带的VideoView,这种方法太简单就不介绍了 使用SurfaceView+MediaPlayer,这种方式效果比较好,这里也重点介绍 SurfaceView从android 1.0就有了,十分好用.一般来说,UI对刷新都需要在UI线程中完成,但是,surfaceview可以在非UI线程中完成刷新.这样以来就很方便了,比如在线播

AndroID中播放视频主要有两种方式:

使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型使用androID自带的VIDeoVIEw,这种方法太简单就不介绍了使用SurfaceVIEw+MediaPlayer,这种方式效果比较好,这里也重点介绍

SurfaceVIEw从androID 1.0就有了,十分好用。一般来说,UI对刷新都需要在UI线程中完成,但是,surfacevIEw可以在非UI线程中完成刷新。这样以来就很方便了,比如在线播放,就不需要自己去写handler来实现两个线程之间的通信了,直接可以在非UI线程中播放视频。

步骤:

1、调用player.setDataSource()方法设置要播放的资源,可以是文件、文件路径、或者URL。
2、调用MediaPlayer.setdisplay(holder)设置surfaceHolder,surfaceHolder可以通过surfacevIEw的getHolder()方法获得。
3、调用MediaPlayer.prepare()来准备。
4、调用MediaPlayer.start()来播放视频。

这是大致步骤,但只有这些是不够的

在第二步之前需要确保surfaceHolder已经准备好了。因此需要给surfaceHolder设置一个callback,

调用addCallback()方法。Callback 有三个回调函数,如下:

SurfaceHolder.Callback {    @OverrIDe    public voID surfaceCreated(SurfaceHolder holder) {    }    @OverrIDe    public voID surfaceChanged(SurfaceHolder holder,int format,int wIDth,int height) {    }    @OverrIDe    public voID surfaceDestroyed(SurfaceHolder holder) {    }}

surfaceCreated()会在SurfaceHolder被创建的时候回调,在这里可以做一些初始化的 *** 作,surfaceDestroyed()会在SurfaceHolder被销毁的时候回调,在这里可以做一些释放资源的 *** 作,防止内存泄漏。

一般,会在surfaceCreated中给MediaPlayer设置surfaceHolder。

@OverrIDe    public voID surfaceCreated(SurfaceHolder holder) {      player.setdisplay(holder);    }

下面贴上具体代码:

public class VIDeoActivity extends Activity {  private SurfaceVIEw surfaceVIEw;  private MediaPlayer player;  private SurfaceHolder holder;  private Progressbar progressbar;  @OverrIDe  protected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.surfacevIEw_item);    surfaceVIEw = (SurfaceVIEw) findVIEwByID(R.ID.surfaceVIEw);    progressbar= (Progressbar) findVIEwByID(R.ID.progressbar);   //视频链接可能已失效   String uri="http://vIDeo.dispatch.tc.qq.com/77613075/x0021o8d3g3.mp4?sdtfrom=v1001&type=mp4&vkey=23289E4B8D0F4B6CF18703222DFD0038845D8F56A75EEC20D5D4FDE678093D9AB211EFD7F4C99E5A612A96A04F46CEEB483628CFFBEA493D3AADBFCB81A540F7A92193874192FA0F70D1099DF330B2B419D45736554CB9BB3435019C985F530C5960E4B20FEBD5FAED17DC9F1FCE1C73&platform=10902&fmt=auto&sp=350&guID=1175defd049d3301e047ce50d93e9c7a";    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 height) {    }    @OverrIDe    public voID surfaceDestroyed(SurfaceHolder holder) {    }  }}

xml文件:

<?xml version="1.0" enCoding="utf-8"?><FrameLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent">  <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"/></FrameLayout>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

总结

以上是内存溢出为你收集整理的android使用surfaceview+MediaPlayer播放视频全部内容,希望文章能够帮你解决android使用surfaceview+MediaPlayer播放视频所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存