nginx视频流统计

时间:2018-06-29 23:04:26

标签: nginx video-streaming

我正在使用ngx_http_mp4_module从服务器流式传输视频。我有一台可以被多个域访问的服务器。

我使用以下命令配置nginx:

location /content/ {
    mp4;
    mp4_buffer_size       1m;
    mp4_max_buffer_size   5m;
}

我将所有视频存储在服务器中的/ content文件夹下,并通过网址http://example.com/content/testvideo.mp4

访问它们

由于我可以访问具有多个域的服务器,因此可以通过访问

观看同一视频
  

http://mydomain1.com/content/testvideo.mp4

  

http://mydomain2.com/content/testvideo.mp4

问题是:如何记录观看视频的网址以及多少秒的统计信息?

1 个答案:

答案 0 :(得分:1)

设置包括$host$request_time变量的日志记录格式。

在该位置指令中使用该日志记录格式。

它已在Nginx网站上完整记录,并提供了可包含在日志中的变量列表,以下变量属于http块,并且是标准combined日志格式的修改版,其中包含上述两个变量添加到末尾:

log_format streaming '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" $host $request_time';

这定义了名称为streaming的日志格式,变量$host显然是客户端请求中的主机名。根据文档,$request_time是:

  

以毫秒为单位的请求处理时间,以毫秒为单位;   从客户端读取第一个字节到第二个字节之间经过的时间   将最后一个字节发送到客户端后进行日志写入

如果您的视频是CBR,您还可以使用$bytes_sent记录传输到客户端的总数据并计算以这种方式传输的视频的持续时间。

一旦定义了自定义日志格式,然后在流的位置块中,就为该位置的请求设置指令以使用该格式进行日志记录,如下所示:

access_log /path/to/log/video.log streaming;

这只是写入日志的路径,streaming是用于此日志的日志格式。

现在Nginx将创建一个日志文件,其中包含对该位置的所有请求,无论客户端访问的域是什么。

也许您希望每个域使用单独的日志?没问题,只需将$host变量用作access_log指令中路径的一部分

access_log /path/to/log/$host-video.log streaming;

现在,每个域都将获得自己的日志。 example.com-video.log,example.net-video.log等

也许两者都想要?没问题,您可以在同一级别内指定多个access_log指令:

access_log /path/to/log/video.log streaming;
access_log /path/to/log/$host-video.log streaming;