2012-07-17 20 views
5

में एक HTTP लाइव स्ट्रीम म्यूट करें मैं अब 48 घंटे के लिए इस समस्या को हल करने का प्रयास कर रहा हूं और कुछ भी नहीं आया है। मेरे पास 2 एवीप्लेयर ऑब्जेक्ट्स अलग-अलग http लाइव स्ट्रीम खेल रहे हैं। जाहिर है, मैं नहीं चाहता कि वे दोनों एक ही समय में ऑडियो खेल रहे हों, इसलिए मुझे वीडियो में से किसी एक को म्यूट करने का तरीका चाहिए।एक AVPlayer

एप्पल suggests this AVPlayer में खेल रहे एक ऑडियो ट्रैक म्यूट करने के लिए ...

NSMutableArray *allAudioParams = [NSMutableArray array]; 
for (AVPlayerItemTrack *track in [_playerItem tracks]) { 
    if ([track.assetTrack.mediaType isEqualToString:AVMediaTypeAudio]) { 
     AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; 
     [audioInputParams setVolume:0.0 atTime:CMTimeMakeWithSeconds(0,1)]; 
     [audioInputParams setTrackID:[track.assetTrack trackID]]; 
     [allAudioParams addObject:audioInputParams]; 
     // Added to what Apple Suggested 
     [track setEnabled:NO]; 
    } 
} 

AVMutableAudioMix *audioZeroMix = [AVMutableAudioMix audioMix]; 
[audioZeroMix setInputParameters:allAudioParams]; 
[_playerItem setAudioMix:audioZeroMix]; 

जब यह काम नहीं किया (कई पुनरावृत्तियों के बाद), मैं AVPlayerItemTrack के सक्षम प्रॉपर्टी मिल गया है और नहीं करने के लिए सेट करते हैं कि कोशिश की। कुछ भी नहीं। यह कुछ भी करने के रूप में भी पंजीकृत नहीं होता है क्योंकि जब मैं एक NSLog (@ "% x", track.enabled) का प्रयास करता हूं, तो यह अभी भी 1.

मुझे नुकसान हो रहा है और मैं नहीं सोच सकता दस्तावेज़ीकरण का एक और टुकड़ा मैं एक अच्छा जवाब पाने के लिए पढ़ और फिर से पढ़ सकता हूं। अगर वहां कोई भी मदद कर सकता है, तो यह शानदार होगा।

* अद्यतन: मैं एप्पल के एक पकड़ लिया और AVFoundation टीम के अनुसार, यह म्यूट या एक एचएलएस वीडियो की एक ट्रैक को अक्षम करना असंभव है। मैं, व्यक्तिगत रूप से, ऐसा महसूस करता हूं कि यह एक बग है इसलिए मैंने bug report सबमिट किया (आपको ऐप्पल को यह बताने के लिए ऐसा करना चाहिए कि यह एक समस्या है)। आप भी अपने प्रतिक्रिया पृष्ठ के माध्यम से feature enhancement request को आजमाएं और सबमिट कर सकते हैं।

उत्तर

6

नया आईओएस 7 उत्तर: एवीप्लेयर में अब 2 नए गुण 'वॉल्यूम' और 'म्यूट' हैं। उन का प्रयोग करें!

मैं एक ही बात के साथ काम कर रहा है:


और यहाँ iOS 7 से पहले जीवन के लिए मूल जवाब है। हमने ऑडियो के साथ म्यूट स्ट्रीम और स्ट्रीम बनाए। म्यूट या अनम्यूट करने के लिए आप [player replaceCurrentItemWithPlayerItem:muteStream] पर कॉल करें।

मैंने एक बग रिपोर्ट भी सबमिट की। ऐसा लगता है कि AVPlayer में यह कार्यक्षमता MacOS 10.7 पर है, लेकिन यह अभी तक आईओएस के लिए नहीं बनाई गई है।

AVAudioMix is documented not to work on URL assets here

बेशक

मैं इसे किसी भी तरह की कोशिश की है, और आप की तरह मैं यह वास्तव में काम नहीं करता पाया।

+0

उत्तर के लिए धन्यवाद, यह उन समस्याओं में से एक के लिए मेरे लिए एक रास्ता खोल दिया जो मैं हल करने की कोशिश कर रहा था। मैं ओपनएएल के साथ एक ही काम करने की कोशिश कर रहा हूं लेकिन ऐसा करने का सीधा आगे नहीं मिला।मुझे पता है कि आप वॉल्यूम को alSourcef (स्रोत आईडी, AL_GAIN, वॉल्यूम) के माध्यम से घटा सकते हैं; लेकिन यह नहीं पता कि इसे कैसे म्यूट करें, क्या इसका कोई त्वरित समाधान है? – chathuram

1

इसके लिए सबसे अच्छा समाधान वास्तव में दो ऑडियो ट्रैक के साथ स्ट्रीम यूआरएल फ़ीड एम्बेड करना होगा! एक सामान्य ऑडियो के साथ होगा और अन्य ऑडियो ट्रैक म्यूट ऑडियो होगा।

यह इस तरह से करने के लिए और अधिक समझ में आता है, जिस तरह से कॉमपफ ने वास्तव में दो अलग-अलग यूआरएल धाराओं को बनाने के तरीके के रूप में सुझाव दिया - जिसकी आवश्यकता नहीं है।

यहाँ कोड है कि आप ऑडियो ट्रैक स्विच करने के लिए इस्तेमाल कर सकते हैं है:

float volume = 0.0f; 

AVPlayerItem *currentItem = self.player.currentItem; 
NSArray *audioTracks = self.player.currentItem.tracks; 

DLog(@"%@",currentItem.tracks); 

NSMutableArray *allAudioParams = [NSMutableArray array]; 

for (AVPlayerItemTrack *track in audioTracks) 
{ 
    if ([track.assetTrack.mediaType isEqual:AVMediaTypeAudio]) 
    { 
     AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; 
     [audioInputParams setVolume:volume atTime:kCMTimeZero]; 
     [audioInputParams setTrackID:[track.assetTrack trackID]]; 
     [allAudioParams addObject:audioInputParams]; 
    } 
} 

if ([allAudioParams count] > 0) { 
    AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix]; 
    [audioMix setInputParameters:allAudioParams]; 
    [currentItem setAudioMix:audioMix]; 
} 

केवल समस्या यह है कि मेरी धारा यूआरएल केवल दो पटरियों (वीडियो के लिए एक और ऑडियो के लिए एक) है जब यह होना चाहिए वास्तव में तीन ट्रैक (2 ऑडियो ट्रैक) हो। यदि स्ट्रीम स्ट्रीम यूआरएल या मेरे कोड में कोई समस्या है तो मैं काम नहीं कर सकता! क्या कोई कोड में किसी भी गलती को खोज सकता है?

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