基于现有C++端提供的API实现完善的Android 播放器SDK,并与知名的车载企业播放器集成,最终发布到某知名车企车载平台。
1.基于高通某高级车载芯片,视频采用硬解码
2.支持常见的播控功能,播放,暂停,倍速,SEEK
3.支持AudioFocus,音效渐进检出
4.支持使用统一API,支持多种歌词格式
5.支持企业定制的16声道音频播放
6.支持静态和动态音效的设置
7.支持前端组动态设置音效,后端设置成组内两个声道独立的声道音效设置
这个项目采用分层实现:
前端使用Facade层(统 入口:状态管理播放控制、音视频貝步 音频焦点管理歌词筒理,试看功能), 平台适配器层(NativeMediaPlayer(JNI), AudioPlayer, VideoPlayer), 底层库(C++代码库, AudioTrack, MediaCodec等)
整个项目在高压的情况下接受,一个月完成功能开发并提供了Demo。实际开发中,视频SEEK操作遇到很多问题,原因来之多方面,一方面用户的视频数据提供方式,另一方面Android 的相关API是企业内部定制版,再有原因高通硬解码没有足够的资料支持。SEEK的实现,起初一直有各种各样的问题,甚至会出现解码器崩溃的问题。结合网络上的资源,不停尝试组合各种API,同时在Android 工程的帮助下,分析底层日志,最终保证了SEEK功能,可以播放。后续跟后端C++开发工程师一起优化,SEEK的相应速度也有所提高。
基于MediaCodec 实现的渲染,音视频同步也经历了不少挑战,早期使用MediaCodec的延时渲染API,发现一直没有效果,后来改成sleep阻塞的方案,音视频同步问题解决了,但又出现画阻塞问题,不得已采用了异步渲染,这时又出现了音视频不同步问题,为解决这个问题,把渲染和解码分离,分别用不同的线程进行处理。