音频播放器是否可以输出到两个数据接收器?

更具体地说,我正在尝试使用音频播放器将网络上的mp3流(其数据源设置为uri)传输到缓冲区和输出混合。现在,我将音频播放器的接收器设置为仅混合输出,因此当预取说有足够的数据时,我能够流传输此文件并播放它,但我也想将流传输的数据放到同一缓冲区中时间。

最佳答案

答案是否定的,但是有办法解决。

我没有意识到,当您创建一个音频播放器并使用其输出到缓冲区队列和一个接收器作为uri时,它会在获取数据时以最快的速度播放到缓冲区。

因此,当我意识到这是正在发生的事情时,我创建了另一个音频播放器,该播放器具有一个缓冲队列作为源,而输出混合作为接收器。

一切设置完成后,我暂停第一个音频播放器(uriPlayer),该播放器开始“下载”并将数据流式传输到缓冲区。当uriPlayer的预取说有足够的数据时,我检查uriPlayer的“持续时间”以找出歌曲的长度,然后我根据持续时间和采样创建一个缓冲区,该缓冲区足以容纳uriPlayer的pcm数据速率(和输出通道,立体声为2,单声道为1)。

我将此缓冲区排队到uriPlayers接收器缓冲区队列中,然后将uriPlayers状态设置为Play,以便它开始将所有数据加载到其缓冲区队列中的缓冲区中。

然后,我将该相同缓冲区放入第二个播放器(musicPlayer)源缓冲区,并将其状态也设置为Play,这将开始在其缓冲区队列中播放该缓冲区。

只要uriPlayer可以比音乐播放器从缓冲区播放音乐下载内容的速度更快,只需从uriPlayer调用getPosition即可找出歌曲当前在流中的位置以及位置musicPlayer是否“在前”当前正在播放,一切正常!如果下载速度变慢或太慢,请在musicPlayer超过uriPlayer之前暂停它。

关于android - openl中的音频播放器可以输出到两个数据接收器吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14394457/

10-09 06:51
查看更多