3

非常に単純なアプリケーションを実行しようとしています。目的は、オーディオ ストリーム ( AAC 64 kbps ) をリッスンすることです。そうするために、私はhas followAVPlayerから使用しています:Apple AVFoundation

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

しかし、オーディオは再生されません。音が出ません。理由はありますか?

編集:私はすでにこの質問を見ています:

AVPlayer から音が出ない

AVAudioPlayer、音が出ない

AVAudioPlayer でサウンドが再生されない

だから私は強いプロパティを使用しているので、私の問題はARC関連ではないと思います

4

2 に答える 2

5

私は問題を発見しました:iPhoneはサイレントモードでした...そのため、スピーカーから音が出なくなり、ヘッドフォンを使用しているときに音が再生されました。

しかし、ここで新たな質問があります。電話機がサイレント モードのときに、スピーカーでサウンドを再生するにはどうすればよいでしょうか。(公式ミュージックアプリのように)

編集:...そして答えはそこにあります: サイレントモードでもiPhoneでサウンドを再生します

于 2013-05-17T11:59:17.447 に答える
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];

Observer メソッドをクラスに追加する

- (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);
        }
    }

}
于 2013-05-14T11:51:08.230 に答える