Android多媒体开发

Android多媒体开发系列文章

  1. Android多媒体开发:录音机
  2. Android多媒体开发:照相机
  3. TextureView+MediaPlayer实现在线短视频播放
  4. Android多媒体开发:第三方框架

一、什么是多媒体

  • 多媒体(duō méi tǐ) 的英文单词是Multimedia,它由media和multi两部分组成。一般理解为多种媒体的综合

  • 多媒体是计算机和视频技术的结合,实际上它是两个媒体;声音和图像,或者用现在的术语:音响和电视。

  • 多媒体(Multimedia),在计算机系统中,组合两种或两种以上媒体的一种人机交互式信息交流和传播媒体

  • 使用的媒体包括文字、图片、照片、声音 (包含音乐、语音旁白、特殊音效)、动画和影片,以及程式所提供的互动功能

  • 多媒体是超媒体(Hypermedia)系统中的一个子集,而超媒体系统是使用超链接 (Hyperlink)构成的全球信息系统

  • 全球信息系统是因特网上使用 TCP/IP 协议和 UDP/IP 协议

二、音乐播放器

Android 官方提供了MediaPlayer 核心类,用于播放音乐,其状态流程如下图所示。MediaPlayer 必须严格按照状态图操作,否则就会出现错误,这些错误都是底层抛出,严格按照状态图操作的话一般就不会出问题。

MediaPlayer,原生的API,可以播放音视频,但是支持的格式比较少,实际开发中用的比较少,但是还是很有必要学习,熟悉API,因为Vitamio框架的API大部分跟原生的API是一样的

1、MediaPlayer使用流程图

这里写图片描述

2、MediaPlayer核心方法

方法 说明
create() 播放本地res/raw/目录下的资源
reset() 重置为初始状态
setAudioStreamType() 设置音乐格式,例如:AudioManager.STREAM_MUSIC
setDataSource() 设置音频源,本地网络资源均可
prepare() 播放前的准备工作
prepareAsync() 异步进行准备工作,播放网络音频的时候使用
start() 开始或恢复播放
pause() 暂停播放
stop() 停止播放
release() 释放资源
getDuration() 获取音乐最大长度(毫秒单位)
getCurrentPosition() 获取当前的播放进度
seekTo() 拖拽进度
setDisplay() 设置输出画面
setOnPreparedListener() 设置准备监听

 
为了演示MediaPlayer 的使用,我们需要提前准备一个mp3 文件放到sdcard 中

需求:制作一个播放器,能够播放/暂停/停止音乐文件,并且添加一个SeekBar(可以拖拽的ProgressBar),当音乐播放时SeekBar 也会不断的跟新当前的进度,当用户拖动SeekBar 时可以更改播放的进度

这里写图片描述

布局文件

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

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

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="play"
            android:text="播放"/>

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="pause"
            android:text="暂停"/>

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="stop"
            android:text="停止"/>

    </LinearLayout>

    <SeekBar
        android:id="@+id/sb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

代码实现

public class MainActivity extends Activity implements OnSeekBarChangeListener {
   

        private SeekBar     sb;
        private MediaPlayer player;
        private int         duration;
        // 播放器的几个状态
        private static final int PLAYING  = 1;// 播放状态
        private static final int PAUSING  = 2;// 暂停状态
        private static final int STOPPING = 3;// 停止状态
        private volatile     int CURRENT  = 0;// 当前状态
        private Timer timer;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            sb = (SeekBar) findViewById(R.id.sb);
            //设置拖动监听
            sb.setOnSeekBarChangeListener(this);
        }

        //播放
        public 
  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值