2011-11-28 30 views
51

Tôi muốn viết một ứng dụng video iOS nhỏ và phải sử dụng Phát trực tiếp HTTP. Các video đến từ Máy chủ phương tiện Wowza hỗ trợ phát trực tiếp HTTP, vì vậy việc triển khai phía máy chủ không phải là vấn đề của tôi. Tôi đã xem các video về WWDC và đọc tài liệu của Apple về Phát trực tiếp HTTP.Triển khai Truyền trực tiếp HTTP trong iOS

Nhưng không có giải pháp nào về cách phát lại video trên thiết bị iOS. Trong một WWDC-talk đã được đề cập rằng có 3 possebilties để hiển thị các đoạn video:

  • UIWebView
  • MPMoviePlayerController
  • AVPlayerItem

Cái nào là tốt nhất?

Và làm cách nào tôi có thể đọc URL của video từ một trang HTML như thế này, trang này được máy chủ cung cấp?

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

(Nguồn: Apple HTTP Live Streaming Overview)

Tôi thực sự không biết bắt đầu từ đâu với mã hóa ... Có lẽ ai đó biết mã ví dụ tốt hơn so với gây phiền nhiễu "khâu Stream Player" hoặc có thể viết một ít hướng dẫn ...

Trả lời

54

Thực hiện ngắn và điểm. URL được bao gồm trỏ đến luồng hợp lệ (kể từ ngày 15 tháng 12 năm 2015), nhưng bạn chỉ có thể thay thế bằng URL của riêng mình thành tệp .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() 
    } 

} 

cập nhật câu trả lời cho cả hai ngôn ngữ. Ngoài ra, MPMoviePlayerController không được dùng nữa trong iOS 9, nhưng bạn có thể sử dụng AVPlayerViewController để thay thế. Happy Coding. !!!

+0

H Chris. Cảm ơn ví dụ đơn giản. Nó hoạt động tuyệt vời. Tôi tự hỏi làm thế nào để bạn tạo một tập tin .m3u8 từ một video? – Isuru

+3

Trang web của tôi đã ngừng hoạt động trong một thời gian nhưng bạn vẫn có thể truy cập bài đăng tôi đã viết ở đây: http://www.christopherlavender.com/tag/http-live-streaming/. Ngoài ra, có một số hướng dẫn cũ ra khỏi đó vẫn còn tốt. Điều quan trọng là nếu bạn đang đi để "vai trò của riêng bạn" video HLS, bạn sẽ cần các công cụ phân đoạn dòng lệnh từ trang web của nhà phát triển Apple. Họ làm việc tốt nhưng tài liệu là spotty lúc tốt nhất. – GnarlyDog

+0

Cảm ơn bạn đã hướng dẫn. Tôi sẽ nhìn vào nó ngay lập tức. :) – Isuru

5

Nếu bạn chỉ một UIWebView tại URL mục tiêu m3u8 đó, nó sẽ hoạt động.

+7

lol thats cụm từ yêu thích của tôi. tôi thích khi mọi thứ "làm việc" – uofc

Các vấn đề liên quan