2011-11-28 15 views
51

Chcę napisać mały klient wideo iOS i używać HTTP Live Streaming. Filmy pochodzą z serwera Wowza Media Server obsługującego strumieniowanie HTTP na żywo, więc implementacja po stronie serwera nie jest moim problemem. Oglądałem już filmy WWDC i czytałem dokumentację Apple na temat przesyłania strumieniowego HTTP.Implementacja HTTP Live Streaming w iOS

Jednak nie ma informacji na temat sposobu odtwarzania filmów na urządzeniu z systemem iOS. W WWDC-talk wspomniano, że istnieją 3 possebilties do wyświetlania filmów:

  • UIWebView
  • MPMoviePlayerController
  • AVPlayerItem

Który z nich jest najlepszy?

Jak mogę odczytać adresy URL wideo z takich stron HTML, które są dostarczane przez serwer?

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

(Źródło: Apple HTTP Live Streaming Overview)

ja naprawdę nie wiem od czego zacząć kodowanie ... Może ktoś wiedzieć lepszy przykład kodu niż irytujące „szyte Stream Player” lub może napisać mały poradnik ...

Odpowiedz

54

Krótka i do realizacji punktowej. Dołączony adres URL wskazuje na poprawny strumień (stan na 12/15/2015), ale możesz po prostu zastąpić własny adres URL plikiem .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() 
    } 

} 

Updated odpowiedź dla obu języków. Również MPMoviePlayerController jest przestarzałe w systemie iOS 9, ale można zamiast tego użyć AVPlayerViewController. Happy Coding. !!!

+0

H Chris. Dzięki za prosty przykład. Działa świetnie. Zastanawiam się, w jaki sposób utworzyć plik .m3u8 z wideo? – Isuru

+3

Moja strona jest niedostępna przez jakiś czas, ale nadal możesz uzyskać dostęp do wpisu, który tutaj napisałem: http://www.christopherlavender.com/tag/http-live-streaming/. Ponadto istnieją pewne starsze samouczki, które nadal są dobre. Kluczem jest to, że jeśli zamierzasz tworzyć własne filmy HLS, będziesz potrzebował narzędzi do dzielenia wiersza poleceń z witryny Apple Developer. Działają dobrze, ale dokumentacja jest w najlepszym wypadku nierówna. – GnarlyDog

+0

Dzięki za tutorial. Zajrzę do tego od razu. :) – Isuru

5

Jeśli wskażesz UIWebView pod tym adresem docelowym m3u8, po prostu zadziała.

+7

lol to moja ulubiona fraza. Uwielbiam, gdy rzeczy "po prostu działają" – uofc