有没有办法让和音频播放器输出到两个数据接收器?
更具体地说,我正在尝试使用音频播放器从网络上流式传输一个mp3,将数据源设置为uri,并将其传输到缓冲区和输出mix。现在我已经将音频播放器的接收器设置为输出混合,所以我可以流式传输这个文件,并在预取表明有足够的数据时播放它,但我也想同时将这些流式传输的数据放入缓冲区中。
发布于 2013-01-18 16:54:19
答案是否定的,但有一种方法可以绕过这一点。
我没有意识到,当你创建一个音频播放器,并输出到一个缓冲队列,一个接收器作为一个uri,它播放到缓冲区的速度与它获得数据的速度一样快。
所以当我意识到这就是发生的事情时,我创建了另一个音频播放器,它有一个缓冲队列作为源,输出mix作为接收器。
在一切都设置好之后,我暂停了第一个音频播放器(uriPlayer),它启动“下载”并将数据流式传输到一个缓冲区。当uriPlayer的预取表明有足够的数据时,我检查uriPlayer的“持续时间”以找出歌曲有多长,然后根据持续时间和采样率(以及输出通道,对于立体声为2,对于单声道为1),创建一个足够大的缓冲区来保存来自uriPlayer的pcm数据。
我将这个缓冲区排入uriPlayers接收器缓冲区队列,然后将uriPlayers状态设置为Play,这样它就开始将所有数据加载到其缓冲区队列中的缓冲区中。
然后,我将这个相同的缓冲区排入第二个播放器(musicPlayer)源缓冲区,并将其状态设置为Play,这将开始在其缓冲区队列中播放缓冲区。
只要uriPlayer下载音乐文件的内容比音乐播放器从缓冲区中播放的速度更快,只需从uriPlayer调用getPosition来找出它当前在歌曲中的哪个位置流媒体,以及它是否在musicPlayer当前播放的位置“前面”,一切都会完美地工作。如果下载速度变慢或太慢,只要在uriPlayer之前暂停musicPlayer即可。
https://stackoverflow.com/questions/14394457
复制相似问题