first commit
This commit is contained in:
		
						commit
						fdcafae6ed
					
				
					 6 changed files with 534 additions and 0 deletions
				
			
		
							
								
								
									
										79
									
								
								Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								Dockerfile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,79 @@
 | 
				
			||||||
 | 
					FROM alpine:latest
 | 
				
			||||||
 | 
					MAINTAINER Alfred Gutierrez <alf.g.jr@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ENV NGINX_VERSION 1.9.15
 | 
				
			||||||
 | 
					ENV FFMPEG_VERSION 3.0.2
 | 
				
			||||||
 | 
					ENV NGINX_RTMP_VERSION 1.1.10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXPOSE 1935
 | 
				
			||||||
 | 
					EXPOSE 80
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN mkdir -p /opt/data && mkdir /www
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN	apk update && apk add	\
 | 
				
			||||||
 | 
						gcc	binutils-libs binutils build-base	libgcc make pkgconf pkgconfig \
 | 
				
			||||||
 | 
						openssl openssl-dev ca-certificates pcre \
 | 
				
			||||||
 | 
						musl-dev libc-dev pcre-dev zlib-dev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Get nginx source.
 | 
				
			||||||
 | 
					RUN cd /tmp && wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz \
 | 
				
			||||||
 | 
					 && tar zxf nginx-${NGINX_VERSION}.tar.gz \
 | 
				
			||||||
 | 
					 && rm nginx-${NGINX_VERSION}.tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Get nginx-rtmp module.
 | 
				
			||||||
 | 
					RUN cd /tmp && wget https://github.com/arut/nginx-rtmp-module/archive/v${NGINX_RTMP_VERSION}.tar.gz \
 | 
				
			||||||
 | 
					  && tar zxf v${NGINX_RTMP_VERSION}.tar.gz && rm v${NGINX_RTMP_VERSION}.tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compile nginx with nginx-rtmp module.
 | 
				
			||||||
 | 
					RUN cd /tmp/nginx-${NGINX_VERSION} \
 | 
				
			||||||
 | 
					  && ./configure \
 | 
				
			||||||
 | 
					  --prefix=/opt/nginx \
 | 
				
			||||||
 | 
					  --add-module=/tmp/nginx-rtmp-module-${NGINX_RTMP_VERSION} \
 | 
				
			||||||
 | 
					  --conf-path=/opt/nginx/nginx.conf --error-log-path=/opt/nginx/logs/error.log --http-log-path=/opt/nginx/logs/access.log \
 | 
				
			||||||
 | 
					  --with-debug
 | 
				
			||||||
 | 
					RUN cd /tmp/nginx-${NGINX_VERSION} && make && make install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ffmpeg dependencies.
 | 
				
			||||||
 | 
					RUN apk add nasm yasm-dev lame-dev libogg-dev x264-dev libvpx-dev libvorbis-dev x265-dev freetype-dev libass-dev libwebp-dev rtmpdump-dev libtheora-dev opus-dev
 | 
				
			||||||
 | 
					RUN echo http://dl-cdn.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories
 | 
				
			||||||
 | 
					RUN apk add --update fdk-aac-dev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Get ffmpeg source.
 | 
				
			||||||
 | 
					RUN cd /tmp/ && wget http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz \
 | 
				
			||||||
 | 
					  && tar zxf ffmpeg-${FFMPEG_VERSION}.tar.gz && rm ffmpeg-${FFMPEG_VERSION}.tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compile ffmpeg.
 | 
				
			||||||
 | 
					RUN cd /tmp/ffmpeg-${FFMPEG_VERSION} && \
 | 
				
			||||||
 | 
					 ./configure \
 | 
				
			||||||
 | 
					 --enable-version3 \
 | 
				
			||||||
 | 
					 --enable-gpl \
 | 
				
			||||||
 | 
					 --enable-nonfree \
 | 
				
			||||||
 | 
					 --enable-small \
 | 
				
			||||||
 | 
					 --enable-libmp3lame \
 | 
				
			||||||
 | 
					 --enable-libx264 \
 | 
				
			||||||
 | 
					 --enable-libx265 \
 | 
				
			||||||
 | 
					 --enable-libvpx \
 | 
				
			||||||
 | 
					 --enable-libtheora \
 | 
				
			||||||
 | 
					 --enable-libvorbis \
 | 
				
			||||||
 | 
					 --enable-libopus \
 | 
				
			||||||
 | 
					 --enable-libfdk-aac \
 | 
				
			||||||
 | 
					 --enable-libass \
 | 
				
			||||||
 | 
					 --enable-libwebp \
 | 
				
			||||||
 | 
					 --enable-librtmp \
 | 
				
			||||||
 | 
					 --enable-postproc \
 | 
				
			||||||
 | 
					 --enable-avresample \
 | 
				
			||||||
 | 
					 --enable-libfreetype \
 | 
				
			||||||
 | 
					 --enable-openssl \
 | 
				
			||||||
 | 
					 --disable-debug \
 | 
				
			||||||
 | 
					 && make && make install && make distclean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN cd /opt/ && tar cvzf /tmp/nginx.tar.gz nginx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Cleanup.
 | 
				
			||||||
 | 
					RUN rm -rf /var/cache/* /tmp/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# RUN mkdir /www/static
 | 
				
			||||||
 | 
					ADD nginx.conf /opt/nginx/nginx.conf
 | 
				
			||||||
 | 
					ADD static /www/static
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CMD ["/opt/nginx/sbin/nginx"]
 | 
				
			||||||
							
								
								
									
										21
									
								
								LICENSE
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								LICENSE
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					The MIT License (MIT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2016 Alfred Gutierrez
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above copyright notice and this permission notice shall be included in all
 | 
				
			||||||
 | 
					copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
				
			||||||
 | 
					SOFTWARE.
 | 
				
			||||||
							
								
								
									
										1
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					# docker-nginx-rtmp
 | 
				
			||||||
							
								
								
									
										71
									
								
								nginx.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								nginx.conf
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,71 @@
 | 
				
			||||||
 | 
					daemon off;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					error_log logs/error.log debug;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					events {
 | 
				
			||||||
 | 
					    worker_connections 1024;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rtmp {
 | 
				
			||||||
 | 
					    server {
 | 
				
			||||||
 | 
					        listen 1935;
 | 
				
			||||||
 | 
					        chunk_size 4000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        application encoder {
 | 
				
			||||||
 | 
					            live on;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            exec ffmpeg -i rtmp://localhost:1935/encoder/$name
 | 
				
			||||||
 | 
					              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 2500k -f flv -g 30 -r 30 -s 1280x720 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_720p2628kbs
 | 
				
			||||||
 | 
					              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 1000k -f flv -g 30 -r 30 -s 854x480 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_480p1128kbs
 | 
				
			||||||
 | 
					              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 750k -f flv -g 30 -r 30 -s 640x360 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_360p878kbs
 | 
				
			||||||
 | 
					              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 400k -f flv -g 30 -r 30 -s 426x240 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_240p528kbs
 | 
				
			||||||
 | 
					              -c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 200k -f flv -g 15 -r 15 -s 426x240 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_240p264kbs;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        application hls {
 | 
				
			||||||
 | 
					            live on;
 | 
				
			||||||
 | 
					            hls on;
 | 
				
			||||||
 | 
					            hls_fragment_naming system;
 | 
				
			||||||
 | 
					            hls_fragment 5s;
 | 
				
			||||||
 | 
					            hls_path /opt/data/hls;
 | 
				
			||||||
 | 
					            hls_nested on;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            hls_variant _720p2628kbs BANDWIDTH=2628000,RESOLUTION=1280x720;
 | 
				
			||||||
 | 
					            hls_variant _480p1128kbs BANDWIDTH=1128000,RESOLUTION=854x480;
 | 
				
			||||||
 | 
					            hls_variant _360p878kbs BANDWIDTH=878000,RESOLUTION=640x360;
 | 
				
			||||||
 | 
					            hls_variant _240p528kbs BANDWIDTH=528000,RESOLUTION=426x240;
 | 
				
			||||||
 | 
					            hls_variant _240p264kbs BANDWIDTH=264000,RESOLUTION=426x240;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					http {
 | 
				
			||||||
 | 
					    server {
 | 
				
			||||||
 | 
					        listen 80;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location /hls {
 | 
				
			||||||
 | 
					            types {
 | 
				
			||||||
 | 
					                application/vnd.apple.mpegurl m3u8;
 | 
				
			||||||
 | 
					                video/mp2t ts;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            root /opt/data;
 | 
				
			||||||
 | 
					            add_header Cache-Control no-cache;
 | 
				
			||||||
 | 
					            add_header Access-Control-Allow-Origin *;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location /stat {
 | 
				
			||||||
 | 
					            rtmp_stat all;
 | 
				
			||||||
 | 
					            rtmp_stat_stylesheet static/stat.xsl;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location /static {
 | 
				
			||||||
 | 
					            alias /www/static;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location = /crossdomain.xml {
 | 
				
			||||||
 | 
					            root /www/static;
 | 
				
			||||||
 | 
					            default_type text/xml;
 | 
				
			||||||
 | 
					            expires 24h;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										7
									
								
								static/crossdomain.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								static/crossdomain.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					<?xml version="1.0"?>
 | 
				
			||||||
 | 
					<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
 | 
				
			||||||
 | 
					<cross-domain-policy>
 | 
				
			||||||
 | 
					  <site-control permitted-cross-domain-policies="all"/>
 | 
				
			||||||
 | 
					  <allow-access-from domain="*" secure="false"/>
 | 
				
			||||||
 | 
					  <allow-http-request-headers-from domain="*" headers="*" secure="false"/>
 | 
				
			||||||
 | 
					</cross-domain-policy>
 | 
				
			||||||
							
								
								
									
										355
									
								
								static/stat.xsl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										355
									
								
								static/stat.xsl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,355 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8" ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					   Copyright (C) Roman Arutyunyan
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="/">
 | 
				
			||||||
 | 
					    <html>
 | 
				
			||||||
 | 
					        <head>
 | 
				
			||||||
 | 
					            <title>RTMP statistics</title>
 | 
				
			||||||
 | 
					        </head>
 | 
				
			||||||
 | 
					        <body>
 | 
				
			||||||
 | 
					            <xsl:apply-templates select="rtmp"/>
 | 
				
			||||||
 | 
					            <hr/>
 | 
				
			||||||
 | 
					            Generated by <a href='https://github.com/arut/nginx-rtmp-module'>
 | 
				
			||||||
 | 
					            nginx-rtmp-module</a> <xsl:value-of select="/rtmp/nginx_rtmp_version"/>,
 | 
				
			||||||
 | 
					            <a href="http://nginx.org">nginx</a> <xsl:value-of select="/rtmp/nginx_version"/>,
 | 
				
			||||||
 | 
					            pid <xsl:value-of select="/rtmp/pid"/>,
 | 
				
			||||||
 | 
					            built <xsl:value-of select="/rtmp/built"/> <xsl:value-of select="/rtmp/compiler"/>
 | 
				
			||||||
 | 
					        </body>
 | 
				
			||||||
 | 
					    </html>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="rtmp">
 | 
				
			||||||
 | 
					    <table cellspacing="1" cellpadding="5">
 | 
				
			||||||
 | 
					        <tr bgcolor="#999999">
 | 
				
			||||||
 | 
					            <th>RTMP</th>
 | 
				
			||||||
 | 
					            <th>#clients</th>
 | 
				
			||||||
 | 
					            <th colspan="4">Video</th>
 | 
				
			||||||
 | 
					            <th colspan="4">Audio</th>
 | 
				
			||||||
 | 
					            <th>In bytes</th>
 | 
				
			||||||
 | 
					            <th>Out bytes</th>
 | 
				
			||||||
 | 
					            <th>In bits/s</th>
 | 
				
			||||||
 | 
					            <th>Out bits/s</th>
 | 
				
			||||||
 | 
					            <th>State</th>
 | 
				
			||||||
 | 
					            <th>Time</th>
 | 
				
			||||||
 | 
					        </tr>
 | 
				
			||||||
 | 
					        <tr>
 | 
				
			||||||
 | 
					            <td colspan="2">Accepted: <xsl:value-of select="naccepted"/></td>
 | 
				
			||||||
 | 
					            <th bgcolor="#999999">codec</th>
 | 
				
			||||||
 | 
					            <th bgcolor="#999999">bits/s</th>
 | 
				
			||||||
 | 
					            <th bgcolor="#999999">size</th>
 | 
				
			||||||
 | 
					            <th bgcolor="#999999">fps</th>
 | 
				
			||||||
 | 
					            <th bgcolor="#999999">codec</th>
 | 
				
			||||||
 | 
					            <th bgcolor="#999999">bits/s</th>
 | 
				
			||||||
 | 
					            <th bgcolor="#999999">freq</th>
 | 
				
			||||||
 | 
					            <th bgcolor="#999999">chan</th>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					                <xsl:call-template name="showsize">
 | 
				
			||||||
 | 
					                    <xsl:with-param name="size" select="bytes_in"/>
 | 
				
			||||||
 | 
					                </xsl:call-template>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					                <xsl:call-template name="showsize">
 | 
				
			||||||
 | 
					                    <xsl:with-param name="size" select="bytes_out"/>
 | 
				
			||||||
 | 
					                </xsl:call-template>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					                <xsl:call-template name="showsize">
 | 
				
			||||||
 | 
					                    <xsl:with-param name="size" select="bw_in"/>
 | 
				
			||||||
 | 
					                    <xsl:with-param name="bits" select="1"/>
 | 
				
			||||||
 | 
					                    <xsl:with-param name="persec" select="1"/>
 | 
				
			||||||
 | 
					                </xsl:call-template>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					                <xsl:call-template name="showsize">
 | 
				
			||||||
 | 
					                    <xsl:with-param name="size" select="bw_out"/>
 | 
				
			||||||
 | 
					                    <xsl:with-param name="bits" select="1"/>
 | 
				
			||||||
 | 
					                    <xsl:with-param name="persec" select="1"/>
 | 
				
			||||||
 | 
					                </xsl:call-template>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td/>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					                <xsl:call-template name="showtime">
 | 
				
			||||||
 | 
					                    <xsl:with-param name="time" select="/rtmp/uptime * 1000"/>
 | 
				
			||||||
 | 
					                </xsl:call-template>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					        </tr>
 | 
				
			||||||
 | 
					        <xsl:apply-templates select="server"/>
 | 
				
			||||||
 | 
					    </table>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="server">
 | 
				
			||||||
 | 
					    <xsl:apply-templates select="application"/>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="application">
 | 
				
			||||||
 | 
					    <tr bgcolor="#999999">
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <b><xsl:value-of select="name"/></b>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					    <xsl:apply-templates select="live"/>
 | 
				
			||||||
 | 
					    <xsl:apply-templates select="play"/>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="live">
 | 
				
			||||||
 | 
					    <tr bgcolor="#aaaaaa">
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <i>live streams</i>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td align="middle">
 | 
				
			||||||
 | 
					            <xsl:value-of select="nclients"/>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					    <xsl:apply-templates select="stream"/>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="play">
 | 
				
			||||||
 | 
					    <tr bgcolor="#aaaaaa">
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <i>vod streams</i>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td align="middle">
 | 
				
			||||||
 | 
					            <xsl:value-of select="nclients"/>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					    <xsl:apply-templates select="stream"/>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="stream">
 | 
				
			||||||
 | 
					    <tr valign="top">
 | 
				
			||||||
 | 
					        <xsl:attribute name="bgcolor">
 | 
				
			||||||
 | 
					            <xsl:choose>
 | 
				
			||||||
 | 
					                <xsl:when test="active">#cccccc</xsl:when>
 | 
				
			||||||
 | 
					                <xsl:otherwise>#dddddd</xsl:otherwise>
 | 
				
			||||||
 | 
					            </xsl:choose>
 | 
				
			||||||
 | 
					        </xsl:attribute>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <a href="">
 | 
				
			||||||
 | 
					                <xsl:attribute name="onclick">
 | 
				
			||||||
 | 
					                    var d=document.getElementById('<xsl:value-of select="../../name"/>-<xsl:value-of select="name"/>');
 | 
				
			||||||
 | 
					                    d.style.display=d.style.display=='none'?'':'none';
 | 
				
			||||||
 | 
					                    return false
 | 
				
			||||||
 | 
					                </xsl:attribute>
 | 
				
			||||||
 | 
					                <xsl:value-of select="name"/>
 | 
				
			||||||
 | 
					                <xsl:if test="string-length(name) = 0">
 | 
				
			||||||
 | 
					                    [EMPTY]
 | 
				
			||||||
 | 
					                </xsl:if>
 | 
				
			||||||
 | 
					            </a>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td align="middle"> <xsl:value-of select="nclients"/> </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:value-of select="meta/video/codec"/> <xsl:value-of select="meta/video/profile"/> <xsl:value-of select="meta/video/level"/>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:call-template name="showsize">
 | 
				
			||||||
 | 
					                <xsl:with-param name="size" select="bw_video"/>
 | 
				
			||||||
 | 
					                <xsl:with-param name="bits" select="1"/>
 | 
				
			||||||
 | 
					                <xsl:with-param name="persec" select="1"/>
 | 
				
			||||||
 | 
					            </xsl:call-template>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:apply-templates select="meta/video/width"/>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:value-of select="meta/video/frame_rate"/>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:value-of select="meta/audio/codec"/> <xsl:value-of select="meta/audio/profile"/>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:call-template name="showsize">
 | 
				
			||||||
 | 
					                <xsl:with-param name="size" select="bw_audio"/>
 | 
				
			||||||
 | 
					                <xsl:with-param name="bits" select="1"/>
 | 
				
			||||||
 | 
					                <xsl:with-param name="persec" select="1"/>
 | 
				
			||||||
 | 
					            </xsl:call-template>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:apply-templates select="meta/audio/sample_rate"/>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:value-of select="meta/audio/channels"/>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:call-template name="showsize">
 | 
				
			||||||
 | 
					               <xsl:with-param name="size" select="bytes_in"/>
 | 
				
			||||||
 | 
					           </xsl:call-template>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:call-template name="showsize">
 | 
				
			||||||
 | 
					                <xsl:with-param name="size" select="bytes_out"/>
 | 
				
			||||||
 | 
					            </xsl:call-template>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:call-template name="showsize">
 | 
				
			||||||
 | 
					                <xsl:with-param name="size" select="bw_in"/>
 | 
				
			||||||
 | 
					                <xsl:with-param name="bits" select="1"/>
 | 
				
			||||||
 | 
					                <xsl:with-param name="persec" select="1"/>
 | 
				
			||||||
 | 
					            </xsl:call-template>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:call-template name="showsize">
 | 
				
			||||||
 | 
					                <xsl:with-param name="size" select="bw_out"/>
 | 
				
			||||||
 | 
					                <xsl:with-param name="bits" select="1"/>
 | 
				
			||||||
 | 
					                <xsl:with-param name="persec" select="1"/>
 | 
				
			||||||
 | 
					            </xsl:call-template>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td><xsl:call-template name="streamstate"/></td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:call-template name="showtime">
 | 
				
			||||||
 | 
					               <xsl:with-param name="time" select="time"/>
 | 
				
			||||||
 | 
					            </xsl:call-template>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					    <tr style="display:none">
 | 
				
			||||||
 | 
					        <xsl:attribute name="id">
 | 
				
			||||||
 | 
					            <xsl:value-of select="../../name"/>-<xsl:value-of select="name"/>
 | 
				
			||||||
 | 
					        </xsl:attribute>
 | 
				
			||||||
 | 
					        <td colspan="16" ngcolor="#eeeeee">
 | 
				
			||||||
 | 
					            <table cellspacing="1" cellpadding="5">
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                    <th>Id</th>
 | 
				
			||||||
 | 
					                    <th>State</th>
 | 
				
			||||||
 | 
					                    <th>Address</th>
 | 
				
			||||||
 | 
					                    <th>Flash version</th>
 | 
				
			||||||
 | 
					                    <th>Page URL</th>
 | 
				
			||||||
 | 
					                    <th>SWF URL</th>
 | 
				
			||||||
 | 
					                    <th>Dropped</th>
 | 
				
			||||||
 | 
					                    <th>Timestamp</th>
 | 
				
			||||||
 | 
					                    <th>A-V</th>
 | 
				
			||||||
 | 
					                    <th>Time</th>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					                <xsl:apply-templates select="client"/>
 | 
				
			||||||
 | 
					            </table>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template name="showtime">
 | 
				
			||||||
 | 
					    <xsl:param name="time"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <xsl:if test="$time > 0">
 | 
				
			||||||
 | 
					        <xsl:variable name="sec">
 | 
				
			||||||
 | 
					            <xsl:value-of select="floor($time div 1000)"/>
 | 
				
			||||||
 | 
					        </xsl:variable>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <xsl:if test="$sec >= 86400">
 | 
				
			||||||
 | 
					            <xsl:value-of select="floor($sec div 86400)"/>d
 | 
				
			||||||
 | 
					        </xsl:if>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <xsl:if test="$sec >= 3600">
 | 
				
			||||||
 | 
					            <xsl:value-of select="(floor($sec div 3600)) mod 24"/>h
 | 
				
			||||||
 | 
					        </xsl:if>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <xsl:if test="$sec >= 60">
 | 
				
			||||||
 | 
					            <xsl:value-of select="(floor($sec div 60)) mod 60"/>m
 | 
				
			||||||
 | 
					        </xsl:if>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <xsl:value-of select="$sec mod 60"/>s
 | 
				
			||||||
 | 
					    </xsl:if>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template name="showsize">
 | 
				
			||||||
 | 
					    <xsl:param name="size"/>
 | 
				
			||||||
 | 
					    <xsl:param name="bits" select="0" />
 | 
				
			||||||
 | 
					    <xsl:param name="persec" select="0" />
 | 
				
			||||||
 | 
					    <xsl:variable name="sizen">
 | 
				
			||||||
 | 
					        <xsl:value-of select="floor($size div 1024)"/>
 | 
				
			||||||
 | 
					    </xsl:variable>
 | 
				
			||||||
 | 
					    <xsl:choose>
 | 
				
			||||||
 | 
					        <xsl:when test="$sizen >= 1073741824">
 | 
				
			||||||
 | 
					            <xsl:value-of select="format-number($sizen div 1073741824,'#.###')"/> T</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <xsl:when test="$sizen >= 1048576">
 | 
				
			||||||
 | 
					            <xsl:value-of select="format-number($sizen div 1048576,'#.###')"/> G</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <xsl:when test="$sizen >= 1024">
 | 
				
			||||||
 | 
					            <xsl:value-of select="format-number($sizen div 1024,'#.##')"/> M</xsl:when>
 | 
				
			||||||
 | 
					        <xsl:when test="$sizen >= 0">
 | 
				
			||||||
 | 
					            <xsl:value-of select="$sizen"/> K</xsl:when>
 | 
				
			||||||
 | 
					    </xsl:choose>
 | 
				
			||||||
 | 
					    <xsl:if test="string-length($size) > 0">
 | 
				
			||||||
 | 
					        <xsl:choose>
 | 
				
			||||||
 | 
					            <xsl:when test="$bits = 1">b</xsl:when>
 | 
				
			||||||
 | 
					            <xsl:otherwise>B</xsl:otherwise>
 | 
				
			||||||
 | 
					        </xsl:choose>
 | 
				
			||||||
 | 
					        <xsl:if test="$persec = 1">/s</xsl:if>
 | 
				
			||||||
 | 
					    </xsl:if>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template name="streamstate">
 | 
				
			||||||
 | 
					    <xsl:choose>
 | 
				
			||||||
 | 
					        <xsl:when test="active">active</xsl:when>
 | 
				
			||||||
 | 
					        <xsl:otherwise>idle</xsl:otherwise>
 | 
				
			||||||
 | 
					    </xsl:choose>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template name="clientstate">
 | 
				
			||||||
 | 
					    <xsl:choose>
 | 
				
			||||||
 | 
					        <xsl:when test="publishing">publishing</xsl:when>
 | 
				
			||||||
 | 
					        <xsl:otherwise>playing</xsl:otherwise>
 | 
				
			||||||
 | 
					    </xsl:choose>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="client">
 | 
				
			||||||
 | 
					    <tr>
 | 
				
			||||||
 | 
					        <xsl:attribute name="bgcolor">
 | 
				
			||||||
 | 
					            <xsl:choose>
 | 
				
			||||||
 | 
					                <xsl:when test="publishing">#cccccc</xsl:when>
 | 
				
			||||||
 | 
					                <xsl:otherwise>#eeeeee</xsl:otherwise>
 | 
				
			||||||
 | 
					            </xsl:choose>
 | 
				
			||||||
 | 
					        </xsl:attribute>
 | 
				
			||||||
 | 
					        <td><xsl:value-of select="id"/></td>
 | 
				
			||||||
 | 
					        <td><xsl:call-template name="clientstate"/></td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <a target="_blank">
 | 
				
			||||||
 | 
					                <xsl:attribute name="href">
 | 
				
			||||||
 | 
					                    http://apps.db.ripe.net/search/query.html?searchtext=<xsl:value-of select="address"/>
 | 
				
			||||||
 | 
					                </xsl:attribute>
 | 
				
			||||||
 | 
					                <xsl:attribute name="title">whois</xsl:attribute>
 | 
				
			||||||
 | 
					                <xsl:value-of select="address"/>
 | 
				
			||||||
 | 
					            </a>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td><xsl:value-of select="flashver"/></td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <a target="_blank">
 | 
				
			||||||
 | 
					                <xsl:attribute name="href">
 | 
				
			||||||
 | 
					                    <xsl:value-of select="pageurl"/>
 | 
				
			||||||
 | 
					                </xsl:attribute>
 | 
				
			||||||
 | 
					                <xsl:value-of select="pageurl"/>
 | 
				
			||||||
 | 
					            </a>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td><xsl:value-of select="swfurl"/></td>
 | 
				
			||||||
 | 
					        <td><xsl:value-of select="dropped"/></td>
 | 
				
			||||||
 | 
					        <td><xsl:value-of select="timestamp"/></td>
 | 
				
			||||||
 | 
					        <td><xsl:value-of select="avsync"/></td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					            <xsl:call-template name="showtime">
 | 
				
			||||||
 | 
					               <xsl:with-param name="time" select="time"/>
 | 
				
			||||||
 | 
					            </xsl:call-template>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="publishing">
 | 
				
			||||||
 | 
					    publishing
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="active">
 | 
				
			||||||
 | 
					    active
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:template match="width">
 | 
				
			||||||
 | 
					    <xsl:value-of select="."/>x<xsl:value-of select="../height"/>
 | 
				
			||||||
 | 
					</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</xsl:stylesheet>
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue