2011-11-28 14 views
51

Desidero scrivere un piccolo client video iOS e utilizzare HTTP Live Streaming. I video provengono da un Wowza Media Server che supporta HTTP Live Streaming, quindi l'implementazione lato server non è un mio problema. Ho già visto i video del WWDC e ho letto la documentazione di Apple su HTTP Live Streaming.Implementazione di streaming live HTTP in iOS

Ma non c'è da nessuna parte spiegato come riprodurre i video su un dispositivo iOS. In un WWDC-talk è stato detto che ci sono 3 possebilties per visualizzare i video:

  • UIWebView
  • MPMoviePlayerController
  • AVPlayerItem

Qual è il migliore?

E come posso leggere gli URL dei video da una pagina HTML come questi, che vengono forniti dal 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> 

(Fonte: Apple HTTP Live Streaming Overview)

io davvero non so da dove cominciare con codifica ... Forse qualcuno conosce meglio codice di esempio che il "Player flusso cucito" fastidiosa o può scrivere un piccolo tutorial ...

risposta

54

Un'implementazione breve e al punto. L'URL incluso punta a un flusso valido (a partire dal 15/12/2015), ma puoi semplicemente sostituire con il tuo URL in un file .m3u8.

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() 
    } 

} 

risposta Aggiornato per entrambe le lingue. Anche MPMoviePlayerController è obsoleto in iOS 9, ma è possibile utilizzare AVPlayerViewController. Coding felice. !!!

+0

H Chris. Grazie per il semplice esempio. Funziona alla grande. Mi chiedo come si crea un file .m3u8 da un video? – Isuru

+3

Il mio sito è inattivo da un po ', ma puoi ancora accedere a un post che ho scritto qui: http://www.christopherlavender.com/tag/http-live-streaming/. Inoltre, ci sono alcuni tutorial più vecchi là fuori che sono ancora buoni. La chiave è che, se hai intenzione di "interpretare i tuoi video HLS", avrai bisogno degli strumenti di segmentazione della riga di comando dal sito Web degli sviluppatori Apple. Funzionano bene ma la documentazione è discutibile al meglio. – GnarlyDog

+0

Grazie per il tutorial. Lo esaminerò subito. :) – Isuru

5

Se si punta un UIWebView a quell'URL m3u8 di destinazione, funzionerà.

+7

lol questa è la mia frase preferita. mi piace quando le cose "funzionano" – uofc

Problemi correlati