是苹果公司实现的基于 HTTP 的流媒体传输协议,全称 HTTP Live Streaming
。当推流端将采集到的视频流推到服务器时,服务器会将视频流封包成一个个新的ts文件,并创建一个m3u8索引文件来管理这个ts文件。像一些视频网站开始播放视频的时候会请求一个m3u8文件,里面是一段段的ts分片,一边看视频一边下载其他的ts文件,这个就是hls。适合点播。
实时消息传输协议,全称为Real Time Messaging Protocol
,和hls相比,最大的优点就是延迟小,基本上能维持在5s左右,hls大概在30秒,而且服务器不会有落地文件,直播基本上都用rtmp协议。
docker pull jasonrivers/nginx-rtmp
docker run -d --name live -p 1935:1935 -p 8080:8080 jasonrivers/nginx-rtmp
/*
Streaming Service: Custom
Server: rtmp://<your server ip>/live
Play Path/Stream Key: mystream
*/
rtmp地址:rtmp://<your server ip>/live/mystream
hls地址:http://<your server ip>/hls/mystream.m3u8
使用LFLiveKit
进行推流
lazy var session: LFLiveSession = {
let audioConfiguration = LFLiveAudioConfiguration.default()
let videoConfiguration = LFLiveVideoConfiguration.defaultConfiguration(for: LFLiveVideoQuality.low3, outputImageOrientation: UIInterfaceOrientation.portrait)
let session = LFLiveSession(audioConfiguration: audioConfiguration, videoConfiguration: videoConfiguration)
session?.delegate = self
session?.preView = self.view
return session!
}()
@IBAction func startLive() -> Void {
let stream = LFLiveStreamInfo()
// http://159.203.244.176/hls/hqqsk8.m3u8
stream.url = "rtmp://159.203.244.176/live/hqqsk8";
session.startLive(stream)
session.running = true
}
@IBAction func stopLive() -> Void {
session.stopLive()
session.running = false
}
使用IJKPlayer
进行拉流
fileprivate var player : IJKFFMoviePlayerController?
player = IJKFFMoviePlayerController(contentURLString: "rtmp://192.168.1.104/live/hqqsk8", with: IJKFFOptions.byDefault())
player!.view.frame = view.bounds
view.addSubview(player!.view)
player?.prepareToPlay()
使用OBS推流,使用VLC拉流