2015-07-01 5 views
11

मैं अपने पहले आईओएस ऐप को तेजी से बनाने की प्रक्रिया में हूं और मैं प्रश्न में फंस गया हूं: स्ट्रीमिंग करते समय संगीत फ़ाइल की लंबाई (अवधि) कैसे प्राप्त करें?स्विफ्ट: AVPlayer - URL से एमपी 3 फ़ाइल की लंबाई कैसे प्राप्त करें?

मैंने बहुत कुछ शोध किया और इस समस्या को हल करने के लिए कोड की कुछ पंक्ति भी लिखी लेकिन मुझे लगता है कि मेरा कोड पर्याप्त नहीं है।

func prepareAudio() { 
    audioLength = CMTimeGetSeconds(self.player.currentItem.asset.duration) 
    playerProgressSlider.maximumValue = CFloat(CMTimeGetSeconds(player.currentItem.duration)) 
    playerProgressSlider.minimumValue = 0.0 
    playerProgressSlider.value = 0.0 
    showTotalSurahLength() 
} // i prepare for get the duration and apply to UISlider here 

func showTotalSurahLength(){ 
    calculateSurahLength() 
    totalLengthOfAudioLabel.text = totalLengthOfAudio 
} // get the right total length of audio file 


func calculateSurahLength(){ 
    var hour_ = abs(Int(audioLength/3600)) 
    var minute_ = abs(Int((audioLength/60) % 60)) 
    var second_ = abs(Int(audioLength % 60)) 

    var hour = hour_ > 9 ? "\(hour_)" : "0\(hour_)" 
    var minute = minute_ > 9 ? "\(minute_)" : "0\(minute_)" 
    var second = second_ > 9 ? "\(second_)" : "0\(second_)" 
    totalLengthOfAudio = "\(hour):\(minute):\(second)" 
} // I calculate the time and cover it 

यहां कोई भी जो इस समस्या से फंस गया है, क्या आप मुझे इसे ठीक करने के लिए कुछ सुझाव दे सकते हैं? मैं स्विफ्ट में बहुत नया हूं और अभी भी अपने कौशल में सुधार करना सीखता हूं।

धन्यवाद,

उत्तर

3

मैंने आईओएस में यह स्टफ बनाया है और पूरी तरह से काम कर रहा है।

AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioUrl options:nil]; 
CMTime audioDuration = audioAsset.duration; 
float audioDurationSeconds = CMTimeGetSeconds(audioDuration); 
+0

धन्यवाद चेतन, मैं इसे स्विफ्ट में कवर करने की कोशिश करूंगा :) –

15

तेजी के लिए:

let asset = AVURLAsset(URL: NSURL(fileURLWithPath: pathString), options: nil) 
let audioDuration = asset.duration 
let audioDurationSeconds = CMTimeGetSeconds(audioDuration) 
+0

हाय, यदि धीमी इंटरनेट कनेक्शन है तो यह पूरे ऐप को रोक रहा है, और यदि इंटरनेट कनेक्शन नहीं है तो यह 0.0 लौट रहा है। तो क्या ब्लॉक में ऐसा करने का कोई तरीका है? और संसाधन उपलब्ध होने पर इसके द्वारा निकाली गई कोई अधिसूचना है? – souvickcse

2

निम्नलिखित समारोह स्विफ्ट 3.0 के साथ काम करता है और एक डबल मूल्य लक्ष्य फ़ाइल की अवधि युक्त वापस आ जाएगी।

func duration(for resource: String) -> Double { 
    let asset = AVURLAsset(url: URL(fileURLWithPath: resource)) 
    return Double(CMTimeGetSeconds(asset.duration)) 
} 

यह resource पैरामीटर ले जाएगा, ऑडियो फ़ाइल के filepath के लिए एक String से मिलकर, और फिर एक Double करने के लिए एक Float64 से मूल्य में परिवर्तित।

+0

मुझे AVURLASSet को अनजान पहचानकर्ता देता है – reggie

संबंधित मुद्दे