iOS中HTTP Live Streaming的实现
Posted
技术标签:
【中文标题】iOS中HTTP Live Streaming的实现【英文标题】:Implementation of HTTP Live Streaming in iOS 【发布时间】: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"
>
</video>
</body>
</html>
(来源:Apple HTTP Live Streaming Overview)
我真的不知道从哪里开始编码...也许有人知道比烦人的“Stitched Stream Player”更好的示例代码,或者可以写一个小教程。
【问题讨论】:
【参考方案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()
【讨论】:
以上是关于iOS中HTTP Live Streaming的实现的主要内容,如果未能解决你的问题,请参考以下文章
转: HTTP Live Streaming直播(iOS直播)技术分析与实现
HTTP Live Streaming直播(iOS直播)技术分析与实现
iOS_直播类app_HTTP Live Streaming
iOS_直播类app_HTTP Live Streaming