我需要为流式网址(m3u8格式)创建音频播放器。我用AVPlayer创建了音乐播放器。但我需要为流媒体歌曲展示可视化工具。我尝试了不同的解决方案,但没有找到任何有用的例子。
我使用AVAudioPlayer( averagePower )创建了可视化工具,但它不支持流式网址。
有关显示AVPlayer可视化工具的任何帮助吗?提前谢谢。
我也尝试使用大多数人建议的 MYAudioTapProcessor ,但对于流式网址,曲目始终返回null。
在项目
中添加了MYAudioTapProcessor.h和MYAudioTapProcessor.m//Initialization of player
let playerItem = AVPlayerItem( url:NSURL( string:"https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8" ) as! URL )
let audioPlayer: AVPlayer = AVPlayer(playerItem:playerItem)
//Added periodic time observer
audioPlayer!.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, 1), queue: DispatchQueue.main) { (CMTime) -> Void in
if audioPlayer!.currentItem?.status == .readyToPlay
{
if let playerItem: AVPlayerItem = audioPlayer!.currentItem {
print(playerItem.asset.tracks.count)
if (playerItem.asset.tracks) != nil {
self.tapProcessor = MYAudioTapProcessor(avPlayerItem: playerItem)
playerItem.audioMix = self.tapProcessor.audioMix
self.tapProcessor.delegate = self
}
}
}
}
//Delegate callback method for MYAudioTapProcessor
func audioTabProcessor(_ audioTabProcessor: MYAudioTapProcessor!, hasNewLeftChannelValue leftChannelValue: Float, rightChannelValue: Float) {
print("volume: \(leftChannelValue) : \(rightChannelValue)")
volumeSlider.value = leftChannelValue
}
还尝试添加“跟踪”观察者。
playerItem.addObserver(self, forKeyPath: "tracks", options: NSKeyValueObservingOptions.new, context: nil);
现在如果播放mp3文件,回调方法调用但是对于m3u8回调方法不调用。 m3u8 URL失败的主要原因是它始终显示轨道数组计数为零,而对于mp3文件,轨道数组有一个项目。
答案 0 :(得分:0)
您无法通过AVPLayer获得有关HLS的曲目。播放媒体时,应使用渐进式下载或本地文件来获取音轨。