直播系列四、HLS拉流

HTTP Live Streaming (HLS)

苹果官方对于视频直播服务提出了 HLS 解决方案,该方案主要适用范围在于:

  • 使用 iPhone 、iPod touch、 iPad 以及 Apple TV 进行流媒体直播功能。(MAC 也能用)
  • 不使用特殊的服务软件进行流媒体直播。
  • 需要通过加密和鉴定(authentication)的视频点播服务。

HLS 的目的在于,让用户可以在苹果设备(包括MAC OS X)上通过普通的网络服务完成流媒体的播放。 HLS 同时支持流媒体的实时广播和点播服务。同时也支持不同 bit 速率的多个备用流(平时根据当前网速去自适应视频的清晰度),这样客户端也好根据当前网络的带宽去只能调整当前使用的视频流。安全方面,HLS 提供了通过 HTTPS 加密对媒体文件进行加密 并 对用户进行验证,允许视频发布者去保护自己的网络。

HLS 是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。

HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

更多信息戳这里

拉流

使用FFmpeg或者LFLiveKit推流之后,会获得一个点播链接,用该链接播放视频即可。Safari或者VLC中都可以播放。iOS使用AVPlayer进行播放。代码如下:

// 设置资源路径
NSString *m3u8 = @"http://localhost:8080/hls/a/a.m3u8";
NSURL *url = [NSURL URLWithString:m3u8];
AVPlayer *avPlayer= [AVPlayer playerWithURL:url];
// player的控制器对象
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
// 控制器的player播放器
playerViewController.player = avPlayer;
// 试图的填充模式
playerViewController.videoGravity = AVLayerVideoGravityResizeAspect;
// 是否显示播放控制条
playerViewController.showsPlaybackControls = YES;
// 设置显示的Frame
playerViewController.view.frame = self.view.bounds;
_playerViewController = playerViewController;
// 将播放器控制器添加到当前页面控制器中
[self addChildViewController:_playerViewController];
// view一定要添加,否则将不显示
[self.view addSubview:playerViewController.view];
// 播放
[playerViewController.player play];

参考:

HTTP Live Streaming Guide