【iOS】视频直播与RTMP推流

视频直播很火,涉及的东西也多,需要优化的东西更多。如果使用第三方SDK会省下很多精力就可以做一个流畅直播app。本文记录不使用三方直播SDK实现直播,包括Nginx配置、推流、播放等。


Nginx模块配置RMTP

nginx需要安装nginx-rtmp-module模块才能进行rtmp推流. 因此需要自己编译nginx源码并安装模块.

基本安装配置

1
2
3
4
5
6
7
8
9
10
$ sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev unzip 依赖
$ wget http://nginx.org/download/nginx-1.11.3.tar.gz 下载Nginx(可以改版本号)
$ tar -zxvf nginx-1.11.3.tar.gz 解压
$ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip 下载RTMP模块
$ unzip nginx-rtmp-module-master.zip 解压(和nginx解压在同一根目录)
$ ./configure --add-module=../nginx-rtmp-module-master 配置并增加模块(跳转到Nginx解压目录执行)
$ make
$ sudo make install

Nginx服务器配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
rtmp {
server {
listen 1935;
#直播流配置, application后的名字可改
application mylive {
live on;
#为 rtmp 引擎设置最大连接数。默认为 off
max_connections 1024;
}
application hls{
live on;
hls on;
hls_path /usr/local/var/www/hls;
hls_fragment 1s;
}
}
}

推流

由上面的配置, 再加上我的本地服务器地址得到rtmp推流地址为:
rtmp://192.168.2.109:1935/mylive/room

  1. 使用ffmpeg工具推流

    1
    $ ffmpeg -re -i /Users/xuneng/Desktop/Testfile/Rolling_in_the_deep.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://192.168.2.109:1935/mylive/room
  2. 使用OBS等软件推流
    只需要填入地址即可rtmp://192.168.2.109:1935/mylive/room

播放

  1. 使用ffmpeg工具播放

    1
    $ ffplay rtmp://192.168.2.109:1935/mylive/room 直接播放网络直流
  2. 使用VLC等播放器播放
    打开VLC,然后File->open network->输入:
    rtmp://192.168.2.109:1935/mylive/room

iOS端推流与播放

服务器还是用上面的Nginx配置, iOS端主要做推流与播放.
推流有很多框架可以用,有基于C++的,也有OC的, 有的还集成了GPUImage进行美颜等功能.
https://github.com/jgh-/VideoCore C++很多推流框架都是对VideoCore的二次开发
https://github.com/runner365/LiveVideoCoreSDK C++美颜直播和滤镜功能
https://github.com/LaiFengiOS/LFLiveKit OC写的.(集成GPUImage)

播放端主要将收到的流进行播放, 有很多需要优化的地方. 用的比较多的是基于ffmpeg的ijkplayer.
https://github.com/Bilibili/ijkplayer (基于FFmpeg, 支持VideoToolbox)
https://github.com/pili-engineering/PLPlayerKit 又一个播放的
https://wiki.videolan.org/VLCKit/ VLC的(MobileVLCKit)

以后有时间再总结并写一些iOS优化相关的文章.

转载请注明出处,有疑问欢迎留言!