2016-02-26 22 views
0

我使用解析传输音频到我的iOS设备,我想补充一个滑块,将监测和改变音频的进步正在播放。滑块控制与AVPlayer斯威夫特2

我必须使用AVPlayer流式传输音频,是否有方法可以用滑块更改音轨的进度,或者是否必须将其更改为AVAudioPlayer格式(我不知道如何执行)?

let audioQuery = PFQuery(className: "Audio") 
audioQuery.getObjectInBackgroundWithId(IDArray[selectedPodcast], block: { 

    (object : PFObject?, error : NSError?) -> Void in 
    if let audioFileURLTemp = object?.objectForKey("AudioFile")?.url as String! { 

     audioURL = audioFileURLTemp 

     audioPlayer = AVPlayer(URL: NSURL(string: audioFileURLTemp)!) 
     audioPlayer.play() 

    } 

}) 

这是我使用的流音频

感谢代码!

+0

你所说的变革也意味着进展如何?你的意思是你希望能够使用滑块作为擦洗器来看音轨的某些部分?如果是这样的话,AVPlayer有一个非常准确的'seekToTime()'。你可以将它连接到你的UISlider – MikeG

+0

是的,那正是我需要的,我将如何实现它?如果你不介意给我看一些示例代码? – user2976917

+0

我可以发表一个答案,但我现在没有时间,非常抱歉。这是要点:在故事板或编程创建一个UISlider。如果以编程方式制作滑块,请将滑块连接到@IBAction或“选择器”。只要移动滑块,就会调用选择器(或IBAction)。因此,在选择器内部,您将执行audioPlayer.seekToTime(//从0到songDuration范围内的滑块输入值)''。这样,当滑块移动时,audioPlayer将跳转到滑块所在的时间。注意:'seekToTime()'将CMTime作为参数,因此您必须将#转换为CMTime。 – MikeG

回答

0

你必须使用:addPeriodicTimeObserverForInterval:queue:usingBlock:

我用下面的块以播放视频:

let sliderWidth = CGRectGetWidth(movieSlider.bounds) 
let interval = Double(movieSelected.original.duration.value * 1000)/Double(movieSelected.original.duration.timescale)/Double(sliderWidth) 
player.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(interval/1000, 1000), queue: nil) { (time: CMTime) -> Void in 
    self.movieSlider.value = Float(time.value)/Float(time.timescale)/Float(self.movieSelected.original.duration.value) * Float(self.movieSelected.original.duration.timescale) 
} 
+0

我得到的错误“AVPlayer”没有成员“原始” – user2976917

+0

对不起上面的代码是从一个项目前,我在相当长的一段工作的转储。如前所述,这是为了播放电影。我建议你使用AVAudioPlayer类来播放音频。请参考链接:http://stackoverflow.com/questions/19638497/ios-7-simple-audio-controls-with-avaudioplayer – Santhosh

+0

我不知道如何将文件转换为AVAuidoPlayer,因为该文件正在从解析流。 com,那个链接是Obj-C的,但是无论如何感谢 – user2976917