J'entends des rapports contradictoires à ce sujet. Ce que j'essaie de faire est de diffuser un fichier mp3 à partir d'une URL. J'ai fait des heures de recherche, mais je ne trouve aucun bon guide sur la manière de procéder, ni même le type de lecteur audio à utiliser.
Certains amis me disent qu'AVPlayer peut diffuser du mp3, mais la documentation d'Apple dit qu'il ne le peut pas. J'ai parcouru le streamer audio de Matt Gallagher (http://www.cocoawithlove.com/2008/09/streaming-and-playing-live-mp3-stream.html), mais ce code a été créé il y a longtemps, Je suis assez nouveau dans ce domaine pour qu'il soit difficile de travailler avec les autoreleases, les retenues et tout le reste.
L’audio que j’essaie de diffuser est un fichier MP3 assez volumineux provenant d’un serveur libsyn, avec une URL de format ..
http://traffic.libsyn.com/podcastname/episode.mp3
Tout ce que j'ai à faire est de le saisir et de commencer à jouer, avec la possibilité de faire une pause et de frotter. Donc, tout d’abord, CAN AVPlayer peut-il diffuser des mp3? Et si oui, est-ce que quelqu'un a des guides ou un code sur lequel il peut m'indiquer? Et si non, existe-t-il une classe de lecteur audio capable de diffuser de l'audio?
J'ai essayé de créer un AVPlayerItem, initialisé avec l'URL, puis de l'ajouter à un AVPlayer, mais je reçois une tonne d'erreurs Chargement en cours ... et Symbole non trouvé .... J'apprécierais toute information à ce sujet, merci!
essaye ça
-(void)playselectedsong{
AVPlayer *player = [[AVPlayer alloc]initWithURL:[NSURL URLWithString:urlString]];
self.songPlayer = player;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[songPlayer currentItem]];
[self.songPlayer addObserver:self forKeyPath:@"status" options:0 context:nil];
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProgress:) userInfo:nil repeats:YES];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (object == songPlayer && [keyPath isEqualToString:@"status"]) {
if (songPlayer.status == AVPlayerStatusFailed) {
NSLog(@"AVPlayer Failed");
} else if (songPlayer.status == AVPlayerStatusReadyToPlay) {
NSLog(@"AVPlayerStatusReadyToPlay");
[self.songPlayer play];
} else if (songPlayer.status == AVPlayerItemStatusUnknown) {
NSLog(@"AVPlayer Unknown");
}
}
}
- (void)playerItemDidReachEnd:(NSNotification *)notification {
// code here to play next sound file
}
Vous pouvez également essayer ma librairie open source Audjustable qui prend en charge le streaming HTTP. Il est basé sur AudioStreamer de Matt, mais a été rangé, optimisé et mis à jour pour prendre en charge plusieurs sources de données (non HTTP) et la lecture sans intervalle.
En plus de la réponse de Sumit Mundra, qui m'a beaucoup aidé, j'ai constaté que cette technique ne permet pas de diffuser des fichiers MP3 à partir d'un serveur distant. Lorsque j'ai implémenté cela, le fichier téléchargé de manière synchrone, bloquant mon interface utilisateur, avant de jouer. Le moyen de diffuser correctement le MP3 qui, à mon avis, fonctionnait très bien était de pointer vers un fichier M3U. Ceci est juste un fichier texte avec une extension .m3u qui contient un lien vers le MP3 original. Pointez le code de Sumit sur ce fichier à la place et vous obtenez un flux qui commence à jouer immédiatement.
C'est l'endroit où j'ai trouvé cette information: http://www.soundabout.net/streammp3.htm
AudioStreamer de Matt Gallagher a été mis à jour il y a 2 mois https://github.com/mattgallagher/AudioStreamer/commits/master
Mais pour ce que vous cherchez, consultez l'exemple de code StichedStreamPlayer http://developer.Apple.com/library/ios/#samplecode/StitchedStreamPlayer/Introduction/Intro.html#Apple_ref/doc/uid/DTS40010092
Il utilise un objet AVPlayer et si vous examinez l'expéditeur de la méthode - (IBAction) loadMovieButtonPressed: (id), vous devriez pouvoir suivre la façon dont il configure l'objet AVPlayer.