分布式直播系统(十)【一条配置搞定流量计费】

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

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

流量计费方式

在直播系统中最暴力直接的计费方式莫过于记录下每段时间内客户的流量了,然后根据流量总值进行收费,而CDN行业则流传着一种被称作95峰值计费的方案。
我们以网宿和阿里的95峰值计费方式为例介绍这种流量计费场景。

网宿

计费方式说明:当前的计费方式为95%值计费方式,即取查询时间段中,所有带宽数据点,按带宽大小从低到高排序后,取第95%个点所对应的值作为计费带 宽。如一段时间内有N(N=100)个带宽数据点,将这些点从低到高排序,第N*95%(100×95%=95)个点对应的带宽大小为该计费带宽的值。

阿里云

95带宽峰值计费按自然月结算,在一个自然月内,按账户取每5分钟有效带宽值进行降序排列,然后去掉带宽数值较高的5%的点,剩下的较高带宽就是95带宽峰值计费值。以1个月30天为例,默认均为有效取值点:每5分钟1个带宽取值点,每小时12个带宽取值点,每月取值点数为:12 x 24 x 30 = 8640个,将所有的点按带宽数值降序排列,去掉前5%的点 8640 x 5% = 432 个,即第433个点为计费点。

中国大陆和海外的95带宽将分开计费,且带宽分别排序,取各自的95峰值和对应的峰值时刻用于计费值。

**不管是哪一家的计费方式他们都有一个共同点就是记录单位时间内的流量,**所以如果我们要实现流量计费就必须记录下单位时间内的流量。
使用https://github.com/im-pingo/pingos(原https://github.com/im-pingo/nginx-rtmp-module)可以轻松记录下直播过程中每条流的流量使用情况,从而达到计费的效果。

配置说明

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_bandwidth '{"app":"$app","name":"$name","bitrate":$bitrate,"args":"$args","timestamp":$ntp,"ts":"$time_local","type":"$command","remote_addr":"$remote_addr","domain":"$domain"}';
    access_log logs/bandwidth.log log_bandwidth trunc=60s;
    server {
        listen 1935;
        serverid 000;
        out_queue 2048;
   
        application live {
            rtmp_auto_pull on;
            rtmp_auto_pull_port unix:/tmp/rtmp;

            live on;
            hls on;
            hls_path /tmp/hls;
            hls_fragment 4000ms;
            hls_max_fragment 6000ms;
            hls_playlist_length 12000ms;
            hls_type event;

            hls2memory on;
            mpegts_cache_time 20s;

            hls2_fragment 1300ms;
            hls2_max_fragment 1600ms;
            hls2_playlist_length 3900ms;

            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;

    #reset_server_name www.test1.com www.test2.com;
    #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 /control {
            rtmp_control all;
        }
         location /live {
            flv_live 1935;
         }
         location /ts {
            ts_live 1935 app=live;
         }
         location /hls {
            # Serve HLS fragments
             types {
                 application/vnd.apple.mpegurl m3u8;
                 video/mp2t ts;
             }
             root /tmp;
             expires -1;
             add_header Cache-Control no-cache;
             add_header 'Access-Control-Allow-Origin' '*';
         }

        location /hls2 {
             hls2_live 1935 app=live;
             add_header 'Access-Control-Allow-Origin' '*';
             add_header Cache-Control no-cache;
         }
         location / {
             chunked_transfer_encoding on;
             root html/;
         }
    }
}

配置详解

上述配置模板中起到计费作用的配置有两项:

log_format log_bandwidth '{"app":"$app","name":"$name","bitrate":$bitrate,"args":"$args","timestamp":$ntp,"ts":"$time_local","command":"$command","remote_addr":"$remote_addr","domain":"$domain"}';
access_log logs/bandwidth.log log_bandwidth trunc=60s;
  • log_format 用来描述日志输出格式,后面跟两个参数,第一个参数是用来标记这项配置的名字;第二个参数用来描述日志输出格式,最关键的是支持变量,变量以$符号开始,输出到日志文件后变量会自动被真实值所替换。
  • access_log 这项配置的第一个参数指定日志输出路径和日志文件名称;第二个参数用来描述采用哪种日志输出格式;第三个参数描述针对每条流隔多久输出一次日志记录。

变量列表

