首先你要知道推流也是有協(xié)議的:
常見的流媒體協(xié)議有:
1.RTMP:Real Time Streaming Protocol, Adobe開發(fā)的協(xié)議
1.1.基于TCP的應(yīng)用層協(xié)議
1.2實時性在3秒左右
1.3.支持加密:RTMPE, RTMPS為加密協(xié)議
1.4.穩(wěn)定性高
1.5.客戶端和服務(wù)器要經(jīng)過握手爬泥,來建立基于傳輸層鏈接之上的RTMP鏈接猎唁,傳輸控制信息锅尘。
1.6.RTMP協(xié)議會對數(shù)據(jù)進(jìn)行自己的格式化著摔,格式化之后的數(shù)據(jù)叫RTMP Message
2.HLS:HTTP Live Streaming 是蘋果公司實現(xiàn)的
2.1.基于HTTP的流媒體協(xié)議。
2.2.HLS比RTMP有較高的延遲管闷。
2.3.HLS傳輸內(nèi)容包括兩部分粥脚,一是M3U8描述文件,二是TS媒體文件包个。
2.3.直播客戶端獲取到的刷允,并不是一個完整的數(shù)據(jù)流。HLS協(xié)議在服務(wù)器端將直播數(shù)據(jù)流存儲為連續(xù)的赃蛛、很短時長的媒體文件(MPEG-TS格式)恃锉,而客戶端則不斷的下載并播放這些小文件,因為服務(wù)器端總是會將最新的直播數(shù)據(jù)生成新的小文件呕臂,這樣客戶端只要不停的按順序播放從服務(wù)器獲取到的文件破托,就實現(xiàn)了直播。
我們大多會采用RTMP進(jìn)行推流, 因為該協(xié)議實時性非常的高, 但是將Message封裝成Trunk的過程非常麻煩, 所有我們這里直接介紹框架實現(xiàn)推流:
Swift框架: lf.swift
OC框架: LFLiveKit
OC框架代碼:
- (LFLiveSession*)session {
if (!_session) {
_session = [[LFLiveSession alloc] initWithAudioConfiguration: [LFLiveAudioConfiguration defaultConfiguration] videoConfiguration: [LFLiveVideoConfiguration defaultConfiguration]];
_session.preView = self.view;
_session.delegate = self;
}
return _session;
}
- (IBAction)startLive {
LFLiveStreamInfo *streamInfo = [LFLiveStreamInfo new];
streamInfo.url = @"rtmp://47.92.137.30/live/demo";
self.session.running = YES;
[self.session startLive:streamInfo];
}