我正在尝试在我的应用中显示一个使用AVPlayer流式传输实时音频流的电表图。
我知道AVAudioPlayer有一种方法: Trying to understand AVAudioPlayer and audio level metering
使用mozilla/DigiCert_High_Assurance_EV_Root_CA.crt
但AVAudioPlayer对音频流不起作用。
AVPlayer有类似的东西吗?或者还有其他方法可以从AVPlayer获得功率值吗?
代码:
peakPowerForChannel
答案 0 :(得分:2)
通常,您可以使用播放器项目上的AVPlayer
来获取MTAudioProcessingTap
的音频样本,但是您的资产可以通过
tracks
上的AVURLAsset
财产永远不可用playerItem.tracks
assetTrack
时,没有给您回电。我从未见过为什么这对远程mp3
或m3u8
流不起作用的好解释,而且令人讨厌的是,它确实适用于其他远程资产类型,比如aac
。不公平地,在视频方面,AVPlayerItemVideoOutput似乎适用于所有类型的资产(除了DRM问题)!
那么这会让你离开?一种方法是使用AudioQueue
从您解码和播放mp3数据的位置流式传输mp3数据, 使用前面提到的MTAudioProcessingTap
计算峰值功率。我们也会想到涉及AudioConverter
/ AudioUnit
和AVAudioConverter
/ AVAudioEngine
的解决方案。
如果仅仅更换单个属性听起来太多工作,您可以查看预先制作的解决方案,例如StreamingKit或FreeStreamer,然后计算功率。你可能会找到一个为你计算能量的库。如果没有,您可以使用this formula
计算peakPowerForChannel