2013-05-14 50 views
2

我試圖做一個非常簡單的應用程序,目的是偵聽音頻流(AAC 64 kbps)。要做到這一點我使用AVPlayerApple AVFoundation一直遵循:AVPlayer獲取元數據但不播放

ViewController.m

#import "ViewController.h" 
@interface ViewController() 
@end 

@implementation ViewController 
@synthesize playerItem, player; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

- (void) viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 
    playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://stream.myjungly.fr/MYJUNGLY2"]]; 
    [playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:nil]; 

    player = [AVPlayer playerWithPlayerItem:playerItem]; 
    [player play]; 

    NSLog(@"player item error : %@", playerItem.error.description); 
    NSLog(@"player error : %@", player.error.description); 
} 

- (void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object 
        change:(NSDictionary*)change context:(void*)context { 

    if ([keyPath isEqualToString:@"timedMetadata"]) 
    { 
     AVPlayerItem* _playerItem = object; 
     for (AVMetadataItem* metadata in _playerItem.timedMetadata) 
     { 
      NSLog(@"\nkey: %@\nkeySpace: %@\ncommonKey: %@\nvalue: %@", [metadata.key description], metadata.keySpace, metadata.commonKey, metadata.stringValue); 
     } 
    } 
} 

@end 

我的目標playerplayerItem屬性:

ViewController.h

@interface ViewController : UIViewController 

@property (nonatomic, strong) AVPlayerItem* playerItem; 
@property (nonatomic, strong) AVPlayer* player; 

@end 

鍵值觀察是偉大的工作,這是我的日誌:

2013-05-14 11:18:03.725 MusicAvPlayer[6494:907] player item error : (null) 
2013-05-14 11:18:03.728 MusicAvPlayer[6494:907] player error : (null) 
2013-05-14 11:18:08.140 MusicAvPlayer[6494:907] 
key: title 
keySpace: comn 
commonKey: title 
value: Alabama Shakes - Be Mine 

音頻無法播放,我有去沒聲音!任何想法爲什麼?

編輯:我已經看這個問題:

No sound coming from AVPlayer

AVAudioPlayer, No Sound

AVAudioPlayer not playing any sound

這就是爲什麼我使用的是強大的屬性,所以我想我的問題是,不與ARC相關

+0

像一個風情萬種!真棒代碼! – Genevios 2016-02-25 12:19:07

回答

4

我發現了問題:iPhone在靜音模式......所以沒有聲音可以走出去,在揚聲器的聲音被打時,我用的是頭電話。

但是我現在有一個新的問題:當手機處於靜音模式時,如何在揚聲器上播放聲音? (如官方音樂應用程序)

編輯:...答案是有: Play sound on iPhone even in silent mode

0
// Init PlayerItem 
playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://stream.myjungly.fr/MYJUNGLY2"]]; 

// Init Player Obj 
player = [AVPlayer playerWithPlayerItem:playerItem]; 
// Add objserver on Player 
[player addObserver:self forKeyPath:@"status" options:0 context:nil]; 

添加觀測器方法的類

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
         change:(NSDictionary *)change context:(void *)context { 
    if (object == player && [keyPath isEqualToString:@"status"]) { 
     if (player.status == AVPlayerStatusReadyToPlay) { 
      // Start playing... 
      [player play]; 
     } else if (player.status == AVPlayerStatusFailed) { 
      // something went wrong. player.error should contain some information 
     } 
    } 
    if ([keyPath isEqualToString:@"timedMetadata"]) 
    { 
     AVPlayerItem* _playerItem = object; 
     for (AVMetadataItem* metadata in _playerItem.timedMetadata) 
     { 
      NSLog(@"\nkey: %@\nkeySpace: %@\ncommonKey: %@\nvalue: %@", [metadata.key description], metadata.keySpace, metadata.commonKey, metadata.stringValue); 
     } 
    } 

} 
+0

謝謝你的回答,我已經嘗試過了,觀察者可以正確觸發,但是我的播放狀態等於'AVPlayerStatusReadyToPlay',仍然沒有聲音...你還有其他想法嗎? – 2013-05-14 16:56:17

+0

我已經在我的設備中播放了它,可能是聲音被你以編程方式或手動方式靜音,檢查,它的工作正常與我的設備 – 2013-05-15 04:22:36

+0

再次感謝你。我的聲音沒有手動靜音,因爲我可以在其他應用程序中收聽聲音。以編程方式它可能是可能的,但我的應用程序是非常基本的,我沒有做更多的問題。有沒有辦法查看應用程序是否以編程方式靜音?我的應用程序需要播放聲音有沒有自動化? (如在Android中)。 – 2013-05-16 07:30:00