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!
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.
Apple a publié un article détaillé sur la configuration du côté serveur pour la diffusion multimédia en continu:
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.
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];
}
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.
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.
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];