分布式直播系统(二)【搭建单点rtmp\http-flv\hls流媒体服务器】_pingos h5player-程序员宅基地

技术标签: rtmp  流媒体直播  http-flv  直播  流媒体  hls  

转载请注明出处:https://blog.csdn.net/impingo
项目地址:https://github.com/im-pingo/pingos

服务器介绍

项目起源

最初我目前所维护的nginx-rtmp-module是在AlexWoo的基础上进一步开发的。
在经过一些列功能迭代后,我独立维护了https://github.com/im-pingo/pingos进一步将原nginx-rtmp-module进行集成化,融合进了直播流监控页面、flv.js播放器、一键安装部署等等功能。
所以pingos是在nginx-rtmp-module的基础上做了加法,欢迎大家直接使用pingos

版本区别

项目 特点
nginx-rtmp-module 单一的nginx-rtmp-module模块,编译起来相对繁琐,配置文件和网页播放器都需要自己搭建。
pingos 这是一个集成化的流媒体服务器项目,有一键安装部署脚本,配置文件、网页播放器和系统控制台都已经集成好,更方便安装维护。一键安装脚本可在各个linux发行版本和macOS操作系统使用。

服务器功能

  1. 接收rtmp实时流
  2. 支持rtmp、http-flv、http-ts、hls、hls+(内存切片) 直播服务
  3. 支持实时录制功能
  4. 支持主动推流、拉流操作
  5. 支持动态推流、拉流操作
  6. 支持鉴权功能
  7. 支持流状态监控
  8. 支持时间戳修复

我所做的改进

  1. 已经修复了AlexWoo项目中的一些bug
  2. 使rtmp、http-flv、hls、http-ts直播支持mp3、h265编码
  3. 支持http-ts直播协议
  4. 支持直播时移服务
  5. 支持hls+(内存切片)服务(目前仅支持单进程下使用,多进程下无法正常使用,未来将支持多进程下的hls+)
  6. 支持服务器端自动修复异常的音视频时间戳功能
  7. 修复流状态监控后台页面

未来计划

我会持续维护https://github.com/im-pingo/pingos项目,并且希望能够得到更多人的能够发现问题并且及时在github上提出问题,只要本人看到都会给出回复并且及时修复。

近期准备上线的功能

  1. 接收http-ts推流
  2. 支持http-ts回源
  3. 支持http-fmp4直播协议

功能对比

功能 pingos nginx-rtmp-module 备注
HTTP(S)-FLV × pingos支持HTTP(S)-FLV播放,具体功能请看这篇文章
HTTP(S)-TS × pingos支持HTTP(S)-TS播放,具体功能请看这篇文章
HLS+ × pingos支持HLS+直播,具体功能请看这篇文章
多进程 × pingos支持进程间码流同步,具体操作请看这篇文章
动态(静态)回源 × pingos支持从别的源站拉http-flv或者rtmp流(目前正在实现rtsp拉流功能),具体操作请看这篇文章
动态(静态)转推 × pingos支持将本地http-flv或者rtmp流转推到其他服务器上(目前正在实现rtsp拉流功能),具体操作请看这篇文章
HTTP-FLV回源拉流 × pingos的回源协议支持rtmp和http-flv
RTSP回源拉流 正在支持 × rtsp回源拉流更能已在最后调试阶段
GOP缓存 × pingos支持gop缓存和低延时模式
VHOST功能 × pingos像nginx http配置一样支持多server_name配置
application支持通配符 x 当你需要非常多application时,不需要再在nginx.conf中配置那么多application,只需配置一个通配符 application * { live on;} 即可
H265编码 × pingos的rtmp/http-flv/http-ts/hls/hls+均支持h265编码
mp3编码 × pingos的rtmp/http-flv/http-ts/hls/hls+均支持mp3编码
html5网页播放器集成 × pingos安装成功后默认集成一个html5的播放器,方便开发者调试
丰富的控制台接口 × pingos支持丰富的控制台接口,例如:开播、停止、暂停、录像、停止录像、切换直播流、断开某条客户端等等接口
流量计费 × pingos支持流量日志定制化的输出,具体功能请查看文章

搭建流程

安装

# 快速安装
git clone https://github.com/im-pingo/pingos.git

cd pingos

./release.sh -i

# 启动服务
cd /usr/local/pingos/
./sbin/nginx

配置文件

配置文件详解

后面会专门写几篇博客来解析其中的配置项和对应的应用场景。

修改配置文件

cd /usr/local/pingos
vim conf/nginx.conf

更多配置内容请访问项目官网https://pingos.io

开启流监控页面

cd nginx-rtmp-module
cp stat.xsl /usr/local/pingos/html/stat.xsl

启动nginx

cd /usr/local/pingos
./sbin/nginx

注意事项

由于nginx需要监听80和1935端口,所以一定要确保你的服务器防火墙没有屏蔽这两个端口。

html5播放器

本系统集成了一个html5播放器,访问地址是 http://ip/h5player/flv
这个播放器是基于flv.js的网页播放器,可以实现无插件播放http-flv直播流。
一旦你能够访问这个页面,说明你的直播服务器已经成功搭建起来了。
在这里插入图片描述

推流

ffmpeg推流

ffmpeg -re -i 文件.mp4 -vcodec copy -acodec copy -f flv rtmp://ip地址/live/01

将上述命令中的your-input-file替换成你的媒体文件名,将your-server-ip替换成你的服务器ip地址,stream-name是你希望命名的流名(可随意)。
注意:ffmpeg命令中-re参数含义是按照真实时间戳速率读取文件,这个选项在推送文件到直播服务器中是必须的。另外-vcodec和-acodec是转码参数,如果你要推送的文件视频编码格式本身就是h264编码并且音频编码格式是aac或者mp3的话则不需要这两个参数。(重新编码非常消耗计算资源,使用时要注意)

