【问题标题】:Implementation of HTTP Live Streaming in iOSiOS中HTTP Live Streaming的实现
【发布时间】:2012-01-07 16:00:32
【问题描述】:

我想编写一个小的 iOS 视频客户端,并且必须使用 HTTP Live Streaming。视频来自支持 HTTP Live Streaming 的 Wowza 媒体服务器,所以服务器端的实现不是我的问题。 我已经观看了 WWDC 视频并阅读了有关 HTTP Live Streaming 的 Apple 文档。

但没有任何地方解释如何在 iOS 设备上播放视频。在 WWDC-talk 中提到有 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”更好的示例代码,或者可以写一个小教程。

【问题讨论】:

    标签: html ios iphone video http-live-streaming


    【解决方案1】:

    如果您将 UIWebView 指向该目标 m3u8 URL,它将正常工作。

    【讨论】:

      【解决方案2】:

      简明扼要的实现。包含的 URL 指向一个有效的流(截至 2015 年 12 月 15 日),但您可以将自己的 URL 替换为 .m3u8 文件。

      目标-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。快乐编码。!!!

      【讨论】:

      • H 克里斯。感谢您的简单示例。它工作得很好。我想知道如何从视频创建 .m3u8 文件?
      • 您好,感谢您的提醒。我厌倦了为托管一个我显然没有更新的博客付费。所以我把博文移到了 Gist 页面:gist.github.com/chrislavender/cad26500c9655627544f
      • 如果要创建自己的 HLS 内容,您可以通过 mediafilesegmenter 创建清晰和加密的内容以使用此 HLS 内容,您需要将此 TS 卡盘上传到 apache 服务器(带有 CA 签名的 HTTP 或 HTTPS)
      【解决方案3】:

      下面是我的 Swift 4 解决方案,AVPlayer

      [因为 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()
              }
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2014-01-21
        • 2012-01-18
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-01
        • 2013-12-25
        • 2017-05-23
        相关资源
        最近更新 更多