Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Implementation of HTTP Live Streaming in iOS

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:

  • UIWebView
  • MPMoviePlayerController
  • AVPlayerItem

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.

like image 695
Lindemann Avatar asked Nov 28 '11 04:11

Lindemann


People also ask

Can you live stream on iOS?

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.

How does HTTP Live Streaming work?

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.

How do you implement HLS stream?

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.


2 Answers

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.!!!

like image 139
GnarlyDog Avatar answered Oct 02 '22 12:10

GnarlyDog


If you point a UIWebView at that target m3u8 URL, it will just work.

like image 27
jab Avatar answered Oct 02 '22 12:10

jab