web-dev-qa-db-fra.com

Écrire une application pour diffuser de la vidéo sur iPhone

Je suis intéressé par la création d'une application iPhone capable de diffuser des vidéos à partir d'un serveur central, à la manière de YouTube. Je me demandais si quelqu'un avait déjà essayé de faire cela auparavant, quelle est la voie des API les moins résistantes, des API existantes, etc.? Je ne sais vraiment pas comment cela se fait généralement. Est-ce que je travaillerais avec des sockets? Je cherche juste une direction ici. Merci!

23
Jameson

Si le serveur de diffusion en continu est prêt et prêt, il est assez facile de mettre en œuvre un contrôleur vidéo qui s'affiche à la manière de youtube.

NSString *videoURLString = @"http://path-to-iphone-compliant-video-stream";
NSURL *videoURL = [NSURL URLWithString:videoURLString];
MPMoviePlayerController moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 
[moviePlayer prepareToPlay]; 
[moviePlayer play];
[self.view addSubview:moviePlayer.view];

Vous devez gérer le contrôleur qui affiche la vue du lecteur vidéo (qui est self dans ce cas).

Dans iOS 3.2 +, MPMoviePlayerViewController simplifie encore les choses:

NSString *videoURLString = @"http://path-to-iphone-compliant-video-stream";
NSURL *videoURL = [NSURL URLWithString:videoURLString];
MPMoviePlayerViewController *moviePlayerView = [[[MPMoviePlayerViewController alloc] initWithContentURL:videoURL] autorelease];
[self presentMoviePlayerViewControllerAnimated:moviePlayerView];

presentMoviePlayerViewControllerAnimated est une méthode supplémentaire de MediaPlayer à FWViewController que vous trouverez dans iOS 3.2+ et qui se charge de créer un contrôleur de vue et de le placer dans la pile, en l’animant avec une animation à partir du bas, comme dans youtube.app.

19
duhanebel

Apple a publié un article détaillé sur la configuration du côté serveur pour la diffusion multimédia en continu:

https://developer.Apple.com/library/content/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/Introduction/Introduction.html

et meilleures pratiques Note:

https://developer.Apple.com/library/content/technotes/tn2224/_index.html

Non seulement il contient des informations sur l'architecture du service de diffusion en continu et les outils utilisés pour le construire, mais il comporte également certaines exigences relatives à ce type de service à remplir ainsi que des références aux flux de test en direct.

7
Anton

Utilisez ce code pour utiliser peu de mémoire. En streaming vidéo ....

-(IBAction)playMovie:(NSURL *) theURL 
{
    NSURL    *fileURL    =   theURL;
    MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlaybackComplete:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:moviePlayerController];

    [self.view addSubview:moviePlayerController.view];
    moviePlayerController.useApplicationAudioSession = NO;
    moviePlayerController.fullscreen = YES;
    [moviePlayerController play];
}

- (void)moviePlaybackComplete:(NSNotification *)notification
{
    MPMoviePlayerController *moviePlayerController = [notification object];
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification
                                                  object:moviePlayerController];

    [moviePlayerController.view removeFromSuperview];
    [moviePlayerController release];
}
3
Dilip Rajkumar

Les vidéos QuickTime sont déjà diffusées sur le téléphone. Le chemin de moindre résistance serait d'utiliser le contrôleur de lecteur multimédia et de le diriger vers un fichier multimédia en continu sur un serveur de diffusion en continu.

2
Kevin Hoffman

Bien que les réponses existantes soient bonnes, si vous devez utiliser des flux non HTTP (mms ou rtmp par exemple) ou des codecs audio/vidéo non pris en charge par Apple, les choses deviennent un peu plus compliquées. 

Je ne suis pas moi-même un expert, mais je me sers de ce VideoStreaming SDK pour résoudre ces problèmes, et cela facilite la personnalisation du client (diffusion en arrière-plan, suspension des flux, etc.). Cela vaut peut-être la peine d’être examiné si vous avez également ces exigences.

1
Eran Galperin

2018 answer Vous pouvez utiliser AVPlayerViewController car MPMoviePlayerController est obsolète depuis iOS 9.

    NSURL *url = [NSURL URLWithString:videoUrl];

    _playerViewController = [[AVPlayerViewController alloc] init];
    _playerViewController.player = [AVPlayer playerWithURL:url];
    _playerViewController.player.volume = 1;
    _playerViewController.showsPlaybackControls = YES;

    _playerViewController.view.frame = CGRectMake(....);
    [self.view addSubview:_playerViewController.view];
0
Mutawe