2010-09-03 14 views
6

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

लेकिन जब मैं इंटरनेट पर कुछ ऑडियो फ़ाइल का यूआरएल देता हूं, तो यह दुख की बात नहीं करता है।

NSString *url = [[NSString alloc] init]; 
url = @"http://files.website.net/audio/files/audioFile.mp3"; 
NSURL *fileURL = [[NSURL alloc] initWithString: url]; 
AVAudioPlayer *newPlayer =[[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: nil]; 

किसी समस्या को इंगित करें कृपया सकते हैं और क्या किया जा सकता है: यहाँ कोड कैसा दिखाई देता है क्या है?
धन्यवाद!

+0

क्या आपने एक त्रुटि ऑब्जेक्ट प्रदान करने का प्रयास किया है ताकि यह देखने के लिए कि इसमें कोई त्रुटि वर्णन है या नहीं? – Toastor

+0

नहीं, लेकिन ऐप या तो क्रैश नहीं होता है ... बस दृश्य प्रकट होता है और कुछ भी नहीं होता है। – Bangdel

उत्तर

2

मैंने initWithContentsOfURL के बजाय AVAudioPlayer पर अन्य विधि initWithData को आजमाया। सबसे पहले एमपी 3 फ़ाइल को NSData में प्राप्त करने का प्रयास करें और फिर यह डेटा चलाएं।

मेरा कोड here देखें।

17

यह एप्पल डॉक्स क्या कहना है:

AVAudioPlayer वर्ग HTTP URL के आधार पर ऑडियो स्ट्रीमिंग के लिए सहायता प्रदान नहीं करता। initWithContentsOfURL: के साथ उपयोग किया गया यूआरएल एक फ़ाइल यूआरएल होना चाहिए (file://)। वह एक स्थानीय मार्ग है।

27

http url के आधार पर ऑडियो/वीडियो स्ट्रीम करने के लिए AVPlayer का उपयोग करें। यह ठीक काम करेगा। AVAudioPlayer स्थानीय फ़ाइलों के लिए है। यहाँ कोड

NSURL *url = [NSURL URLWithString:url];  
self.avAsset = [AVURLAsset URLAssetWithURL:url options:nil];  
self.playerItem = [AVPlayerItem playerItemWithAsset:avAsset];  
self.audioPlayer = [AVPlayer playerWithPlayerItem:playerItem];  
[self.audioPlayer play]; 
0

उपयोग AVPlayer है और उसकी स्थिति पर नजर रखने के प्लेबैक शुरू करने के।

यहां एक व्यावहारिक उदाहरण है, उम्मीद है कि यह सहायक होगा।

@implementation AudioStream 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context 
{ 
    if (context == PlayerStatusContext) { 
     AVPlayer *thePlayer = (AVPlayer *)object; 
     switch ([thePlayer status]) { 
      case AVPlayerStatusReadyToPlay: 
       NSLog(@"player status ready to play"); 
       [thePlayer play]; 
       break; 
      case AVPlayerStatusFailed: 
       NSLog(@"player status failed"); 
       break; 
      default: 
       break; 
     } 
     return; 
    } else if (context == ItemStatusContext) { 
     AVPlayerItem *thePlayerItem = (AVPlayerItem *)object; 
     switch ([thePlayerItem status]) { 
      case AVPlayerItemStatusReadyToPlay: 
       NSLog(@"player item ready to play"); 
       break; 
      case AVPlayerItemStatusFailed: 
       NSLog(@"player item failed"); 
       break; 
      default: 
       break; 
     } 
     return; 
    } 

    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; 
} 

- (void)playAudioStream 
{ 
    NSURL *audioUrl = [NSURL URLWithString:@"your_stream_url"]; 
    AVURLAsset *audioAsset = [AVURLAsset assetWithURL:audioUrl]; 
    AVPlayerItem *audioPlayerItem = [AVPlayerItem playerItemWithAsset:audioAsset]; 
    [audioPlayerItem addObserver:self forKeyPath:@"status" options:0 context:ItemStatusContext]; 
    self.player = [AVPlayer playerWithPlayerItem:audioPlayerItem]; 
    [self.player addObserver:self forKeyPath:@"status" options:0 context:PlayerStatusContext]; 
} 

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