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://xiahunao.cn/news/2803789.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

链表和顺序表的优劣分析及其时间、空间复杂度分析

链表和顺序表的优劣分析及其时间、空间复杂度分析 一、链表和顺序表的优劣分析二、算法复杂度<font face "楷体" size 5 color blue>//上面算法的执行次数大致为&#xff1a;F&#xff08;N&#xff09; N^22*N10;   N 10,F(10) 1002010 130次   N 1…

软件提示找不到MSVCP140.dll是什么意思,修复MSVCP140.dll丢失的多个方法

msvcp140.dll 文件是 Microsoft Visual C 运行时库的一部分&#xff0c;具体来说它是 Visual Studio 2015 版本编译的C应用程序所依赖的一个动态链接库&#xff08;DLL&#xff09;文件。这个 DLL 文件包含了大量由Microsoft开发的标准C库函数&#xff0c;这些函数对于许多在Wi…

python实现维特比算法

对于维特比算法,首先想到的就是高通公司,对于现在的通信行业的两大巨头公司之一,高通公司的发家是由器创始人维特比发明了一种高效的通信解码技术,维特比算法。 对于维特比算法是什么,以一个例子来讲述什么是维特比算法,假设由一个村庄,某村民的身体在每天只会出现3种,…

服务器内部大揭秘(CPU、内存、硬盘)

晚上好&#xff0c;我的网工朋友。 服务器作为网络的节点&#xff0c;存储、处理网络上80&#xff05;的数据、信息&#xff0c;被称为互联网的灵魂。 它不仅是一个简单的机器&#xff0c;更像是一个精密的工程&#xff0c;由多个关键组件相互配合&#xff0c;以实现高效的数…

集合、List、Set、Map、Collections、queue、deque

概述 相同类型的数据进行统一管理操作&#xff0c;使用数据结构、链表结构&#xff0c;二叉树 分类&#xff1a;Collection、Map、Iterator 集合框架 List接口 有序的Collection接口&#xff0c;可以对列表中的每一个元u尿素的插入位置进行精确的控制&#xff0c;用户可以根…

数据库面试题汇总,助你轻松应对面试!

考虑到最近有些小伙伴准备跳槽&#xff0c;所以更新一些数据库相关的面试题&#xff0c;希望能帮到大家&#xff01; 一 请写出创建表的基本语法结构&#xff1f; 创建表的基本语法结构如下&#xff1a; CREATE TABLE IF NOT EXISTS 表名(字段名1 字段类型,字段名2 字段类型 …

哪个蓝牙耳机好用?2024最新蓝牙耳机选购指南,实测避坑!

​蓝牙耳机已成为现代生活中不可或缺的一部分。无论你是追求高品质音质、注重佩戴体验&#xff0c;还是在意性价比&#xff0c;市场上总有适合你的那一款。希望通过我的推荐和分析&#xff0c;你能找到一款真正适合自己的蓝牙耳机&#xff0c;让你的音乐之旅更加精彩。 一、选购…

【2024软件测试面试必会技能】Charles(6):Charles设置弱网

设置弱网&#xff08;慢网速&#xff09; 方法一&#xff1a;点击Charles 上方的乌龟标志&#xff0c;模拟网络延迟&#xff1b; 方法二&#xff1a;点击Proxy——Throttle Settings——勾选Enable Throttling——再勾选Only for selected hosts——点击Add,设置指定的域名——…

【Vuforia+Unity】AR05-实物3D模型识别功能实现(ModelTarget )

不管是什么类型的识别Vuforia的步骤基本都是&#xff1a; 把被识别的物体转成图、立体图、柱形图&#xff0c;3D模型、环境模型&#xff0c;然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容&#xff0c;然后参考模型自动隐藏-发布APP-识别生活中实物-数字内…

kettle计算增长率

kettle计算增长率 问题描述处理方法 问题描述 读取一段时间内的数据记录&#xff0c;计算相邻记录的比率 iddatevalue12024-01-0110012024-01-0211012024-01-0312012024-01-0490 处理方法 1.使用统计中的分析查询节点能在每一行中添加前后行的数据 2.使用计算器节点计算比…

