分布式直播系统(八)【快速搭建nginx-rtmp HLS录像和回放服务】

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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

HLS直播和录像

众所周知不管是在直播或者点播方式的选择中,HLS都是兼容性最好的协议。

以往常见的录像和点播

以往为了快速实现HLS点播服务,需要服务器将实时数据保存成mp4或者flv格式数据,然后直播结束后再使用ffmpeg将录像文件切成小片。

推流
推流
读取内容
直播
读取
点播
主播
直播服务器
录像服务
切片服务
观众
点播服务器

从这张图中可以看到为了实现hls点播,我们需要将原有录像进行独立切片,然后将其切片放在http目录以供hls点播服务使用。
为了完成这样的操作,需要频繁对硬盘进行读写,同时又必须等到录像文件生成后才能切成ts和m3u8文件。

使用pingos快速实现HLS录像和点播

pingos项目中的nginx-rtmp-module模块可以极大地简化上述流程,用户甚至可以直接对当前直播时间一分钟以内的内容进行点播,不尽在效率和点播内容的时效性上有很大改善,在机器资源配置上也节省了切片服务。

推流
推流
直播
点播
主播
直播服务器
录像服务直接录成hls文件
观众

需要注意的是,我们应该尽量将录像服务和直播服务器独立,因为直播服务器对磁盘并无太高要求,仅对转发效率和带宽要求较高。
而录像服务队磁盘空间和磁盘读写性能要求都比较高,所以面对不同应用场景需要配备不同类型的硬件。
下面给出直播服务器和录像服务器配置方案:
假设 录像服务器IP为 192.168.1.3,下面是直播服务器和录像服务器的配置模板(注意:直播服务器和录像服务器是分开部署的)

直播配置模板

user  root;
daemon on;
master_process on;
worker_processes  1;
#worker_rlimit 4g;
#working_directory /usr/local/openresty/nginx/logs;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

worker_rlimit_nofile 102400;
worker_rlimit_core   2G;
working_directory    /tmp;

#pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
    multi_listen unix:/tmp/http 80;
}

stream_zone buckets=1024 streams=4096;

