Implementation of HTTP Live Streaming in iOS
A short and to the point implementation. The included URL points to a valid stream (as of 12/15/2015), but you can just replace with your own URL to a .m3u8 file.
Objective-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 UIKitimport MediaPlayerclass 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() }}
Updated answer for both the languages. Also MPMoviePlayerController
is deprecated in iOS 9, but you can use AVPlayerViewController
instead. Happy Coding.!!!
If you point a UIWebView at that target m3u8 URL, it will just work.
Below is my Swift 4 solution with AVPlayer
[since MPMoviePlayerController
is deprecated in iOS 9]
import UIKitimport 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() } }}