我不是罗大锤我不是罗大锤

我不是罗大锤

我不是罗大锤我不是罗大锤

我不是罗大锤

首页首页
分类分类
标签标签
友情链接友情
日记日记
开发中
博客仍在开发中。
Powered byNola
Android 播放多媒体文件Android 播放多媒体文件

Android 播放多媒体文件

&Android

允许评论

3 年前

Android在播放音频和视频方面做了相当不错的支持,它提供了一套较为完整的API。

一、播放音频

Android中播放音频文件一般使用 MediaPlayer 类来实现,它对多种格式音频文件提供了非常全面的控制方法,下表列出 MediaPlayer 类一些常用控制方法。

播放多媒体文件_1.png

首先要创建一个 MediaPlayer 对象,然后调用 setDataSource() 设置音频文件的路径,再调用 prepare() 方法使 MediaPlayer 进入准备状态,接下来调用 star() 方法就可以开始播放音频,调用 pause() 方法就会暂停播放,调用 reset() 方法就会停止播放。

在 activity_main.xml 新增三个按钮,分别对应播放、暂停、停止:

<LinearLayout ...>
    <Button
        android:id="@+id/play"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Play" />
    <Button
        android:id="@+id/pause"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Pause" />
    <Button
        android:id="@+id/stop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Stop" />
</LinearLayout>

提前准备好一个 MP3 音频放入 main/assets 目录。

class MainActivity : AppCompatActivity() {
    private val mediaPlayer = MediaPlayer()
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 初始化MediaPlayer对象
        initMediaPlayer()
        play.setOnClickListener {
            if(!mediaPlayer.isPlaying) {
                // 开始播放
                mediaPlayer.start()
            }
        }
        pause.setOnClickListener {
            if(mediaPlayer.isPlaying) {
                // 暂停播放
                mediaPlayer.pause()
            }
        }
        stop.setOnClickListener {
            if(mediaPlayer.isPlaying) {
                // 停止播放
                mediaPlayer.reset()
                initMediaPlayer()
            }
        }
    }
    
    private fun initMediaPlayer() {
        // 获取AssetManager实例,用于读取assets目录下任何资源
        val assetManager = assets
        // 将音频文件句柄打开
        val fd = assetManager.openFd("music.mp3")
        // 给MediaPlayer设置要播放的文件
        mediaPlayer.setDataSource(fd.fileDescriptor, 
            fd.startOffset, fd.length)
        // 播放前准备工作
        mediaPlayer.prepare()
    }
    
    override fun onDestroy() {
        super.onDestroy()
        // onDestroy中释放MediaPlayer资源
        mediaPlayer.stop()
        mediaPlayer.release()
    }
}

二、播放视频

播放视频主要使用 VideoView 类来实现,这个类将视频显示和控制集于一身,仅仅借助它 就可以完成一个简易视频播放器,VideoView 和 MediaPlayer 用法也比较类似,常用方法如下表所示。

VideoView 并不是一个万能的视频播放工具类,它在视频格式的支持以及播放效率方面都存在着较大的不足,所以如果仅仅使用 VideoView 就写出一个强大的视频播放器是不太现实的,但如果只是用于播放一些游戏的片头动画,或者某个应用的视频宣传,使用 VideoView 还是绰绰有余的。

播放多媒体文件_2.png

给 activity_main.xml 也设置三个按钮,分别对应播放、暂停、重新播放。另外在按钮下面又放置一个 VideoView,稍后的视频就显示在这里。这里就不展示 layout 代码。

VideoView 不支持直接播放 assets 目录下的视频资源,所以我们只能寻找其他的解决方案,res 目录下允许我们再创建一个 raw 目录,诸如音频、视频之类的资源文件也可以放在这里,并且 VideoView 是可以直接播放这个目录下的视频资源。

class MainAcivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 将video文件解析成Uri对象,Android固定写法
        val uri = Uri.parse("android.resource://$packageName/${R.raw.vide}")
        // 给VideoView指定视频Uri
        videoView.setVideoURI(uri)
        play.setOnClickListener {
            if(!videoView.isPlaying) {
                // 开始播放
                videoView.start()
            }
        }
        pause.setOnClickListener {
            if(videoView.isPlaying) {
                // 暂停播放
                videoView.pause()
            }
        }
        replay.setOnClickListener {
            if(!videoView.isPlaying) {
                // 重新播放
                videoView.resume()
            }
        }
    }
    
    override fun onDestroy() {
        super.onDestroy()
        // 释放VideoView资源
        videoView.suspend()
    }
}
目录
一、播放音频
二、播放视频
暂无评论