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可以随便写。

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~

8、验证视频

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

rtmp://localhost:1935/zbcs/room

接下来 HLS直播流配置

 sudo /usr/local/nginx/sbin/nginx -s stopsudo /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 fragmentstypes {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 on127.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/test
rtmp://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的文本文件。

作者:阿华12年
原文链接 iOS整理 - 关于直播 - 搭建服务端

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/486478.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MKdocs添加顶部公告栏

效果如图: docs/overrides下新建main.html ,针对main.html文件 树状结构如下: $ tree -a . ├── .github │ ├── .DS_Store │ └── workflows │ └── PublishMySite.yml ├── docs │ └── index.md │ └──overrides │…

网安播报 | AI生成代码对组织和软件供应链构成了重大风险

1、AI生成代码对组织和软件供应链构成了重大风险 根据Veracode最新发布的软件安全报告,42%的应用程序和71%的组织中普遍存在软件安全债务,而AI生成代码的激增将导致安全债务问题恶化并对软件供应链构成重大风险。更令人担忧的是,46%的组织持续…

Redis(十六)缓存预热+缓存雪崩+缓存击穿+缓存穿透

文章目录 面试题缓存预热缓存雪崩解决方案 缓存穿透解决方案 缓存击穿解决方案案例:高并发聚划算业务 总结表格 面试题 缓存预热、雪崩、穿透、击穿分别是什么?你遇到过那几个情况?缓存预热你是怎么做的?如何避免或者减少缓存雪崩?穿透和击穿有什么区别?他两是…

金蝶-EAS easWebClient 任意文件读取漏洞复现

前言 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 一、产…

2024年统计学、智能控制与软件科学国际会议(ICSICSS2024)

2024年统计学、智能控制与软件科学国际会议(ICSICSS2024) 会议简介 我们很高兴邀请您参加将在中国南京举行的2024年统计、智能控制和软件科学国际会议(ICSICSS2024)。此次活动将为就统计学、智能控制和软件科学以及解决人工智能的最佳实践进行富有成果…

智慧项目管理平台安全系统开发,实现智慧化、精细化、智能化管理

场景建设需求 1.建设内容:智慧项目管理平台以工程项目为载体,着眼交通运输铁路施工、道路施工、建筑施工相关行业,以标准化、统一化、动态管理为抓手,以互联网、大数据云计算、5G应用、数字孪生、趋势分析、安全预警、视频监控等…

【Python笔记-设计模式】原型模式

一、说明 原型模式是一种创建型设计模式, 用于创建重复的对象,同时又能保证性能。 使一个原型实例指定了要创建的对象的种类,并且通过拷贝这个原型来创建新的对象。 (一) 解决问题 主要解决了对象的创建与复制过程中的性能问题。主要针对…

Leetcoder Day17| 二叉树 part06

语言:Java/C 654.最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 …

git切换仓库地址

已有git仓库,要切换提交的仓库地址,用以下命令 git remote set-url origin 自己的仓库地址 用以下命令,查看当前仓库地址: git remote show origin 切换仓库后,用以下命令初始化提交仓库: git push -u o…

React 模态框的设计(二)

自定义组件是每个前端开发者必备的技能。我们在使用现有框架时难免有一些超乎框架以处的特别的需求,比如关于弹窗,每个应用都会用到,但是有时我们使用的框架中提供的弹窗功能也是功能有限,无法满足我们的应用需求,今天…

Python之numpy

目录 安装 ndarray 说明文档 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 安装 pip3 install --user numpy scipy matplotlib ndarray NumP提供了 N 维数组…

《Solidity 简易速速上手小册》第4章:智能合约的设计与开发(2024 最新版)

文章目录 4.1 合约结构和布局4.1.1 基础知识解析深入合约布局原则理解组织结构高效布局的重要性4.1.2 重点案例:构建一个在线商店合约案例 Demo:编写在线商店智能合约案例代码:OnlineStore.sol测试和验证拓展功能4.1.3 拓展案例 1:可升级的合约案例 Demo:创建可升级的智能…