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,就行了.当然里面的推流地址要更改.
推荐阅读
- Mac版简单好用的CAD看图工具(CAD迷你看图 for Mac(MiniCAD))
- Spring|Spring Security前后端分离实现
- 通过重新构建Kubernetes来实现更具弹性的容器编排系统
- java乐观锁和悲观锁最底层的实现
- 解决axios:"timeout of 5000ms exceeded"超时的问题
- vue顶部菜单栏实现小结
- java实现简单的俄罗斯方块
- 机器学习|吴恩达深度学习学习笔记——C1W2——神经网络基础——作业2——用神经网络的思路实现Logistic回归
- OC|iOS 设计模式 浅析MVC、MVP、MVVM
- 用jackson包实现json、对象、Map之间的转换