变量名说明
$connection连接序号,nginx服务器对每个tcp连接都分配一个整型数字
$remote_addr客户端IP
$appnginx.conf里对应的application名称
$flashverrtmp连接中flashver的值
$swfurlrtmp连接中swfurl的值
$tcurlrtmp连接中tcurl的值,注意这个值有点类似http协议中url,如rtmp://ip/app/name ,是一个完整的rtmp地址
$domain客户端连接服务器时候使用的域名
$parg_rtmp请求中如果携带参数,可以使用这个变量获取,如rtmp://ip/app/name?session=123,如果你想获取session这个参数的值,可以用$parg_session来获取,其他以此类推
$pageurlrtmp连接中pageurl的值
$command推流产生的记录是publish,拉流产生的记录是play
$name流名
$argsrtmp连接里的全量参数,如rtmp://ip/app/name?k0=v0&k1=v1&k2=v2,则args就是k0=v0&k1=v1&k2=v2
$bytes_sent这条连接上发出去的字节数
$time_local打这条记录时的服务器时间,如31/Oct/2019:15:24:04 +0800
$msecutc时间,精确到毫秒
$session_time从连接建立开始计算,到目前为止过了多久,单位秒
$session_readable_time与session_time含义相同,只不过是格式化后的更方便人眼读取的时间

QQ交流群:697773082

nginx模块解析 nginx模块 阅读详情

相关推荐

云计算学习之路——Nginx流量控制

Nginx流量控制 文章目录Nginx流量控制一、流量控制概念二、Nginx流量限制实战1、普通的nginx流量限制2、基于代理的nginx流量限制三、Nginx流量限制实战(基于代理的白名单的流量限制) 一、流量控制概念  流量控制:是Nginx中一个很实用的功能,我们可以用来限制用户在给定时间内http请求数量,可用作安全目的,比如减慢暴力破解速率,主要是为了保护上游服务器不被同时太多用户请求压垮。  nginx如何限流:Nginx的流量限制使用漏桶算法,该算法在通讯和分组交换计算机网络中广泛使用,用以

weixin_44178770的博客 5789

基于分布式技术的电信在线计费系统方案研究与设计.pdf

#资源达人分享计划#

java移动计费系统(java)

java写的移动计费系统,开发工具myeclipse+mysql 管理员登陆,操作员登陆,操作员管理,添加用户,添加客户,查找,充值,配置计费信息。。

流量计量模块 for Nginx —— 实时监控的高效解决方案

流量计量模块 for Nginx —— 实时监控的高效解决方案 项目基础介绍与编程语言 本项目名为流量计量-NGINX模块,采用C语言编写,是一款专为NGINX设计的开源工具。它在GitHub上托管,链接为https://github.com/Lax/traffic-accounting-nginx-module。这个项目旨在提供一种轻量级的方法来实时监控进出NGINX服务器的流量指标,特别适合那...

gitblog_00817的博客 380

设置按峰值带宽计费_分布式直播系统)【一条配置搞定流量计费

转载请注明出处:https://blog.csdn.net/impingo 项目地址:https://github.com/im-pingo/pingos官网地址:https://pingos.io流量计费方式在直播系统中最暴力直接的计费方式莫过于记录下每段时间内客户的流量了,然后根据流量总值进行收费,而CDN行业则流传着一种被称作95峰值计费的方案。 我们以网宿和阿里的95峰值计费方式为例介绍这...

weixin_39909366的博客 666

Nginx流控

Nginx流控介绍 流量限制(rate-limiting),是Nginx中一个非常实用,却经常被错误理解和错误配置的功能。我们可以用来限制用户在给定时间内HTTP请求的数量。请求,可以是一个简单网站首页的GET请求,也可以是登录表单的POST请求。 流量限制可以用作安全目的,比如可以减慢暴力密码破解的速率。通过将传入请求的速率限制为真实用户的典型值,并标识目标URL地址(通过日志),还可以用来抵御DDOS攻击。更常见的情况,该功能被用来保护上游应用服务器不被同时太多用户请求所压垮。 本篇文章将会介绍Ngin

qq_40907977的博客 1482

3步安装http-flv/rtmp/hls/hls+/http-ts直播系统

3步搭建直播系统介绍新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 介绍 izaizhiqi 文章分布式直播...

impingo的博客 4153

JAVA 按流量计费的连接_按流量计费云主机贵吗

流量计费流量计费,主要适用于平时带宽使用较低,但会间歇出现网络访问高峰的场景。当然,若无特殊需求,一般还是建议选择按带宽计费。即便是在同一家服务商,不同线路按流量计费的单价也是不一样的。比如,如果害怕流量突增产生较高的费用,也可通过设置峰值带宽(电信和智能多线最大200M,其他线路100M )来预防,以防止突发流量产生高费用而难以承受。按流量计费的结算及扣费情况1、按流量计费为后付费模式,每小...

weixin_42514288的博客 603

一种简单的实现hls流量统计的方法

一 为什么要流量统计?很多cdn都是按流量算钱的,当然要统计二 hls都是短链接,如何统计流量呢?由于hls是基于http的,而且是短连接,服务端无法知道,哪两次http请求是属于同一个客户端的请求。(有人说通过ip和端口绑定,有的客户端是nat出口,还是变化的ip和端口)三 简单的统计机制根据hls的特性,在访问m3u8的时候,使用的url,客户端会保持原样,只是把默认的xx.m3u8替换为m3...

fantasy_ARM9的博客 1323

