я нашел очень странную проблему,avplayeritem всегда в неизвестном состоянии
при загрузке mp3 файла из локального хранилища,
avplayeritem всегда неизвестный статус и не играли, если файл размещен в папке с документами ,
путь 1:
//AVAsset *asset = [[AVURLAsset alloc] initWithURL:_URL options:nil];
//AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:asset];
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:_URL];
//line 1
while (playerItem.status!=AVPlayerItemStatusReadyToPlay
&& playerItem.status!=AVPlayerItemStatusFailed) {
NSLog(@"avplayer: %@ status: %d", playerItem, playerItem.status);
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
//line 2
NSLog(@"avplayer status: %d item: %@", playerItem.status, _URL);
NSArray *metadata = [playerItem.asset commonMetadata];
путь 2:
AVAsset *asset = [[AVURLAsset alloc] initWithURL:_URL options:nil];
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:asset];
/*
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:_URL];
//line 1
while (playerItem.status!=AVPlayerItemStatusReadyToPlay
&& playerItem.status!=AVPlayerItemStatusFailed) {
NSLog(@"avplayer: %@ status: %d", playerItem, playerItem.status);
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
//line 2
*/
NSLog(@"avplayer status: %d item: %@", playerItem.status, _URL);
NSArray *metadata = [playerItem.asset commonMetadata];
вывод:
2015-03-19 00:42:49.243 goodnightfm[6737:353911] avplayer: <AVPlayerItem: 0x7fdc3bbd5c00, asset = <AVURLAsset: 0x7fdc3bbd8a50, URL = file:///Users/galenzhao/Library/Developer/CoreSimulator/Devices/123A77A7-DC61-4795-8D9A-E71002E261DA/data/Containers/Data/Application/4CCEED79-1D5A-4D00-BC5E-FC52BD5393F9/Documents/CMStorage/70efdf2ec9b086079795c442636b55fb>> status: 0
но код way2 работает хорошо, если mp3 файл был в приложении пачке даже статус еще сосать неизвестно,
2015-03-19 00:45:35.977 goodnightfm[6783:355678] avplayer status: 0 item: file:///Users/galenzhao/Library/Developer/CoreSimulator/Devices/123A77A7-DC61-4795-8D9A-E71002E261DA/data/Containers/Bundle/Application/F2446C29-49F3-4B92-A7B0-7EFCC1A19274/goodnightfm.app/demo5.mp3
Я уверен, что файл в приложении пачке & документа такой же один, он может играть в любом другом программном обеспечении,
с помощью way2, только различался расслоение файл файл & документа был,
если mp3 файл, размещаемый в пачке, эта функция может возвращать Метаданные
NSArray *metadata = [playerItem.asset commonMetadata];
но возвращать ноль, используя URL документа
Вы должны дождаться изменения статуса, соблюдая путь ключа состояния, используя KVO. – Rivera