ios实现简单直播

本文模仿映客直播,简单实现了直播功能.
demo地址:https://github.com/sunqishuang/LikeFayerLiveAPP
直播的第三方有很多.如果公司有钱,可以买现成的服务.本文使用的都是免费的第三方框架.
直播的理论传输过程:采集,处理,编码,封包,推流,传输,转码,分发,拉流,解码,播放.
我们通过摄像头采集数据.经过处理,然后将处理的数据推送到服务器.当一个用户在打开主播的直播时,用户端就是去请求这个服务器,获取到服务器中的数据,然后展示播放.
主播端给服务器的传输协议:RTMP
服务器给观众端的传输协议:RTMP或者HLS
RTMP:基于TCP的长链接,每个时刻的数据,收到后立即转发,延时1-3秒
【ios实现简单直播】HLS:基于HTTP的短链接,集合一段时间数据,生成1秒的切片文件,更新m3u8,延迟大于10秒
所里拉流端如果使用RMTP传输协议,一段就没法缓存的.使用HLS协议是可以缓存的(服务器对结束的主播数据,进行切片处理,同时可以保存).
说了那么多废话,我就来直接说大家关心的两个点:拉流,推流.
1.拉流
拉流说白了就是客户端要做的.哔哩哔哩为我们提供了免费的视频直播框架:基于FFMPEG的IJKPlayer.(如果你不想用,可得自己花时间研究ffmpeg)
集成IJKPlayer:http://www.jianshu.com/p/1f06b27b3ac0 (这位大神写得很详细了,我就不重复了)
在要播放的位置,初始化IJKPlayer就好:

#pragma mark ---------------------------------------------- 初始化配置Player - (void)configPlayer{IJKFFOptions *options = [IJKFFOptions optionsByDefault]; self.player = [[IJKFFMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:_liveModel.stream_addr] withOptions:options]; self.player.view.frame = self.view.bounds; self.player.shouldAutoplay = YES; [self.view addSubview:self.player.view]; }

只要在初始化的时候,直接传入拉流地址,就可以直接播放了.
在viewwillappear中
//准备播放 [self.player prepareToPlay];

在viewWillDisappear
//结束播放 [self.player shutdown];

2.推流
推流就是主播端上传采集的数据.集成LFLiveKit就行.
直接用cocoapods集成就好 :pod 'LFLiveKit'
先去github中下载一个LFLiveKit的demo.
找到里面的LFLivePreview类,直接是采集数据的View,在需要的控制器空,添加上一个view,就行了.当然里面的推流地址要更改.

    推荐阅读