7
votes

Jouez audio d'Internet à l'aide d'Avaudioplayer

Je suis implémentant Avadiaplayer pour jouer audio et cela fonctionne parfaitement bien lors de la lecture de fichiers stockés localement sur le PC.

Mais lorsque je donne l'URL de certains fichiers audio sur Internet, il échoue malheureusement. Voici ce que le code ressemble à: xxx

pourrait-il signaler le problème et ce qui pourrait être fait?
Merci!


2 commentaires

Avez-vous essayé de fournir un objet d'erreur pour voir s'il contient une description d'erreur?


Nope, mais l'application ne se bloque pas non plus ... juste la vue apparaît et rien ne se passe.


4 Réponses :


3
votes

J'ai essayé une autre méthode initwithdata sur Avaudioplayer au lieu d'InitwithContentsofurl. Essayez d'abord d'obtenir un fichier MP3 dans Nsdata, puis de lire ces données.

Regardez mon code ici .


0 commentaires

21
votes

C'est ce que dit les Documents Apple:

Le Avaudioplayer La classe ne fournit pas de support à la diffusion audio en streaming basée sur les URL HTTP. L'URL utilisée avec initwithcontentsofurl: doit être une URL de fichier ( fichier: // ). C'est-à-dire un chemin local.


1 commentaires

J'ai passé beaucoup de temps à essayer de résoudre ce problème jusqu'à ce que je rencontre votre réponse ici. Merci Internet Stranger. Cela a aidé beaucoup.



32
votes

Utilisez Avplayer pour diffuser audio / vidéo sur la base de l'URL HTTP. Cela fonctionnera bien. Avaudioplayer est pour les fichiers locaux. Voici le code

NSURL *url = [NSURL URLWithString:url];    
self.avAsset = [AVURLAsset URLAssetWithURL:url options:nil];    
self.playerItem = [AVPlayerItem playerItemWithAsset:avAsset];    
self.audioPlayer = [AVPlayer playerWithPlayerItem:playerItem];    
[self.audioPlayer play];


0 commentaires

0
votes

Utilisez Avplayer code> et surveiller son statut pour lancer la lecture.

Voici un exemple fonctionnant, espérons que ce serait utile. p>

@implementation AudioStream

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
    if (context == PlayerStatusContext) {
        AVPlayer *thePlayer = (AVPlayer *)object;
        switch ([thePlayer status]) {
            case AVPlayerStatusReadyToPlay:
                NSLog(@"player status ready to play");
                [thePlayer play];
                break;
            case AVPlayerStatusFailed:
                NSLog(@"player status failed");
                break;
            default:
                break;
        }
        return;
    } else if (context == ItemStatusContext) {
        AVPlayerItem *thePlayerItem = (AVPlayerItem *)object;
        switch ([thePlayerItem status]) {
            case AVPlayerItemStatusReadyToPlay:
                NSLog(@"player item ready to play");
                break;
            case AVPlayerItemStatusFailed:
                NSLog(@"player item failed");
                break;
            default:
                break;
        }
        return;
    }

    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}

- (void)playAudioStream
{
    NSURL *audioUrl = [NSURL URLWithString:@"your_stream_url"];
    AVURLAsset *audioAsset = [AVURLAsset assetWithURL:audioUrl];
    AVPlayerItem *audioPlayerItem = [AVPlayerItem playerItemWithAsset:audioAsset];
    [audioPlayerItem addObserver:self forKeyPath:@"status" options:0 context:ItemStatusContext];
    self.player = [AVPlayer playerWithPlayerItem:audioPlayerItem];
    [self.player addObserver:self forKeyPath:@"status" options:0 context:PlayerStatusContext];
}

@end


0 commentaires