10分钟极速配置黑苹果:OpCore Simplify图形化工具完全指南

还在为复杂的OpenCore配置而烦恼吗?OpCore Simplify是一款革命性的黑苹果配置工具,它能让你在短短10分钟内完成原本需要数小时甚至数天的EFI配置工作。这款智能图形化工具通过自动化流程和直观界面,彻底改变了黑苹果的配置方式,让每个人都能轻松享受macOS的魅力。 ## 🎯 黑苹果配置的三大痛点与解决方案 ### 痛点一:技术门槛过高,配置文件复杂难懂 传统黑苹果配置需要手

gitblog_00213的博客 1112

PushProx性能优化:大规模监控场景下的调优技巧

PushProx作为一款允许Prometheus穿越NAT等网络障碍进行数据采集的代理工具,在大规模监控场景下的性能表现直接影响整个监控系统的稳定性和数据准确性。本文将分享6个实用调优技巧,帮助你在高并发环境中充分发挥PushProx的潜力,轻松应对成百上千节点的监控挑战。 ## 1. 超时设置优化:平衡响应速度与数据完整性 超时配置是PushProx性能调优的基础环节,直接影响资源利用率和监

gitblog_00185的博客 368

Nginx模块开发之http handler实现流量统计(入门篇)

在本文中,我们将介绍HTTP Handler的概念和作用,探讨如何使用Nginx模块开发来实现流量统计功能。我们将从基础的HTTP Handler编写开始,逐步引导您完成一个简单而功能强大的流量统计模块。无论您是新手还是有一定经验的开发者,本文都将为您提供入门级别的指导和实例代码,帮助您快速上手并实现您的流量统计需求。

Lion_Long的博客 5509

分布式直播系统(三)【Nginx-rtmp rtmp、http-flv、http-ts、hls、hls+ 配置说明】

服务配置项全局配置rtmp服务配置http-flv配置http-ts服务配置hls服务配置QQ交流群:697773082(流媒体人的后院) 全局配置 配置项 参数类型 默认值 描述 server_names_hash_max_size 整型数 512 服务器server_name的最大长度 listen 整型数 1935 rtmp服务监听端口 server_name 字符串...

impingo的博客 5879

分布式直播系统二)【nginx-rtmp-module动态转推和动态回源】

转载请注明出处:https://blog.csdn.net/impingo 项目地址:https://github.com/im-pingo/pingos 项目官网:https://pingos.io 目录动态转推 上篇文章分布式直播系统一)【nginx-rtmp-module鉴权接口】已经介绍了oclp_play和oclp_publish的鉴权使用方法。这篇文章将介绍如何利用oclp_pu...

impingo的博客 2314

RTMP解析

RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。随着VR技术的发展,视频直播等领域逐渐活跃起来,RTMP作为业内广泛使用的协议也重新被相关开发者重视起来。RTMP协议是应用层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。

hanms的博客 3029

nginx学习笔记一:统计网络输出流量

一:nginx的配置中,必须配置日志   access_log  /wap1/nginx_log/1123.log  main;   配置的优点:可以根据日志,分析这个业务的流量输出   二:分析方法: 1:统计流量 awk 'BEGIN{SUM=0}{if($9="200"){SUM+=$10}}END{print SUM}' 1123.log 2:统计某种类型的流量:awk...

键盘上的舞者 530

Nginx 流量统计分析

目录程序简介输出结果环境程序要求例子代码 程序简介 通过分析nginx日志,统计出nginx流量(统计nginx日志中 $body_bytes_sent 字段),能自定义时间间隔,默认时间间隔为5分钟,单位为分钟。 输出结果 开始时间 结束时间 分割线 统计流量 2019-11-23 03:26:00 2019-11-23 04:26:00 <=> 2.04M 2019-11-23 04:27:43 2019-11-23 05:27:43 <=> 895.05K 2019-11-23

不吃茄子啦的博客 3408

nginx流量带宽等请求状态统计( ngx_req_status)

介绍 ngx_req_status用来展示nginx请求状态信息,类似于apache的status,nginx自带的模块只能显示连接数等等信息,我们并不能知道到底有哪些请求、以及各url域名所消耗的带宽是多少。ngx_req_status提供了这些功能. 功能特性 按域名、url、ip等等统计信息 统计总流量 统计当前带宽\峰值带宽 统计总请求数量 1. 安装 ...

ronon77的专栏 855

2.上网日志流量统计

数据(http.log) 13502468823 https://image.baidu.com 20 1000 18320173382 http://baidu.com 20 1000 13925057413 https://www.jianshu.com/p/bb88f7111b9e 20 3000 13760778710 http://blog.csdn.net/article/detai...

qq_43048011的博客 762
上一篇: 分布式直播系统(九)【nginx-rtmp控制台暂停、录像控制】
下一篇: 如何将安防摄像头接入互联网直播服务器
im-pingo
博客等级 码龄7年 304粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值