OBS推流

Open Broadcaster Software(简称OBS)是一款直播流媒体内容制作软件。同时程序和其源代码都是免费的。

支持 OS X、Windows、Linux操作系统。适用于多种直播场景。满足大部分直播行为的操作需求(发布桌面、发布摄像头、麦克风、扬声器等等)。
在这里插入图片描述

后台监控

在浏览器中打开:http://your-server-ip/rtmp_stat
可以通过后台页面实时查看当前在线的推拉流情况。
rtmp-stat

播放地址

协议 地址
rtmp rtmp://ip/live/流名
http-flv http://ip/live/流名
hls http://ip/hls/流名.m3u8
hls+ http://ip/hls2/流名.m3u8
http-ts http://ip/ts/流名

QQ交流群:697773082

QQ交流群:697773082

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/impingo/article/details/99131594

智能推荐

【实用工具】Visio画时序图组件_visio画fpga时序图-程序员宅基地

文章浏览阅读4.9k次,点赞4次,收藏14次。Visio画时序图组件,实用方法很简单,下载,解压,然后放到一个固定的位置,Visio默认的查找位置为“D:\用户目录\我的文档\我的形状”然后打开Visio,选择更多形状,我的形状,一般就添加进来了,没有添加的话,点击“组织我的形状”,看看下面有没有vss格式的三个文件,如果有的话,关掉重开就有了。..._visio画fpga时序图

cd如何省略空格 linux_如何用Linux 终端指令打开带有空格或特殊符号的目录-程序员宅基地

文章浏览阅读395次。在Linux下使用终端指定打开文件夹,提示目录名称中包含语法错误,此时可以有两个选择:1、按照Linux推荐的文件命名规范,对文件夹名进行修改;2、使用转义符 \;3、成对使用双引号 "";Linux文件命名规范简介Linux系统区分英文字符的大小写。命名目录和命名文件的规则是相同的。除非有特别的原因否则用户创建的文件和目录名要使用小写字符。大多数的Linux命令也使用小写字符。Linux系统下..._linux指令cd进到指定目录,目录有特殊字符

Calendar_import calendar-程序员宅基地

文章浏览阅读161次。Calendar代码:public class Demo01Calendar {public static void main(String[] args) { Calendar c=Calendar.getInstance();//多态。//获取日历信息 System.out.println(c); System.out.println(c.get(Calendar..._import calendar

【漫谈】人工智能那些事儿:还很弱小,但怀期待-程序员宅基地

文章浏览阅读186次。关注:决策智能与机器学习,一篇文章Get一个知识点回顾自从1956年达特茅斯人工智能夏季研讨会首次提出“人工智能”的概念以来,两起两落,到现在第三次浪潮,人工智能已经可以算是完成特定任...

tensorflow/stream_executor/cuda/cuda_dnn.cc:378] Loaded runtime CuDNN library: 7301--2019.5.12-程序员宅基地

文章浏览阅读7.9k次,点赞2次,收藏5次。安装的cudnn的版本是7.1.0.3,而要求的cudnn版本是7.3.0.0。将tensorflow版本从1.5换成1.8,顺利运行程序(升级tensorflow版本来解决)ll 命令查看 连接 /usr/local/cuda/lib64下 把对应的 libcudnn.so.7,3,1连到 libcudnn.so.7 在连到libcudnn.sosudo ln -sf li..._tensorflow/stream_executor/cuda/cuda_dnn.cc:378] loaded runtime cudnn librar

SQL——limit和offset的用法_sql limit-程序员宅基地

文章浏览阅读2k次。【代码】SQL——limit和offset的用法。_sql limit

随便推点

linux-001之头文件signal.h_signal.h头文件-程序员宅基地

文章浏览阅读3.5k次,点赞2次,收藏7次。#ifndef _SIGNAL_H#defing _SIGNAL_H#includetypedef int sig_atomic_t;typedef unsigned int sigset_t;#define _NSIG 32 //定义信号#define NSIG _NSIG#define SIGHUP 1 //hang up 挂断控制终端或进程_signal.h头文件

Java程序设计2023-第四次上机练习_java 上机题-程序员宅基地

文章浏览阅读217次。java 实现三子棋,随机绘制图像,猜数游戏_java 上机题

使用NFS自动挂载文件系统_nfs设置账号密码挂载-程序员宅基地

文章浏览阅读186次。使用NFS自动挂载文件系统便利性大大增强,首先连接网线,传输数据,此外保证服务器和单板能够ping的通。单板上电(开发板已经烧录有u-boot和内核),任意键中止boot进程,q退出菜单,输入print,更改“bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200”这一句。使用 set bootarg..._nfs设置账号密码挂载

使用JAVA获取KAFKA中指定TOPIC的OFFSET-程序员宅基地

文章浏览阅读1.4k次。2019独角兽企业重金招聘Python工程师标准>>> ..._java 通过kafka jmx mbeanserverconnection 获取offset

数论 - 容斥原理-程序员宅基地

文章浏览阅读291次,点赞2次,收藏2次。在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理

goto的应用举例及详解_goto使用-程序员宅基地

文章浏览阅读4.1k次,点赞16次,收藏12次。从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。从上我们可以看出,goto语句真正适合的引用场景其实就是:当我们写了很多for循环时,我们需要写很多个break来跳出来for循环时,我们可以直接用goto语句来跳出for循环。综上,我们需要了解goto语句就行,但是goto语句的应用场景不是很多,提及的时候我们还是要会运用。下面我们来简单的写一个有趣的关机小程序。_goto使用

推荐文章

热门文章

相关标签