isle 发表于 2014-9-30 11:50:31

基于android系统HIFI播放器开发

前言:众所周知,android系统本身audio系统仅支持16bit采样精度及44.1KHZ采样频率。就是48KHZ的采样率也是经过android重采样过的,对于一般用户,这也许已经足够了,但对于HIFI级别来说。还有很大的提升空间,一个HIFI播放器,采样精度要到24bit,甚至32bit,采样频率要到192KHZ/177.6HZ。才是HIFI者们追求的目标。而原生android系统是无法做到。就算市面上热卖的所谓HIFI android手机,实际上也都是仅仅支持高码率解码,而标准码率输出,也就是说,虽说这些HIFI 手机能够播放24bit,192KHZ的语音文件。但实际上在播放的时候也是做了重采样,衰减到16bit,44,1KHZ了,为何?原因无他,android系统决定的。一 android audio系统: Android 的Audio系统这里不累赘,网上大把。这里介绍做HIFI播放器的几个关键地方。在原生的android系统中,有一个叫做StagefrightPlayer的默认播放器,基于omx框架。如果我们要做HIFI播放器的解码,也就是在这个地方做一个更它同等的播放器,以4.2为例。StagefrightPlayer位于frameworks/av/media/libmediaplayerservice/。那如何切换系统默认的StagefrightPlayer,到我们自己的HIFIPlayer。注意下frameworks/av/media/libmediaplayerservice/MediaPlayerFactory.cpp 。这个文件就是预先解析内容,寻找在合适的player。这里不多介绍,大家仔细看看,相信都能看明白。二 android hifi播放器:   我们需要在mediaplayerservice 这里添加自己的hifiplayer,要实现接口MediaPlayerInterface 这里我们的hifiplayer就需要一个关键性东西了 解码器。我们经常说到的无损音乐,如ape flac等。如何解码,这里就需要大名鼎鼎的ffmpeg了。Ffmpeg不了解?请自行百度。如何通过ffmped捣鼓出自己的解码器呢?这个就是需要一定的工作量了。首先请到ffmpeg下载源码 :http://ffmpeg.org/download.html#releases最好不要选择过旧的版本。1.2以上就可以了。然后编译生成可执行的ffmpeg和ffplay,然后呢?就是自己研究ffmpeg了 。Ffmpeg 可以解码编码多种格式,ffplayer 直接就是个播放器了。 下面的工作就是将需要的无损格式的解码抽离出来。做一个自己的hifiplayer。其实就是基于ffplayer做剪裁了。可参考extern/ffmpeg。三 音频流处理。   Android用来播放pcm的 AudioTrack类。之后混音重采样都在这里面进行。如果我们要实现高码率(24bit。192khz)就必须饶过AudioTrack,那倒了哪里呢》就到了alsa_aplay这里。Android还自带一个tinyplay 其实都是很类似的,这里就到了硬件抽象层了。四 驱动ALSAAndroid 的音频驱动是基于ALSA的,驱动依据不同厂家是不一样的,驱动这里主要修改2个地方 PCM 与I2S 。本平台主要修改以下两个文件:rk29_pcm.c 与rk30_i2s.c 注意修改PCM驱动I2S驱动的采样精度与频率的支持参数。最后要做的就是coedec芯片驱动了。这个根据具体选择的codec芯片了五 绕过audiotrack带来的问题。   由于绕过了audiotrack,也就没有了android系统的音频流处理,没有了重采样,没有的混音,android的audio efftct也没有作用了,最关键的是没有了混音,也就是说 在播放无损音乐时 ,按钮没声音了,原因是tinyalsa是对声音硬件独占了。没有释放硬件资源 系统使用的alsa_aplay在来申请硬件时 就申请不到了。没有完美的解决办法。那就只有在播放无损音乐时,禁止掉所有的系统声音了。另一个问题:没有频谱,音效?这个只能自己添加,怎么加?当然还是万能的ffmpeg。注:本文所述方式经过笔者验证,并已有实际产品。若有疑问请留言。

isle 发表于 2014-9-30 11:53:16

沙发留给自己:lol

kmlhust 发表于 2014-10-18 13:28:36

楼主,留个联系方式聊下。1085882710@qq.com。家庭智能HIFI。

isle 发表于 2014-10-20 16:00:00

可以联系我们的官方邮箱。teefirefly@gmail.com

Developer_X 发表于 2014-12-10 10:53:46

支持一个

buhui912 发表于 2016-10-24 13:42:18

感觉跟android audio部分的 direct_output playback thread 线程干的事情一样。就是平板上如果插入hdmi,hdmi audio 估计是楼主说的无混音,无重采样的HIFI 了。

csworld 发表于 2016-10-29 15:18:53

mark下,之前考虑过类似的方案,只是对3288不熟悉,没有完成
页: [1]
查看完整版本: 基于android系统HIFI播放器开发