带有Visualizer的AVPlayer

时间:2017-02-08 12:02:02

标签: ios swift swift3 avplayer

我需要为流式网址(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文件,轨道数组有一个项目。

1 个答案:

答案 0 :(得分:0)

您无法通过AVPLayer获得有关HLS的曲目。播放媒体时,应使用渐进式下载或本地文件来获取音轨。