【一文读懂】iOS直播 - 搭建服务端解析

前言

其实本人一直都想自己简单做一套直播(包括移动端和服务端)的开发测试,但是之前一直做得比较迷茫。最近偶然间来了灵感,瞬间解除了我很多疑惑。

我会分享出来,希望大家一起研究下。稍后,我完整做好了,会更新一篇完整的做的过程。今天,我们先搭建一下直播部分的服务端。

1、安装Homebrow

Homebrew简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,可以说Homebrew就是mac下的apt-get、yum神器

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

(滑动显示更多)

如果安装过,想要卸载的话 

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

(滑动显示更多)

2、安装Nginx服务器

brew tap homebrew/nginx

增加对Nginx的扩展;也就是从github上下载,home-brew对nginxnx的扩展。

3、安装Nginx服务器和RTMP模块

brew install nginx-full --with-rtmp-module

(滑动显示更多)

这个安装,耗时相对来说比较长。通过操作以上步骤Nginx和RTMP模块就安装好了,下面开始来配置Nginx的RTMP模块。

brew info nginx-full

nginx安装所在位置 /usr/local/Cellar/nginx-full/1.10.1/bin/nginx nginx配置文件所在位置 /usr/local/etc/nginx/nginx.conf nginx服务器根目录所在位置 /usr/local/var/www执行命令,测试下是够能成功启动nginx服务

nginx

点击 http://localhost:8080, 看到 Welcome to nginx! ,就说明nginx安装成功了。

4、配置RTMP

用Xcode打开nginx.conf,找到/usr/local/etc/nginx/nginx.conf 文件,拖入到Dock中的Xcode,就可以打开。

文件内容说明:

  • rtmp是协议名称

  • server 说明内部中是服务器相关配置

  • listen 监听的端口号,rtmp协议的默认端口号是1935

  • application 访问的应用路径是zbcs

  • live on 开始实时

  • record off 不记录数据

5、保存文件后,重新加载Nginx的配置文件

nginx -s reload

#这一步很重要

6、安装ffmepg工具

brew install ffmpeg

安装这个需要等一段时间,这时,你可以准备一个视频文件作为来推流,然后安装一个支持rtmp协议的视频播放器。Mac下可以用VLC。

7、 通过ffmepg命令进行推流

ffmpeg -re -i 你的视频文件的绝对路径(如/Users/lideshan/Downloads/Demo.mp4)  -vcodec copy -f flv rtmp://localhost:1935/zbcs/room

(滑动显示更多)

这里zbcs是上面的配置文件中,配置的应用的路径名称;后面的room可以随便写。

8、验证视频

然后电脑上打开VLC这个播放器软件, 点击File-----Open Network 在弹出来的框中选择Network然后输入URL:

rtmp://localhost:1935/zbcs/room

接下来 HLS直播流配置

 sudo /usr/local/nginx/sbin/nginx -s stop sudo /usr/local/nginx/sbin/nginx

(滑动显示更多)

找到http----server,在花括号中增加

