Firefly开源社区

基于android系统HIFI播放器开发

937

积分

20

威望

19

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
937
发表于 2014-9-30 11:50:31     
前言:
众所周知,android系统本身audio系统仅支持16bit采样精度及44.1KHZ采样频率。就是48KHZ的采样率也是经过android重采样过的,对于一般用户,这也许已经足够了,但对于HIFI级别来说。还有很大的提升空间,一个HIFI播放器,采样精度要到24bit,甚至32bit,采样频率要到192KHZ/177.6HZ。才是HIFI者们追求的目标。而原生android系统是无法做到。就算市面上热卖的所谓HIFI android手机,实际上也都是仅仅支持高码率解码,而标准码率输出,也就是说,虽说这些HIFI 手机能够播放24bit192KHZ的语音文件。但实际上在播放的时候也是做了重采样,衰减到16bit44,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以上就可以了。然后编译生成可执行的ffmpegffplay,然后呢?就是自己研究ffmpeg了 。Ffmpeg 可以解码编码多种格式,ffplayer 直接就是个播放器了。 下面的工作就是将需要的无损格式的解码抽离出来。做一个自己的hifiplayer。其实就是基于ffplayer做剪裁了。可参考extern/ffmpeg
三 音频流处理。
   Android用来播放pcmAudioTrack类。之后混音重采样都在这里面进行。如果我们要实现高码率(24bit192khz)就必须饶过AudioTrack,那倒了哪里呢》就到了alsa_aplay这里。Android还自带一个tinyplay 其实都是很类似的,这里就到了硬件抽象层了。
四 驱动ALSA
  Android 的音频驱动是基于ALSA的,驱动依据不同厂家是不一样的,驱动这里主要修改2个地方 PCM I2S 。本平台主要修改以下两个文件:rk29_pcm.c 与rk30_i2s.c 注意修改PCM驱动I2S驱动的采样精度与频率的支持参数。最后要做的就是coedec芯片驱动了。这个根据具体选择的codec芯片了
五 绕过audiotrack带来的问题。
   由于绕过了audiotrack,也就没有了android系统的音频流处理,没有了重采样,没有的混音,androidaudio efftct也没有作用了,最关键的是没有了混音,也就是说 在播放无损音乐时 ,按钮没声音了,原因是tinyalsa是对声音硬件独占了。没有释放硬件资源 系统使用的alsa_aplay在来申请硬件时 就申请不到了。没有完美的解决办法。那就只有在播放无损音乐时,禁止掉所有的系统声音了。另一个问题:没有频谱,音效?这个只能自己添加,怎么加?当然还是万能的ffmpeg
注:本文所述方式经过笔者验证,并已有实际产品。若有疑问请留言。
回复

使用道具 举报

937

积分

20

威望

19

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
937
发表于 2014-9-30 11:53:16     
沙发留给自己:lol
回复

使用道具 举报

2

积分

0

威望

0

贡献

吃瓜的群众

积分
2
发表于 2014-10-18 13:28:36     
楼主,留个联系方式聊下。1085882710@qq.com。家庭智能HIFI。
回复

使用道具 举报

937

积分

20

威望

19

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
937
发表于 2014-10-20 16:00:00     
可以联系我们的官方邮箱。teefirefly@gmail.com
回复

使用道具 举报

148

积分

3

威望

0

贡献

技术小白

积分
148
发表于 2014-12-10 10:53:46     
支持一个
回复

使用道具 举报

55

积分

0

威望

0

贡献

技术小白

积分
55
发表于 2016-10-24 13:42:18     
感觉跟android audio部分的 direct_output playback thread 线程干的事情一样。就是平板上如果插入hdmi,hdmi audio 估计是楼主说的无混音,无重采样的HIFI 了。
回复

使用道具 举报

147

积分

0

威望

0

贡献

技术小白

积分
147
发表于 2016-10-29 15:18:53     
mark下,之前考虑过类似的方案,只是对3288不熟悉,没有完成
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表