AVPlayer e file locali

Sto costruendo un lettore MP3 per iOS che riproduce file audio ospitati sul web. Voglio offrire la possibilità di riprodurre i file offline, così ho il download dei file usando ASIHTTP ma non riesco a trovare informazioni su initlzing AVPlayer con un mp3 nella directory dei documenti dell’app. Qualcuno l’ha già fatto prima? È ansible?

* Ho postato una risposta qui sotto che mostra come utilizzare AvPlayer per iOS sia per i file locali che per i file http. Spero che questo ti aiuti!

Avevo AVPlayer per lavorare con l’URL locale prepending file:// al mio URL locale

 NSURL * localURL = [NSURL URLWithString:[@"file://" stringByAppendingString:YOUR_LOCAL_URL]]; AVPlayer * player = [[AVPlayer alloc] initWithURL:localURL]; 

Sì, è ansible scaricare e salvare il file .mp3 (o qualsiasi tipo di file) nella directory NSDocument e quindi è ansible ritirare e riprodurre utilizzando AVAudioPlayer.

 NSString *downloadURL=**your url to download .mp3 file** NSURL *url = [NSURLURLWithString:downloadURL]; NSURLConnectionalloc *downloadFileConnection = [[[NSURLConnectionalloc] initWithRequest: [NSURLRequestrequestWithURL:url] delegate:self] autorelease];//initialize NSURLConnection NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *fileDocPath = [NSStringstringWithFormat:@"%@/",docDir];//document directory path [fileDocPathretain]; NSFileManager *filemanager=[ NSFileManager defaultManager ]; NSError *error; if([filemanager fileExistsAtPath:fileDocPath]) { //just check existence of files in document directory } NSURLConnection is used to download the content.NSURLConnection Delegate methods are used to support downloading. (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSFileManager *filemanager=[NSFileManagerdefaultManager]; if(![filemanager fileExistsAtPath:filePath]) { [[NSFileManagerdefaultManager] createFileAtPath:fileDocPath contents:nil attributes:nil]; } NSFileHandle *handle = [NSFileHandlefileHandleForWritingAtPath:filePath]; [handle seekToEndOfFile]; [handle writeData:data]; [handle closeFile]; } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { UIAlertView *alertView=[[UIAlertViewalloc]initWithTitle:@”"message: [NSStringstringWithFormat:@"Connection failed!\n Error - %@ ", [error localizedDescription]] delegate:nilcancelButtonTitle:@”Ok”otherButtonTitles:nil]; [alertView show]; [alertView release]; [downloadFileConnectioncancel];//cancel downloding } 

Recupera audio e riproduzione scaricati:

  NSString *docDir1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *myfilepath = [docDir1 stringByAppendingPathComponent:YourAudioNameinNSDOCDir]; NSLog(@”url:%@”,myfilepath); NSURL *AudioURL = [[[NSURLalloc]initFileURLWithPath:myfilepath]autorelease]; 

Basta scrivere il tuo codice per riprodurre Audio usando AudioURL

Mi piacerebbe sapere se hai qualche chiarimento in merito.

Grazie

Prova questo

 NSString*thePath=[[NSBundle mainBundle] pathForResource:@"yourVideo" ofType:@"MOV"]; NSURL*theurl=[NSURL fileURLWithPath:thePath]; 

è molto difficile riprodurre una canzone utilizzando un Avplayer perché non si utilizza un lettore MPMoviePlayerController. Ho una canzone da ascoltare dalla directory dei documenti. Sto pubblicando un codice che si riferisce a questo. Funziona bene e anche tu direttamente da url live.

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *publicDocumentsDir = [paths objectAtIndex:0]; NSString *dataPath = [publicDocumentsDir stringByAppendingPathComponent:@"Ringtone"]; NSString *fullPath = [dataPath stringByAppendingPathComponent:[obj.DownloadArray objectAtIndex:obj.tagvalue]]; [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO]; NSURL *url = [NSURL fileURLWithPath:fullPath]; videoPlayer =[[MPMoviePlayerController alloc] initWithContentURL: url]; [[videoPlayer view] setFrame: [self.view bounds]]; [vvideo addSubview: [videoPlayer view]]; videoPlayer.view.frame=CGRectMake(0, 0,260, 100); videoPlayer.view.backgroundColor=[UIColor clearColor]; videoPlayer.controlStyle = MPMovieControlStyleFullscreen; videoPlayer.shouldAutoplay = YES; [videoPlayer play]; videoPlayer.repeatMode=YES; NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; [notificationCenter addObserver:self selector:@selector(moviePlayerEvent:) name:MPMoviePlayerLoadStateDidChangeNotification object:videoPlayer]; /* NSNotificationCenter *notificationCenter1 = [NSNotificationCenter defaultCenter]; [notificationCenter addObserver:self selector:@selector(moviePlayerEvent1:) name:MPMoviePlaybackStateStopped object:videoPlayer]; */ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackStateChange:) name:MPMoviePlayerLoadStateDidChangeNotification object:videoPlayer]; } -(void)playbackStateChange:(NSNotification*)notification{ if([[UIApplication sharedApplication]respondsToSelector:@selector(setStatusBarHidden: withAnimation:)]) { [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; } else { [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]; } } -(void)moviePlayerEvent:(NSNotification*)aNotification{ [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO]; } -(void)moviePlayerEvent1:(NSNotification*)aNotification{ [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO]; }