蓝牙耳机哪个品牌质量好?2024超高性能机型比拼推荐

​无线耳机已经成为现代生活中的必备数码产品&#xff0c;尤其在感受到无线带来的自由后&#xff0c;很难再适应有线耳机的束缚。因此&#xff0c;耳机市场竞争激烈&#xff0c;各种类型和外观的耳机层出不穷。在此&#xff0c;我为大家总结了五款使用体验很不错的蓝牙耳机&…

ESP8266智能家居(1)——开发环境的搭建

1.前期介绍 本次打算使用esp8266的开发板——NodeMCU&#xff0c;进行物联网相关项目的学习。开发环境使用Arduino软件。 NodeMCU实物图为&#xff1a; 开发环境截图为&#xff1a; 2.软件下载 我使用的arduino版本为1.8.5&#xff0c;其安装包如下&#xff1a; 【免费】ar…

区块链笔记(五)---德勤相关分析报告

web3.0 定义&#xff1a; 在《Insights into a Modern World》提出&#xff0c;“信息将由用户自己发布、保管、不可追溯且永远不会泄露&#xff0c;用户的任何行为将不需要任何中间机构来帮助传递”&#xff1b;用来指代一种区块链技术&#xff0c;可以基于“无须信任的交互…

2024年阿里云新用户购买云服务器有哪些优惠活动?

2024年阿里云服务器购买、续费、升级优惠政策整理&#xff0c;阿里云服务器优惠价格表&#xff1a;轻量2核2G3M服务器61元一年、2核4G4M带宽165元1年&#xff0c;云服务器4核16G10M带宽26元1个月、149元半年&#xff0c;阿里云ECS云服务器2核2G3M新老用户均可99元一年续费不涨价…

精酿啤酒:麦芽与啤酒花搭配的奥秘

麦芽和啤酒花是啤酒酿造过程中不可或缺的原料&#xff0c;它们的风味和特点对啤酒的口感和品质产生着深远的影响。Fendi Club啤酒在麦芽与啤酒花的搭配方面有着与众不同的技巧和见解&#xff0c;让啤酒的口感更加丰富和迷人。 首先&#xff0c;麦芽的选择是啤酒酿造的关键之一。…

springboot211基于springboot医疗报销系统的设计与实现

医疗报销系统的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;报销单信息因为其管理内容繁杂&#xff0c;管理数量繁多…

【C++】——模板初阶 | STL简介

前言: 模板初阶 | STL简介 文章目录 一、模板初阶1.1 函数模板1.2 类模板 二、STL简介 &#xff08;了解&#xff09; 一、模板初阶 泛式编程&#xff08;Generic Programming&#xff09;指的是一种编程范式&#xff0c;其核心思想是编写可以在不同数据类型上通用的代码&#…

C语言中的assert.h:调试助手与断言详解

在C语言编程中&#xff0c;assert.h头文件提供了非常有用的断言&#xff08;Assertion&#xff09;功能&#xff0c;它主要用于开发和调试阶段&#xff0c;确保程序在运行时满足某些预期条件。如果这些条件未得到满足&#xff0c;则程序会立即停止执行&#xff0c;并打印出有关…

架构师技能9-深入mybatis:Creating a new SqlSession到查询语句耗时特别长

开篇语录&#xff1a;以架构师的能力标准去分析每个问题&#xff0c;过后由表及里分析问题的本质&#xff0c;复盘总结经验&#xff0c;并把总结内容记录下来。当你解决各种各样的问题&#xff0c;也就积累了丰富的解决问题的经验&#xff0c;解决问题的能力也将自然得到极大的…

操作系统--调度算法

一、进程调度算法&#xff08;CPU调度算法&#xff09; 什么时候会发生 CPU 调度呢&#xff1f;通常有以下四种情况&#xff1a; 「抢占式调度」&#xff1a;进程正在运行的时&#xff0c;可以被打断&#xff0c;使其把 CPU 让给其他进程。那抢占的原则一般有三种&#xff0c…