rtmp {
    log_format log_json '{$remote_addr, [$time_local]}';
    access_log logs/rtmp.log trunc=2s;
    server {
        listen 1935;
        serverid 000;
        out_queue 2048;

        application live {
            rtmp_auto_pull on;
            rtmp_auto_pull_port unix:/tmp/rtmp;
            live_record on;
            live_record_path /tmp/record;
            live_record_interval  1m;
    
            push rtmp://192.168.1.3/live;

            live on;
            wait_key on;
            wait_video on;
            cache_time 3s;
            low_latency off;
            fix_timestamp 0s;
# h265 codecid, default 12
            hevc_codecid  12;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_X-Forwarded-For" "$http_X-Real-IP" "$host"';


    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    server {
         listen 80;
        location /rtmp_stat {
            rtmp_stat all;
            rtmp_stat_stylesheet /stat.xsl;
        }

        location /xstat {
            rtmp_stat all;
        }

        location /sys_stat {
            sys_stat;
        }
         location / {
             chunked_transfer_encoding on;
             root html/;
         }
}

录像配置模板

user  root;
daemon on;
master_process on;
worker_processes  1;
#worker_rlimit 4g;
#working_directory /usr/local/openresty/nginx/logs;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

worker_rlimit_nofile 102400;
worker_rlimit_core   2G;
working_directory    /tmp;

#pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
}

stream_zone buckets=1024 streams=4096;

rtmp {
    log_format log_json '{$remote_addr, [$time_local]}';
    access_log logs/rtmp.log trunc=2s;
    server {
        listen 1935;
        serverid 000;
        out_queue 2048;

        application live {
            rtmp_auto_pull on;
            rtmp_auto_pull_port unix:/tmp/rtmp;
            live_record on;
            live_record_path /tmp/record;
            live_record_interval  1m;
  
            live on;
# h265 codecid, default 12
            hevc_codecid  12;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_X-Forwarded-For" "$http_X-Real-IP" "$host"';


    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    server {
         listen 80;
        location /rtmp_stat {
            rtmp_stat all;
            rtmp_stat_stylesheet /stat.xsl;
        }

        location /xstat {
            rtmp_stat all;
        }

        location /sys_stat {
            sys_stat;
        }
         location / {
             chunked_transfer_encoding on;
             root html/;
         }
}

QQ交流群:697773082(流媒体人的后院)

海康视频回放,rtsp视频接口转换成.m3u8格式文件 3、采用token+redis方式处理视频播放删除过程,开启视频录像,并将token或者自定义文件夹存入redis,将用户token解析部分(我解析的是jwt的token最后一个点后面内容,作为当前用户的开始视频存放的文件夹A),视频摄像头唯一编码作为下面一个子文件夹B,A+B作为ffmpeg开启的key。6、redis中的token过期,回调方法返回过期的key,对key解析,拿到token最后一个点后面内容,也是就是文件A,对第五步进行操作。 阅读详情

相关推荐

RTSP转Web直播:无插件低延迟方案与SRS+FFmpeg+flv.js实战

流媒体协议是音视频实时传输的技术基础,其核心原理在于通过特定的控制与传输协议实现媒体数据的连续推送。在安防监控、物联网直播领域,RTSP协议因其稳定性广泛设备支持而成为主流。然而,现代Web浏览器基于安全与性能考量,普遍不支持直接播放RTSP流,这构成了协议与平台间的技术鸿沟。为解决此问题,产生了‘协议转换’这一关键技术价值,即在服务器端将RTSP流转码或转封装为Web原生支持的格式(如HTTP-FLV、HLS),从而打破壁垒,实现无插件播放。其典型应用场景包括智慧园区监控大屏、远程巡检在线教育内容采

cuanmo8775的博客 508

nginx-rtmp-module:为rtmp flvhls添加hevc(增加支持H265)

nginx-rtmp-module:为rtmp flvhls添加hevc(增加支持H265)

Nginx流媒体服务RTMP直播同步录像

我们在直播时,可以使用直播客户端(如:OBS)推流的同时进行录像,但是此时会增加对客户端硬件资源的占用,严重时会导致解码、编码时的丢帧,导致直播或者回放时的不流畅。本文通过在流媒体服务器上,接收推流的同时,将直播流保存在服务器上,可以在客户端录像失败时下载后二次编辑使用,也可以直接发布为“点播”。以上系统、模块的安装请参考以前文章,或者上网查询,这里只重点说一下ffmpeg的安装,用于录像后的格式转换。将录像路径作为“别名”(alias),添加到站点下,并实现目录浏览,便于检测录像结果及将来的VOD分发。

dgnankai的专栏 728

iOS流媒体开发之三:HLS直播(M3U8)回看下载功能的实现

1、概要 流媒体开发第一篇文章就说要把这些不是随便就可以百度到的知识献给“简书”,拖了一个多月了,总算弄完了,深深松了口气,万幸没有食言,否则对不起小伙伴们。 流媒体始终是大众生活娱乐最为重要的一个部分,同时也是技术开发中比较有难度的,尤其是直播,不仅功能是点播无法替代的,开发难度也要比点播大,里约奥运会等重大体育赛事大家只能通过直播观看比赛,体会现场观看的紧张刺激,点播是无法做到的。 如今我们也会有直播回看下载的需求,一些APP包括我们自己的项目也已经实现了这些功能,网上讲解这部分技术的知识相对较

irainsa的博客 2475

videojs重播_nginx搭建流媒体服务器,实现点播直播,转播,录播(直播回放)功能(未完)...

nginx-http-flv-module的功能兼容nginx-rtmp-module所有功能支持HTTP-FLV/HTTPS-FLV方式的直播支持GOP缓存,以减少首屏时间支持虚拟主机功能可以省略listen配置项而不影响基本功能修复nginx-rtmp-module已知的bug第一:以动态模块的方式编译安装nginx(基于centos7)#安装必要组件yum install gcc pcre...

weixin_42131405的博客 1385

基于nginx-rtmp实现电视回看业务

软硬件环境 ubuntu 16.04 64bitAndroid Studio 2.2.3OTT BOx with android 5.1.1nginx 1.11.3nginx-rtmp-module 简介 电视回看是数字电视领域的另一项基础功能,它能提供一定时长的电视回放,可以实现像点播业务中的暂停,快进,快退等功能,一般的运营商都会提供回看的服务.本文讲述如何基于nginx-r

老衲不出家 2091

ffmpeg nginx flv_分布式直播系统)【快速搭建nginx-rtmp HLS录像回放服务

转载请注明出处:https://blog.csdn.net/impingo 项目地址:https://github.com/im-pingo/pingosHLS直播录像众所周知不管是在直播或者点播方式的选择中,HLS都是兼容性最好的协议。以往常见的录像点播以往为了快速实现HLS点播服务,需要服务器将实时数据保存成mp4或者flv格式数据,然后直播结束后再使用ffmpeg将录像文件切成小片。从这...

weixin_39966644的博客 236

分布式直播系统(二)【搭建单点rtmp\http-flv\hls流媒体服务器】

使用nginx-rtmp-module搭建http-flv、rtmphls、http-ts、hls+(内存切片或虚拟切片)直播服务

impingo的博客 1万+

基于nginx-http-flv-module提供摄像头hls flv回放服务

之前写过一篇文章叫做基于nginx-http-flv-module提供摄像头hls flv实时流服务,实际在一个项目中实时流回放流一般是同时都需要的。 对于回放流在设计流程上实时流大致是一样的。大致阐述一下,当来了一个回放请求,会在uri里记录需要回放的信息,比如是哪个设备,是设备的哪个通道,回放的视频时间段,然后流程就实时流一样的了。 这里需要注意的是,对于回放流,每一个回放请求回放同一个设备的同一通道的同一时间段的录像对应的应该是不同的推流源。不像...

wwyyxx26的专栏 2191

Windows环境下基于NGINX进行rtmp推流直播

准备工作 NGINX下载地址 Rtmp扩展下载地址 下载完进行解压 nginx点播设置 worker_processes 1; events { worker_connections 1024; } ##################RTMP服务################# rtmp { server { listen 1935; #//服务端口 chunk_size 4096; #//数据传输块的大小 application

强颜欢笑 2193

nginx 支持h265 的 rtmphls,http-flv

更新2020-04-08 nginx支持rtmp h265的很多了,现在需要http-flv也加上h265 https://github.com/pingostack/pingos, 目前这个是唯一一个找到的能用的 win下试了,没编过去,Linux下很好搞,Ubuntu需要自己提前安装些库就行了 推流拉流还是用金山的那个ffplay即可,web播放器目前的基本上都是wasm, 其他的还未见到可用的 原文: https://github.com/illuspas/nginx-rtmp-w.

风声的专栏 1570

Nginx+FFmpeg+h265+wasm+webgl实现(1)Emscripten环境搭建以及简单的使用方法介绍

(1)Emscripten环境搭建以及简单的使用方法介绍 简介:Emscripten可以把C/C++编译成.js.wasm文件,用于浏览器使用。 ①,安装Emscripten编译期 # Get the emsdk repo gitclonehttps://github.com/emscripten-core/emsdk.git # Enter that directory cdemsdk gitpull # Download and install the latest SDK tools...

xiaoshixiu的专栏 1572

利用Nginx搭建RTMP视频直播点播服务器,ffmpeg推流,回看

一、环境工具ubuntu 14.04 desktop不用server的原因是一部分的演示用到了linux视频播放直播软件,自己还要装桌面,麻烦。不建议使用 最新的16TLS,我一开始就用它来做的,但是各种坑,因为很多包都被废弃或者必须降级Nginx1.8.1这个是我之前装的版本,版本没什么大的影响我是源代码编译安装的,不建议用 apt-get install nginxnginx-rtmp-m...

欢迎关注我 https://x.com/Awesome_AI_News 2万+

实现网页直播源码的直播与视频回放功能

流程介绍 直播、视频回放大致流程:获取视频流或本地音视频文件,将流推入到流媒体服务器当中,在 web 端使用合适的 js 拉流并播放音视频: 三种常见的视频流协议介绍(RTMP、RTSP、HLSRTMP(Real Time Messaging Protocol)实时消息传输协议 RTMP是由Adobe公司提出的,是一种设计用来进行实时数据通信的网络协议,属于TCP/IP五层中的应用层,基于TCP协议,默认使用端口1935。RTMP中的基本数据单元称为消息(Message),传输的过程中消息会被拆分

QQ1981747098的博客 5172

C语言从头开始写一次hls视频转发服务器,支持H264H265

由于2020年后,谷歌浏览器将不再支持flashplay了,从而网页视频的播放,在谷歌浏览器上,不得不像其他办法,而hls是一个不错的方式,前端H5有现成的js标签,能直接支持苹果的hls,并且不用下载插件而能直接播放,所以hls就是一个不错的选择了。 hls是苹果公司开发一套流媒体协议,其实原理就是把一段连续的视频,切割成一个一个的ts小文件,用m3u8文件来管理这...

jack_wu1992的博客 1793

nginx-rtmp服务器播放本地文件

rtmp { server { listen 1935; application video{ play /home/zhenche/Videos; } ....... 配置后在vlc中打开rtmp://127.0.0.1:1935/video/test5.mp4即可 备注:其中video可以随便起, play /home/zhenche/Videos; 这个是路径,下面存放文件,比如test5.mp4 ...

weixin_43360707的博客 702

HLS直播(M3U8)回看下载功能的实现

流媒体始终是大众生活娱乐最为重要的一个部分,同时也是技术开发中比较有难度的,尤其是直播,不仅功能是点播无法替代的,开发难度也要比点播大,里约奥运会等重大体育赛事大家只能通...

欢迎关注公众号:【码农突围】,回复9999,可以获取一份LeetCode刷题笔记 1万+

HLS直播(M3U8)回看下载功能的实现,SpringBoot项目瘦身指南

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料。

m0_60721860的博客 1159
上一篇: 分布式直播系统(七)【10分钟掌握高并发高可用直播集群架构】
下一篇: H264编码入门(一)封装规则
im-pingo
博客等级 码龄7年 304粉丝 45原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值