2016-03-01 3 views
0

У меня есть mp3-файлы в местном словаре. Я попытался воспроизвести эти файлы с помощью AVPlayer, но это не сработает., играющий mp3-файл в iOS 9, не работает с использованием AVPlayer

.h файл:

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 
#import <CoreMedia/CoreMedia.h> 
#import <AudioToolbox/AudioToolbox.h> 

@interface IndusHomePageViewController : UIViewController 
{ 
    AVPlayer *player; 
    NSTimer *playbackTimer; 
} 
-(void) setupAVPlayerForURL: (NSURL*) url; 
@end 

.m файл:

NSString *docDir1 =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *dataPathDestination = [docDir1 stringByAppendingPathComponent:@"mysore"]; 
NSString *myfilepath = [dataPathDestination stringByAppendingPathComponent:@"en_01_Mysore.mp3"]; 
NSURL *url = [NSURL URLWithString:myfilepath]; 
[self setupAVPlayerForURL:url]; 

-(void) setupAVPlayerForURL: (NSURL*) url 
{ 
    AVAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil]; 
    AVPlayerItem *anItem = [AVPlayerItem playerItemWithAsset:asset]; 
    player = [AVPlayer playerWithPlayerItem:anItem]; 
    [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 == AVPlayerStatusFailed) { 
      NSLog(@"AVPlayer Failed"); 
     } else if (player.status == AVPlayerStatusReadyToPlay) { 
      NSLog(@"AVPlayer Ready to Play"); 
     } else if (player.status == AVPlayerItemStatusUnknown) { 
      NSLog(@"AVPlayer Unknown"); 
     } 
    } 
} 

- (IBAction)play:(id)sender { 
    [player play]; 
} 

- (IBAction)pause:(id)sender { 
    [player pause]; 
} 
+0

Первые строки или ваш фрагмент .m необходимо вызывать из метода, поэтому, я думаю, вы не публиковали все. Какова ошибка, с которой вы сталкиваетесь? –

+0

Я не получал ошибок для этих. Когда я нажимаю кнопку воспроизведения, не работает –

ответ

3

Для того, чтобы создать NSURL для локально сохраненных файлов вы должны использовать fileURLWithPath: метод, в настоящее время вы пытаясь инициализировать url как удаленный файл. Замените NSURL *url = [NSURL URLWithString:myfilepath]; на NSURL *url = [NSURL fileURLWithPath:myfilepath];, и он должен работать. Удачи!

PS: Кроме того, вам нужно выполнить проверку наличия файла перед передачей URL-адреса игроку.

+0

itz working thanks –

0

Am используя следующий код для воспроизведения песни. Вместо audioURL используйте локальный путь к файлу. Пожалуйста, попробуйте это. Он работает для меня.

NSURL *url = [NSURL URLWithString:[audioURL stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]]; 
AVURLAsset *asset = [AVURLAsset assetWithURL: url]; 
// self.aduioItem is an obj of AVPlayerItem 
self.audioItem = [AVPlayerItem playerItemWithAsset: asset]; 
// self.audioPlayer is an obj of AVPlayer 
self.audioPlayer = [[AVPlayer alloc] init]; 
[self.audioPlayer addObserver:self forKeyPath:@"status" options:0 context:nil]; 
AVPlayer *player = [[AVPlayer alloc] initWithPlayerItem: self.audioItem]; self.audioPlayer = player; 
//Calling a methods to handle the current song completion.. 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:[self.audioPlayer currentItem]]; 
//Calling a method to update the slider timer.. 
self.songTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updatePlayerTime:) userInfo:nil repeats:YES]; [self.audioPlayer play]; 

Надеюсь, это поможет вам. Благодарю.