Je veux écrire un petit client vidéo iOS et je dois utiliser HTTP Live Streaming. Les vidéos proviennent d'un serveur multimédia Wowza qui prend en charge le streaming HTTP en direct, donc l'implémentation côté serveur n'est pas mon problème. J'ai déjà regardé les vidéos de la WWDC et lu la documentation Apple sur HTTP Live Streaming.
Mais il n'y a nulle part expliqué comment lire les vidéos sur un appareil iOS. Lors d'une conférence sur la WWDC, il a été mentionné qu'il y avait 3 possibilités pour afficher les vidéos:
Lequel est le meilleur?
Et comment puis-je lire les URL des vidéos à partir d'une page HTML comme celles-ci, qui sont fournies par le serveur?
<html>
<head>
<title>HTTP Live Streaming Example</title>
</head>
<body>
<video
src="http://devimages.Apple.com/iphone/samples/bipbop/bipbopall.m3u8"
height="300" width="400"
>
</video>
</body>
</html>
(Source: Présentation de la diffusion en direct HTTP Apple )
Je ne sais vraiment pas par où commencer avec le codage ... Peut-être que quelqu'un connaît un meilleur exemple de code que l'ennuyeux "Stitched Stream Player" ou peut écrire un petit tutoriel.
Une mise en œuvre courte et précise. L'URL incluse pointe vers un flux valide (au 15/12/2015), mais vous pouvez simplement le remplacer par votre propre URL vers un fichier .m3u8.
Objectif-C:
#import <MediaPlayer/MediaPlayer.h>
@interface ViewController ()
@property (strong, nonatomic) MPMoviePlayerController *streamPlayer;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *streamURL = [NSURL URLWithString:@"http://qthttp.Apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"];
_streamPlayer = [[MPMoviePlayerController alloc] initWithContentURL:streamURL];
// depending on your implementation your view may not have it's bounds set here
// in that case consider calling the following 4 msgs later
[self.streamPlayer.view setFrame: self.view.bounds];
self.streamPlayer.controlStyle = MPMovieControlStyleEmbedded;
[self.view addSubview: self.streamPlayer.view];
[self.streamPlayer play];
}
- (void)dealloc
{
// if non-ARC
// [_streamPlayer release];
// [super dealloc];
}
@end
Swift:
import UIKit
import MediaPlayer
class ViewController: UIViewController {
var streamPlayer : MPMoviePlayerController = MPMoviePlayerController(contentURL: NSURL(string:"http://qthttp.Apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"))
//Let's play
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
streamPlayer.view.frame = self.view.bounds
self.view.addSubview(streamPlayer.view)
streamPlayer.fullscreen = true
// Play the movie!
streamPlayer.play()
}
}
Réponse mise à jour pour les deux langues. MPMoviePlayerController
est également déconseillé dans iOS 9, mais vous pouvez utiliser AVPlayerViewController
à la place. Codage heureux. !!!
Si vous pointez un UIWebView vers cette URL m3u8 cible, cela fonctionnera simplement.
Voici ma solution Swift 4 avec AVPlayer
[puisque MPMoviePlayerController
est déconseillé dans iOS 9]
import UIKit
import AVKit
...
class VideoPlayerViewController: UIViewController {
var player: AVPlayer?
override func viewDidLoad() {
super.viewDidLoad()
guard let url = URL(string: "http://stream-url.com/file.m3u8") else {
print("Umm, looks like an invalid URL!")
return
}
player = AVPlayer(url: url)
let controller = AVPlayerViewController()
controller.delegate = self
controller.player = player
// present the player controller & play
present(controller, animated: true) {
self.player?.play()
}
}
}