2010-07-16 14 views
18

की मात्रा समायोजित करना वर्तमान में AVPlayer आइटमों पर वॉल्यूम परिवर्तन प्राप्त करने का एकमात्र तरीका इस प्रक्रिया का पालन करना है;एक खेल AVPlayer

  • वर्तमान में चल रहे AVPlayerItem की परिसंपत्ति
  • ले लो कि AVPlayerItem
  • लोड संपत्ति एक नया AVPlayerItem
  • में के लिए वर्तमान प्लेबैक समय बोझ उतार लेना के लिए नया एक
  • प्रतीक्षा के साथ वर्तमान AVPlayerItem बदलें AVPlayer
  • पर बदलने के लिए वर्तमान Item अपने ऑडियोमिक्स तैयार करें और पिछले प्लेबैक समय की तलाश करें

क्या मुझे कहीं बुनियादी सिद्धांत याद आया है या क्या यह वॉल्यूम स्तरों को प्रबंधित करने के लिए इसे समेकित किया गया है?

मैं AVAudioPlayer का उपयोग नहीं कर सकता क्योंकि मुझे प्लेयर में आईट्यून्स ट्रैक लोड करने की आवश्यकता है।

+0

क्या AVPlayer एक तृतीय-पक्ष ढांचा/अनुप्रयोग है? – alexy13

+0

@ टाइयलर: AVAudioPlayer यहां कोई मुद्दा नहीं है ... हम AVPlayer के बारे में बात कर रहे हैं, क्योंकि AVAudioPlayer आईपॉड-लाइब्रेरी URL –

उत्तर

21

जबकि विधि यहाँ वर्णित का उपयोग कर खेल रहे हैं आप मात्रा बदल सकते हैं:

http://developer.apple.com/library/ios/#qa/qa1716/_index.html

लेख के पाठ का सुझाव देना है कि यह केवल ऑडियो म्यूट करने के लिए किया जा सकता लगता है, आप वास्तव में सेट कर सकते हैं वॉल्यूम जो भी आप पसंद करते हैं, और ऑडियो चलाने के बाद आप इसे सेट कर सकते हैं। उदाहरण के लिए, एवीएसेट के आपके उदाहरण को "संपत्ति" कहा जाता है, इसलिए AVPlayerItem का आपका उदाहरण "प्लेयरइटम" कहा जाता है, और जिस वॉल्यूम को आप सेट करना चाहते हैं उसे "वॉल्यूम" कहा जाता है, तो निम्न कोड आपको जो चाहिए वह करना चाहिए:

NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio]; 

NSMutableArray *allAudioParams = [NSMutableArray array]; 
for (AVAssetTrack *track in audioTracks) { 
    AVMutableAudioMixInputParameters *audioInputParams = 
    [AVMutableAudioMixInputParameters audioMixInputParameters]; 
    [audioInputParams setVolume:volume atTime:kCMTimeZero]; 
    [audioInputParams setTrackID:[track trackID]]; 
    [allAudioParams addObject:audioInputParams]; 
} 

AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix]; 
[audioMix setInputParameters:allAudioParams]; 

[playerItem setAudioMix:audioMix]; 
+0

उस लिंक के लिए धन्यवाद। मुझे उस पृष्ठ के नीचे जानकारी का एक बहुत ही महत्वपूर्ण टुकड़ा मिला। "नोट: AVAudioMix केवल फ़ाइल-आधारित संपत्तियों का समर्थन करता है।"मुझे पता नहीं लगा कि मेरा फीका क्यों टूट गया था और अब मुझे पता है, क्योंकि मेरा प्रारंभिक परीक्षण स्थानीय फाइलों के साथ था और अब वे स्ट्रीमिंग कर रहे हैं। ऐसा लगता है कि AVPlayer का उपयोग कर स्ट्रीमिंग ट्रैक के लिए वॉल्यूम समायोजित करने का कोई तरीका नहीं है ... – SteveB

+0

दिलचस्प। ऐसा लगता है कि मेरे लिए स्ट्रीम किए गए मीडिया के साथ काम करना प्रतीत होता है, इसलिए संभवतः ऐसा कुछ अन्य कारक है जो मुझे होना चाहिए। मेरे पास समय है जब मैं कुछ समय पर एक साधारण टेस्ट ऐप रखना चाहता हूं। –

+0

कर सकते हैं आप इस कोड 'AVPlayer * avPlayer = [[AVPlayer alloc] initWithURL: songURL]; ' ' [avplayer play] के लिए मेरी सहायता करें;' क्या मुझे इस सरल रेखा का उपयोग करने की आवश्यकता है जब मेरे पास यह सरल रेखाएं हों .. – DShah

4

क्या आपने अभी भी AVMutableAudioMix तैयार करने की कोशिश की है और इसे अभी भी चल रहा है, जबकि AVPlayerItem पर सेट कर रहा है? आपको एवीप्लेयर से अपने वर्तमान इटैम के लिए पूछने में सक्षम होना चाहिए, जो अपने ट्रैक प्रदान कर सकता है कि AVMutableAudioMixInputParameters AVMutableAudioMix के संदर्भ में होना चाहिए। जब आप मिश्रण के लिए आपूर्ति करते हैं तो मिश्रण के लागू होने के सापेक्ष होते हैं।

+1

को संभाल नहीं सकता है बस [[प्लेयर currentItem] setAudioMix: audioMix] सेट करना; (एक यूआईएसलाइडर वैल्यू चेंज एक्शन से) ठीक है। –

2
- (IBAction)sliderAction:(id)sender { 
NSLog(@"slider :%f ", self.mixerSlider.value); 

NSArray *audioTracks = [self.videoHandler.videoAsset tracksWithMediaType:AVMediaTypeAudio]; 

// Mute all the audio tracks 
NSMutableArray *allAudioParams = [NSMutableArray array]; 
for (AVAssetTrack *track in audioTracks) { 
    AVMutableAudioMixInputParameters *audioInputParams =[AVMutableAudioMixInputParameters audioMixInputParameters]; 
    [audioInputParams setVolume:self.mixerSlider.value atTime:kCMTimeZero]; 
    [audioInputParams setTrackID:[track trackID]]; 
    [allAudioParams addObject:audioInputParams]; 
} 
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix]; 
[audioMix setInputParameters:allAudioParams]; 

[[self.mPlayer currentItem] setAudioMix:audioMix]; } 

इस विधि को स्लाइडर मान द्वारा बदला जाता है। और जब आप वीडियो चला रहे हों तो आप इसे कॉल कर सकते हैं।

0

ध्यान दें कि AVMutableAudioMix- मूल प्रश्न (और कई उत्तरों) में वर्णित आधारित विधि केवल फ़ाइल-आधारित संपत्तियों के साथ काम करता है, स्ट्रीमिंग मीडिया नहीं।

यह एप्पल, यहाँ द्वारा लिखे गए एक दस्तावेज में वर्णित है:

https://developer.apple.com/library/content/qa/qa1716/_index.html

जब मैं स्ट्रीमिंग ऑडियो के साथ ऐसा करना मैं प्राप्त नहीं किया किसी भी पटरियों AVAsset के tracks(withMediaType:) विधि (स्विफ्ट) से लौटे का प्रयास किया।