2011-11-28 24 views
51

Biraz iOS video istemcisi yazmak ve HTTP Live Streaming kullanmak zorundayım. Videolar, HTTP Canlı Akışını destekleyen bir Wowza Medya Sunucusundan geliyor, bu yüzden sunucu tarafı uygulaması benim sorunum değil. WWDC videolarını çoktan izledim ve HTTP Live Streaming hakkında Apple belgelerini okudum.iOS'ta HTTP Live Streaming'in uygulanması

Ancak videoların bir iOS aygıtında nasıl oynatılacağı artık açıklanmadı.

  • UIWebView
  • MPMoviePlayerController
  • AVPlayerItem

hangisi en iyisi: Bir WWDC-konuşmasında videoları göstermek için 3 possebilties olduğu bahsedildi?

Video URL'lerini, sunucu tarafından sağlanan bu gibi HTML sayfalarından nasıl okuyabilirim?

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

(Kaynak: Apple HTTP Live Streaming Overview)

Gerçekten ... Belki birileri rahatsız edici "Dikişli Akış Player" den daha iyi bir örnek kod biliyor ya da biraz öğretici yazabilirsiniz kodlama için nereden başlayacağımı bilmiyorum ...

cevap

54

Kısa ve nokta uygulaması. Girilen URL geçerli bir akışa işaret ediyor (12/15/2015 itibariyle), ancak kendi URL'nizle bir .m3u8 dosyasına geçebilirsiniz.

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: Her iki dil için

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

} 

Güncelleme cevap. Ayrıca, MPMoviePlayerController, iOS 9'da kullanımdan kaldırılmıştır, ancak bunun yerine AVPlayerViewController'u kullanabilirsiniz. Mutlu Kodlama.

+0

H Chris. Basit örnek için teşekkürler. Harika çalışıyor. Bir videodan nasıl bir .m3u8 dosyası oluşturuyorsunuz merak ediyorum? – Isuru

+3

Sitem bir süredir çalışmıyor, ancak buraya yazdığım bir gönderiye hala erişebilirsiniz: http://www.christopherlavender.com/tag/http-live-streaming/. Ayrıca, hala iyi olan bazı eski öğreticiler var. Önemli olan, "kendi" HLS videolarınızı "rol" yapacaksanız, Apple Geliştirici web sitesinden komut satırı bölümleme araçlarına ihtiyacınız olacaktır. İyi çalışıyorlar ama belgeler en iyi ihtimalle sivilceli. – GnarlyDog

+0

Eğitim için teşekkürler. Hemen bakacağım. :) – Isuru

5

UIWebView öğesini bu hedef m3u8 URL'sine yönlendirirseniz, yalnızca çalışır.

+7

Bu en sevdiğim dileğimdir. "Sadece işe yarar" olaylarını seviyorum – uofc