I want to write a little iOS video client and have to use HTTP Live Streaming. The videos come from a Wowza Media Server which supports HTTP Live Streaming, so the server-side implementation is not my problem. I have already watch the WWDC videos and read the Apple documentation about HTTP Live Streaming.
But there is nowhere explained how to play back the videos on an iOS device. In a WWDC-talk was mentioned that there are 3 possibilities to display the videos:
Which one is the best?
And how can I read out the video-URL's from a HTML-Page like these, which become provided by the server?
<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: Apple HTTP Live Streaming Overview)
I really don't know where to start with coding...Maybe somebody know better example code than the annoying "Stitched Stream Player" or can write a little tutorial.
Broadcasting a live stream from your iPhone camera is pretty much as simple as everything else you can do with your iPhone, which means it's pretty darn easy—no camera add-ons or extra microphones required. Read on to find out what you need to have and what you need to know to get started.
With streaming over HTTP, the standard request-response pattern does not apply. The connection between client and server remains open for the duration of the stream, and the server pushes video data to the client so that the client does not have to request every segment of video data.
To implement HLS to the Android application you can use ExoPlayer - an application media player for Android OS. It is built on top of Android's low level media APIs, ExoPlayer offers a more powerful and more robust alternative to MediaPlayer, with additional features and customization flexibility.
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 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() } }
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With