web-dev-qa-db-ja.com

iOSでのHTTPライブストリーミングの実装

ちょっとしたiOSビデオクライアントを作成し、HTTPライブストリーミングを使用する必要があります。ビデオはHTTPライブストリーミングをサポートするWowza Media Serverから取得されるため、サーバー側の実装は私の問題ではありません。私はすでにWWDCビデオを見て、HTTP Live Streamingに関するAppleドキュメントを読んでいます。

しかし、iOSデバイスでビデオを再生する方法については説明されていません。 WWDCトークで、ビデオを表示するための3つの可能性があると言及されました。

  • UIWebView
  • MPMoviePlayerController
  • AVPlayerItem

どれが最高ですか?

そして、サーバーによって提供されるこれらのようなHTMLページからビデオURLを読み取るにはどうすればよいですか?

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

(ソース: Apple HTTP Live Streaming Overview

コーディングをどこから始めるべきか本当にわかりません...誰かが迷惑な「Stitched Stream Player」よりも良いコード例を知っているか、小さなチュートリアルを書くことができます。

53
Lindemann

短くてポイントの実装。含まれるURLは有効なストリーム(2015年12月15日現在)を指しますが、.m3u8ファイルへの独自のURLに置き換えることができます。

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

スイフト:

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

}

両方の言語の回答を更新しました。また、MPMoviePlayerControllerはiOS 9では非推奨ですが、代わりにAVPlayerViewControllerを使用できます。ハッピーコーディング。!!!

55
GnarlyDog

そのターゲットm3u8 URLでUIWebViewをポイントすると、それは機能します。

5
jab

以下は私のSwift 4AVPlayerを使用したソリューションです

[MPMoviePlayerControllerはiOS 9で廃止されているため]

import UIKit
import AVKit
...

class VideoPlayerViewController: UIViewController {

    var player: AVPlayer?

    override func viewDidLoad() {
        super.viewDidLoad()

        guard let url = URL(string: "http://stream-url.com/file.m3u8") else {
            print("Umm, looks like an invalid URL!")
            return
        }

        player = AVPlayer(url: url)
        let controller = AVPlayerViewController()
        controller.delegate = self
        controller.player = player

        // present the player controller & play
        present(controller, animated: true) {
            self.player?.play()
        }
    }

}
1
Rao