MediaPlayer和AudioTrack播放Audio的区别与联系

2025-03-06 22:17:03
推荐回答(2个)
回答1:

播放声音可以用MediaPlayer和AudioTrack,两者都提供了java API供应用开发者使用。虽然都可以播放声音,但两者还是有很大的区别的。
其中最大的区别是MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等。MediaPlayer会在framework层创建对应的音频解码器。
而AudioTrack只能播放已经解码的PCM流,如果是文件的话只支持wav格式的音频文件,因为wav格式的音频文件大部分都是PCM流。AudioTrack不创建解码器,所以只能播放不需要解码的wav文件。

当然两者之间还是有紧密的联系的,MediaPlayer在framework层还是会创建AudioTrack,把解码后的PCM数流传递给AudioTrack,AudioTrack再传递给AudioFlinger进行混音,然后才传递给硬件播放。
所以是MediaPlayer包含了AudioTRack。
通过查看API可以知道,MediaPlayer提供了5个setDataSource方法,分为三类,一类是传递播放文件的字符串路径作为参数,例如直接取sd卡里mp3文件的路径,一类是传递播放文件的FileDescriptor文件描述符作为播放的id,例例如从db中查询的音频文件的id,就可以直接赋给MediaPlayer进行播放。还有一类是Uri类型的资源文件,用于播放content uri文件。

回答2:

  • MediaPlayer

  1. 定义

    媒体播放器,又称媒体播放机,通常是指电脑中用来播放多媒体的播放软件,把解码器聚集在一起,产生播放的功能。

  2. 发展领域

    一些广告画面的播放器也可称为媒体播放器,如分众传媒的视频媒体播放器、众普传媒的镜面媒体播放器等;公交电视同样是一种媒体播放器。

  3. 类型

    flash播放器,自动图片播放器 V1.8。

  4. 功能

    指定目录可以显示出该目录下的所有类型的图片文件包括jpg,gif,jpeg,png,bmp等格式。

  • AudioTrack

  1. 定义

    AudioTrack主要是用来播放声音的。

  2. 功能

    AudioTrack贯穿了Java层,JNI层和Native层。

  3. 原理

    MediaPlayer在framework层还是会创建AudioTrack,把解码后的PCM数流传递给AudioTrack,AudioTrack再传递给AudioFlinger进行混音,然后才传递给硬件播放,所以是MediaPlayer包含了AudioTRack。

  • 两者区别

  1. MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等。

  2. MediaPlayer会在framework层创建对应的音频解码器。

  3. AudioTrack只能播放已经解码的PCM流,如果是文件的话只支持wav格式的音频文件,因为wav格式的音频文件大部分都是PCM流。

  4. AudioTrack不创建解码器,所以只能播放不需要解码的wav文件。