直播系列三、RTMP推流

1.RTMP协议

参考: RTMP.docx

2. MAC使用FFmpeg推流

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

执行命令安装ffmpeg

brew install ffmpeg

把H.264和AAC码流封装成mp4格式

ffmpeg -i abc.h264 -i abc.aac -vcodec copy -f mp4 abc.mp4

把mp4视频打包成ts流

ffmpeg -i abc.mp4 -c:v libx264 -c:a copy -f hls abc.m3u8

打包结果如下:

img

复制这三个文件到/usr/local/var/www路径下, 使用 http://localhost:8080/abc.m3u8 即可进行点播。

ffmpeg推rtmp流

ffmpeg -re -i 视频的绝对路径 -vcodec copy -acodec copy  -f flv rtmp://localhost:1935/live1/room

将视频推流到服务器后,打开VLC,rtmp://localhost:1935/live1/room
如果要运行在手机上,则为:rtmp://电脑的ip:1935/live1/room

ffmpeg推hls流

ffmpeg -re -i 视频的据对路径 -vcodec copy -acodec copy  -f flv rtmp://localhost:1935/hls/room

将视频推流到服务器后,打开VLC,http://localhost:1935/hls/room.m3u8
如果要运行在手机上,则为:http://电脑的ip:1935/hls/room.m3u8

3. iOS使用LFLiveKit推流

新建一个Xcode工程,在podfile输入pod ‘LFLiveKit’,执行pod install。代码很简单,如下:

- (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/live";
        [self.session startLive:stream];
    }
    else {
        [sender setTitle:@"开始直播" forState:UIControlStateNormal];
        [self.session stopLive];
    }
}

推流后索引文件及视频切片会保存在/usr/local/var/www/hls文件夹下面,名称与推流路径相同(这里都是live)。
更多代码参考:RtmpPush

想深入了解rtmp的推流过程、应对网络变化的丢帧策略等可以看LFLiveKit的源码.

FFmpeg常用指令

FFmpeg常用指令2