在前面我们介绍了从麦克风采集声音并用AudioToolbox编码成AAC码流和从摄像头采集图像并用VideoToolbox编码成H.264码流,也尝试了把这两个格式的文件打包成TS流,并用通过HLS协议在浏览器播放,这一篇是在HLS点播实现(H.264和AAC码流)基础上的延续,进行HLS的推流。
配置Nginx以支持HLS的推流与拉流,iOS系统使用LFLiveKit推流,OS X系统使用FFmpeg推流,拉流端可以使用Safari浏览器或者VLC播放器。
在终端输入open -t /usr/local/etc/nginx/nginx.conf
,找到图中代码位置,在下面插入配置信息。
location /hls {
#Serve HLS config
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /usr/local/var/www;
add_header Cache-Control no-cache;
}
在终端输入open -t /usr/local/etc/nginx/nginx.conf
,找到图中代码位置,在下面插入配置信息。
application hls{
live on;
hls on;
hls_path /usr/local/var/www/hls;
hls_fragment 1s;
}
在终端输入nginx -s reload
,重启Nginx。
如果在修改配置文件,重启遇到
[error] open() "/usr/local/var/run/nginx.pid" failed
可以用下面的命令重新加载配置nginx -c /usr/local/etc/nginx/nginx.conf
使用FFmpeg对前文生成的mp4文件进行推流(FFmpeg的安装看HLS点播实现(H.264和AAC码流))
在终端输入指令:
ffmpeg -re -i abc.mp4 -vcodec copy -acodec copy -f flv rtmp://localhost:1935/hls/abc
-vcodec copy 表示原有的编码,否则ffmpeg会重新编码,导致CPU飙升到200%以上 简书上有些对已有文件的推流ffmpeg指令是
ffmpeg -re -i abc.mp4 -vcodec libx264 -acodec aac
,这是不合理的地方,要特别注意!
新建一个Xcode工程,在podfile输入pod 'LFLiveKit'
,执行pod install
。
附上简单开始推流代码:(LFLiveKit大赞)
- (IBAction)onStart:(UIButton *)sender {
if ([sender.currentTitle isEqualToString:@"开始直播"]) {
[sender setTitle:@"结束直播" forState:UIControlStateNormal];
LFLiveStreamInfo *stream = [LFLiveStreamInfo new];
stream.url = @"rtmp://172.17.44.151:1935/hls/abc";
[self.session startLive:stream];
}
else {
[sender setTitle:@"开始直播" forState:UIControlStateNormal];
[self.session stopLive];
}
}
完整工程代码点这里:代码地址
注意事项 Nginx服务器是在Mac跑的,iOS推流端不能把推流地址写成localhost!!! 在terminal输入
ifconfig | grep inet
然后如果是局域网地址,iOS和Mac需要在同一个网络里面。
iOS端推流界面
打开Mac自带的Safari浏览器,在地址栏输入:
http://localhost:8080/hls/abc.m3u8
打开VLC播放器,Command+N,在地址栏输入:
http://localhost:8080/hls/abc.m3u8
本来想手写一次RTMP的推流,但是看到LFLiveKit之后,我觉得不用重复造轮子了,其详细的代码已经足够深入学习。
至此,我们熟悉了以下知识点:
想深入了解rtmp的推流过程、应对网络变化的丢帧策略等可以看LFLiveKit的源码。
附上收藏的FFmpeg指令:
FFmpeg常用指令2(https://link.jianshu.com/?t=%5Bhttp://blog.csdn.net/weiyuefei/article/details/51678582%5D(http://blog.csdn.net/weiyuefei/article/details/51678582%29)