安装系统时若分配有系统保留分区需先设置驱动器号-battleye launcher

androidmediaplayer
2023年4月3日发(作者:电脑经常死机是什么原因)

android使⽤surfaceview+MediaPlayer播放视频

Android中播放视频主要有两种⽅式:

使⽤其⾃带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型

使⽤android⾃带的VideoView,这种⽅法太简单就不介绍了

使⽤SurfaceView+MediaPlayer,这种⽅式效果⽐较好,这⾥也重点介绍

SurfaceView从android1.0就有了,⼗分好⽤。⼀般来说,UI对刷新都需要在UI线程中完成,但是,surfaceview可以在⾮UI线程中完成刷新。这样以来就很⽅便了,⽐如在线播放,就不需要⾃⼰去写

handler来实现两个线程之间的通信了,直接可以在⾮UI线程中播放视频。

步骤:

1、调⽤aSource()⽅法设置要播放的资源,可以是⽂件、⽂件路径、或者URL。

2、调⽤play(holder)设置surfaceHolder,surfaceHolder可以通过surfaceview的getHolder()⽅法获得。

3、调⽤e()来准备。

4、调⽤()来播放视频。

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

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

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

ck{

@Override

publicvoidsurfaceCreated(SurfaceHolderholder){

}

@Override

publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){

}

@Override

publicvoidsurfaceDestroyed(SurfaceHolderholder){

}

}

surfaceCreated()会在SurfaceHolder被创建的时候回调,在这⾥可以做⼀些初始化的操作,surfaceDestroyed()会在SurfaceHolder被销毁的时候回调,在这⾥可以做⼀些释放资源的操作,防⽌内存泄

漏。

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

@Override

publicvoidsurfaceCreated(SurfaceHolderholder){

play(holder);

}

下⾯贴上具体代码:

publicclassVideoActivityextendsActivity{

privateSurfaceViewsurfaceView;

privateMediaPlayerplayer;

privateSurfaceHolderholder;

privateProgressBarprogressBar;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

te(savedInstanceState);

setContentView(eview_item);

surfaceView=(SurfaceView)findViewById(eView);

progressBar=(ProgressBar)findViewById(ssBar);

//视频链接可能已失效

Stringuri="/77613075/4?sdtfrom=v1001&type=mp4&vkey=23289E4B8D0F4B6CF18703222DFD0038845D8F56A75EEC20D5D4FDE678093D9AB211EFD7F4C99E5A612A96A04F46CEEB483628CFFBEA493D3

player=newMediaPlayer();

try{

aSource(this,(uri));

holder=der();

lback(newMyCallBack());

e();

reparedListener(aredListener(){

@Override

publicvoidonPrepared(MediaPlayermp){

ibility(BLE);

();

ping(true);

}

});

}catch(IOExceptione){

tackTrace();

}

}

ck{

@Override

publicvoidsurfaceCreated(SurfaceHolderholder){

play(holder);

}

@Override

publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){

}

@Override

publicvoidsurfaceDestroyed(SurfaceHolderholder){

}

}

}

xml⽂件:

<?xmlversion="1.0"encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/surfaceView"

android:layout_width="match_parent"

android:layout_height="400dp"/>

android:id="@+id/progressBar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"/>

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"/>

以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

更多推荐

androidmediaplayer