安装系统时若分配有系统保留分区需先设置驱动器号-battleye launcher
![androidmediaplayer](/uploads/image/0572.jpg)
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
发布评论