server {    listen    8080;    server_name localhost;    #charset koi8-r;    #access_log logs/host.access.log main;    location/ {        root   html;        index index.html index.htm;    }    #HLS配置开始,这个配置为了‘客户端‘能够以http协议获取HLS的拉流    location /hls{        # Serve HLS fragments        types {            application/vnd.apple.mpegurlm3u8;            video/mp2t ts;        }        root html;        add_ header Cache-Control no-cache;    }    #HLS配置结束    #error_page   404  /404.html;    # redirect server error pages to the static page /    50x.html    #    error_page  500 502 503 504 /50x.html;    location = /50x.html {        root   html;    }    # proxy the PHP scripts to Apache listening on    127.0.0.1:80    #    #location ~ \.php$ {    #   proxy_pass   http://127.0.0.1;    #}

(滑动显示更多)

找到rtmp下的server在花括号中增加

rtmp {    server {        listen 1935;        application zbcs {            live on;            revord off;        }        application live {            live on;            revord off;        }        #增加对HLS支持开始        application hls {            live on;            hls on;            hls_path /usr/local/var/www/hls;            hls_fragment 5s;        }        #增加对HLS支持结束    }}

(滑动显示更多)

说明:

  • live on 开启实时

  • hls on 开启hls

  • hls_path ts文件存放路径

  • hls_fragment 5s 每个TS文件包含5秒的视频内容

HLS直播延时

我们知道hls协议是将直播流分成一段一段的小段视频去下载播放的,所以假设列表里面的包含5个ts文件,每个TS文件包含5秒的视频内容,那么整体的延迟就是25秒。

因为当你看到这些视频时,主播已经将视频录制好上传上去了,所以是这样产生的延迟。当然可以缩短列表的长度和单个ts文件的大小来降低延迟,极致来说可以缩减列表长度为1,并且ts的时长为1s。

但是这样会造成请求次数增加,增大服务器压力,当网速慢时会造成更多的缓冲,所以苹果官方推荐的ts时长时10s,所以这样就会大改有30s的延迟。

保存配置文件,重新加载Nginx配置

nginx -s reload

进行推流

ffmpeg推流还是和上一篇的一样,不过,我们需要推到新配置的hls中,movie关键字可以任何替换

ffmpeg -re -i /Users/jiangys/Documents/Document/demo.mp4 -vcodec copy -f flv rtmp://localhost:1935/hls/movie

(滑动显示更多)

然后我们可以在这个目录下(这也是Nginx下html默认配置文件)

/usr/local/var/www/hls

看到生成一个个ts的文件,还会生成一个以.m3u8格式的文件

测试拉流

通过上面的配置,我们可以同时通过rtmp和hls两种播放方式来看到退出来的流。注意,如果使用http方式,则是监听的8080端口,这个是在配置文件中写的

  • 1用rtmp:(使用VLC验证播放)

rtmp://192.168.1.109/hls/movie

  • 2 用HLS播放

http://192.168.1.109:8080/hls/movie.m3u8

(滑动显示更多)

补充:

1、HLS中,我们想把流生成的ts文件存放在指定的目录下,比如“/tmp/hls” root html 是指使用当前Nginx服务器根目录所在位置,指向的是/usr/local/var/www 这个目录。

最终,我们要使用Nginx和rtmp插件搭建视频直播和点播服务器

使用 Nginx和rtmp模块,可以很容易地搭建一个视频直播和点播的服务器出来。我们已经安装好了Nginx和rtmp模块 接下来配置Nginx视频直播和点播服务。

对于视频直播服务,如果需要支持多路流输入的话,很简单,在Nginx配置文件里多配几个Application就可以了,像下面这样:

这样,就可以通过下面的地址来推送直播流,其观众端也可以通过下面的地址来访问直播流:

rtmp://192.168.31.185/live/testrtmp://192.168.31.185/live2/test

后面紧跟的test关键字,可以对边更换,只要你的推送流和访问流的地址一样就可以了。HLS我们之前已经配置好了,推流可以使用下面的地址

rtmp://192.168.31.185/hls/movie

对于观众端来说,可以有几种播放方式:用rtmp:

rtmp://192.168.31.185/hls/movie

用HLS播放:

http://192.168.31.185:8080/hls/movie.m3u8

(滑动显示更多)

这样就可以看到主播端退出来的流。注意,如果使用http方式,则是监听8080端口,这个是在配置文件里写的。网页播放器插件, 在第二部里,出了可以直接在浏览器里打开网址来观看视频,还可以写一个网页,实现想优酷那样的视频点播业务。

通过使用第三方的播放器,在网页里植入该播放器来实现这个功能,比如说使用JWPlayer播放器。下载JWPlayer播放器,放到Nginx网页服务的根目录。把JWPlayer解压到这个目录里,然后再这个目录里新建一个play.html的文本文件。

你好,这里是逻辑iOS技术号:一个让知识变得感性,让学习变得轻松!活跃的技术小站,希望给你的生活与技术带来意思不一样!关注公众号,回复“  面试题”,即可领取更多大厂面试题型哦~ 小逻辑相信我们的生活不止眼前的苟且,还有我们向往的诗和大厂高薪工作~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值