iOS HLS测试之本地服务器搭建和HLS推拉流测试

4,660 阅读4分钟

基础知识

流媒体协议

进阶

RTMP流媒体服务器搭建+ 推拉流实践

服务器搭建

Nginx服务器搭建

Nginx安装

  1. 在终端执行以下命令,来安装Nginx服务
# 抓取最新安装路径
brew tap denji/homebrew-nginx
brew install nginx-full --with-rtmp-module
  1. 在终端执行nginx,启动Nginx服务
nginx

接下来在浏览器中输入http://localhost:8080/,出现以下信息即表示服务器启动成功

Nginx服务器配置

接下来,需要配置Nginx来支持HLS和RTMP推流

前往文件夹/usr/local/etc/nginx/nginx.conf,使用文本编辑器打开,在文件的末尾处添加以下配置。

rtmp {
    server {
        listen 1935;#端口号
        application live1 {#live1 随便起,后面的拉流的时候保持一致即可
            live on;
            record off;
        }
        application hls {
            live on;
            hls on;
            hls_path /usr/local/var/www/hls;#视频流存放地址,在推流过程中产生的ts和m3u8文件都会在此路径中生成
            hls_fragment 5s; #设置HLS分片的长度的。默认是5秒
        }
    }
}

关于rtmp模块的更多配置和属性,可以查看官方文档github.com/arut/nginx-…

配置完成后,在终端执行以下命令:

# 保存文件后,重新加载nginx的配置文件
nginx -s reload

SRS服务器搭建

SRS服务器安装

在终端执行以下命令,安装srs服务

git clone https://gitee.com/winlinvip/srs.oschina.git 

进入srs/trunk文件夹,编译srs

./configure && make

SRS服务器配置

在文件/srs/trunk/conf/.rtmp.conf中已经有默认的配置。

关于rtmp模块的更多配置和属性,可以查看官方文github.com/ossrs/srs/w…

启动SRS服务器

./objs/srs -c conf/rtmp.conf

以上两种服务器都可以支持本地的推拉流实现

FFmpeg + OBS推流

FFmpeg推流

这里是使用ffmpeg来进行推流

首先安装ffmepg

brew install ffmpeg

接下来就可以准备推流,在终端执行以下命令:

ffmpeg -re -i /Users/tongxing/Movies/wwdc2022-10128_sd.mp4 -vcodec copy -f flv rtmp://localhost:1935/hls/room

这里rtmp://``localhost:1935/hls/room中的hls就是上面配置的application后面的路径名称,后面的room可以随便写

可以看到,终端已经在开始对mp4文件进行分片处理

这个时候打开/usr/local/var/www/hls路径就可以看到,文件夹里面的ts片段和m3u8文件是在实时更新的。

这个时候就可以拿到 rtmp:// **localhost:1935/hls/room**这个链接来进行播放了。

OBS 文件推流

如果不擅长使用ffmpeg的命令方式,也可以使用客户端来进行操作,推荐使⽤主流的OBS开源推流软件,可从官⽹obsproject.com/ 下载最新版本,⽬前很多⽹络主播都是⽤它做直播。该软件⽀持本地视频⽂件以及摄像头推流。

  1. 首先添加媒体源

  1. 然后随便取一个名称

  1. 点击确定,选择一个本地文件

  1. 接下来是关键的部分,点击设置,进入下面的设置界面:

  1. 在直播->服务器这⾥,输⼊srs的地址:rtmp://xxx.xxx.xxx.xxx:1935/hls (注意这⾥不要带room,另外将localhost替换成本地的ip地址), 然后在串流密钥这⾥,才是输⼊room

设置好以后,就可以点击“开始直播”了。如果顺利,下⾯的状态栏,会显示⼀些实时数据:

这个时候也可以使用拉流播放器来进行播放了。

OBS 摄像头推流

  1. 跟上⾯的其实差不多,区别只是添加“视频捕捉设备”

  1. 选择摄像头设备,这里我使用的是mac,所以使用了usb连接的手机摄像头

后面的步骤和文件推流的第四步和第五步一样,设置服务器推流地址,开始直播。

客户端拉流实现

Mac上VLC进行拉流播放

为了判断是否真的推流成功,下载一个 VLC 工具,进行拉流地址的播放。

双击播放地址,即可看到,视频正在播放,同时m3u8文件一直在更新。

视频:

暂时无法在飞书文档外展示此内容

Gif图:

Mac终端ffplay拉流

ffplay rtmp://localhost:1935/hls/room

iPhone 设备上进行拉流播放

这里使用的是ijkplayer播放器来进行播放的。文件末尾附上Demo。

修改demo中的某个m3u8播放地址。我这里修改的是:IJKDemoSampleViewController示例中的播放地址:

这里播放播放地址,需要将**localhost** 换成你的 Mac 机器的网络IP地址: x.x.x.x:1935

可以看到双端是可以在同时进行内容同步播放。

视频:

暂时无法在飞书文档外展示此内容

gif图: