Android语言基础教程(190)Android多媒体应用播放音频与视频之使用MediaPlayer和SurfaceView播放视频:别再说Android视频开发难了!MediaPlayer+Sur

用手机看视频已经是家常便饭,但自己动手开发一个视频播放器却让不少Android开发者头疼。其实,掌握正确的方法后,你会发现它比你想象中简单得多。

01 SurfaceView与MediaPlayer的完美搭档

在Android系统中,播放视频主要有两种方式:一是使用系统自带的播放器,二是使用VideoView,但效果最好的还是SurfaceView+MediaPlayer的组合

那么,为什么需要SurfaceView和MediaPlayer两者合作呢?

这就像看电视一样,SurfaceView是电视机屏幕,负责显示画面;MediaPlayer则是DVD播放机,负责解码和播放视频流。

单独的MediaPlayer只能播放音频文件,要想播放视频还需要SurfaceView来配合显示画面。

SurfaceView从Android 1.0就有了,它有一个独特的优势:可以在非UI线程中完成刷新。这样一来,在播放视频时就不需要自己去写handler来实现两个线程之间的通信了。

这种显示与控制分离的机制使得SurfaceView只负责显示画面,而不负责控制视频流,因此还需要SurfaceHolder来控制视频流。

02 MediaPlayer的生命周期与状态管理

想要熟练使用MediaPlayer,首先必须理解它的生命周期。MediaPlayer有一套非常明确的状态转换规则,了解这些状态对于正确使用MediaPlayer至关重要。

从MediaPlayer的生命周期图,可以看出使用MediaPlayer不是很复杂。

最简单的流程:初始化->reset()->setDataSource()->prepare()->start()->……只要简单的几步,就可以播放音频文件了。

当创建MediaPlayer对象时,它处于Idle(空闲)状态;调用setDataSource()方法后,MediaPlayer进入Initialized(已初始化)状态

接着,调用prepare()或prepareAsync()方法使MediaPlayer进入Prepared(已准备)状态,此时可以调用start()方法开始播放。

在播放过程中,可以通过pause()方法暂停播放,进入Paused(已暂停)状态,再调用start()方法又会回到播放状态。

当播放完成后,MediaPlayer进入PlaybackCompleted(播放完成)状态,此时可以通过seekTo()方法重新定位到某个位置并再次播放。

最后,当不再需要MediaPlayer时,必须调用release()方法释放相关资源,否则会造成内存泄漏。

03 一步步构建Android视频播放器

了解了基本概念后,让我们实际动手构建一个完整的视频播放器。

基本布局设计

首先,我们需要设计一个简单的界面,包含一个SurfaceView和几个控制按钮:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="match_parent"
        android:layout_height="400dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_Play"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="播放" />

        <Button
            android:id="@+id/btn_Pause"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="暂停" />

        <Button
            android:id="@+id/btn_Stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="停止" />

    </LinearLayout>
</LinearLayout>

初始化MediaPlayer与SurfaceHolder

接下来,在Activity中初始化MediaPlayer和SurfaceView:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值