CicadaPlayer icon indicating copy to clipboard operation
CicadaPlayer copied to clipboard

Android设备播放多音轨ts文件,无音频输出。对比Android中MediaPlayer通用API,缺失一些重要接口

Open cysyy opened this issue 5 years ago • 2 comments

单音轨文件播放正常,有音频输出。 多音轨文件播放无音频输出,并且手动设置音轨未生效。测试代码如下:

2B13A87D-BF14-430e-85C2-F28E8D3B7C7D

今天试着加到公司项目中,发现还需要处理很多通用功能,暂时放弃~ 对比原生MediaPlayer、ExoPlayer、IjkPlayer提供的API,CicadaPlayer主要缺少:

  • isPlaying() 是否正在播放,虽然可以通过其它手段判断,有会更方便

  • getCurrentPosition() 当前播放位置,虽然监听OnInfoListener可以得到,有会更方便

  • setVolume(float leftVolume, float rightVolume) 设置左声道、右声道音量,对于单音轨多声道的使用场景

  • getAudioSessionId() 播放器ID(The audio session ID is a system wide unique identifier for the audio stream played by this MediaPlayer instance.)做频谱、均衡器、重低音等需要参数

  • CicadaPlayer已经有了设置速率setSpeed()方法,而设置音调setPitch()还没

目前对CicadaPlayer使用还不够深入,说法上有错误的地方还望指出~~~ 测试文件有点大,需要的话可以发邮箱 上午手点快了,所有多提了一次 ^_^

cysyy avatar May 27 '20 04:05 cysyy

isPlaying() 是否正在播放,虽然可以通过其它手段判断,有会更方便

以前我们有这个接口,后来觉得用处不大,删掉了

getCurrentPosition() 当前播放位置,虽然监听OnInfoListener可以得到,有会更方便

原来有此接口,但是我们认为这个接口设计的不够合理,首先在seeking的时候播放器的position可能不准确,提供此接口可能导致进度条错乱的问题,更大的问题是很多开发者会启动一个线程去不停的调用此接口,即使另外一个线程把播放器都释放掉了也不管,会造成程序崩溃,然后报很多bug过来,我们遇到的这个问题非常多,所以改成现在这个逻辑,改成目前的方案后此问题没再出现,所以这个接口以后也不会去加,如果想要此接口只能自己封装一下,这样即使崩溃了也能明显的看到不是播放器sdk的问题。

setVolume(float leftVolume, float rightVolume) 设置左声道、右声道音量,对于单音轨多声道的使用场景

此接口是沿用的系统播放的接口,目前Android平台最多支持两个声道的播放,对于更多声道也会混成两个声道进行播放。

getAudioSessionId() 播放器ID(The audio session ID is a system wide unique identifier for the audio stream played by this MediaPlayer instance.)做频谱、均衡器、重低音等需要参数

目前Android平台是可以提供此接口的,因为目前播放器播放音频使用的是audiotrack,目前使用该接口的原因是要兼容一下4.x的Android设备,现在播放器有不再支持4.x的版本的计划,这样播放很大可能将使用opensl接口,不再使用audiotrack,因为audiotrack需要jni,效率低。这样将无法提供此接口,如果需要做均衡器,CicadaPlayer更倾向于将均衡器参数直接传递给播放器去处理,目前系统提供的5段均衡器其实能力很一般,CicadaPlayer后面将提供更强的均衡器。如果是做频谱,可以使用pcm数据回调接口去绘制,这样全平台的接口也可以统一了。

CicadaPlayer已经有了设置速率setSpeed()方法,而设置音调setPitch()还没

此功能目前确实没有,因为没有遇到这个需求,加这个工作量应该很低,可以排到计划里

pingkai avatar May 27 '20 05:05 pingkai

目前CicadaPlayer还是定位于网络播放的,所以对这种多音轨的文件,还没有去支持,目前的多语言切换是针对hls 或者未来要支持的dash协议的。

不过目前的架构支持这个应该比较简单,可以加入钉钉群,传文件,交流也比较方便

pingkai avatar May 27 '20 05:05 pingkai