commit
8cddc04f4c
12 changed files with 1556 additions and 0 deletions
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Style-Type" content="text/css" /> |
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
<link rel="stylesheet" href="./robodoc.css" type="text/css" /> |
||||
<title>Index</title> |
||||
<!-- Source: ./ --> |
||||
<!-- Generated with ROBODoc Version 4.99.41 (Jul 2 2011) --> |
||||
</head> |
||||
<body> |
||||
<div id="logo"> |
||||
<a name="robo_top_of_doc"></a> |
||||
</div> <!-- logo --> |
||||
<div id="extra"> |
||||
</div> <!-- extra --> |
||||
<div id="navigation"> |
||||
<a class="menuitem" href="./toc_index.html#top">Table of Contents</a> |
||||
<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a> |
||||
<a class="menuitem" href="#top">Index</a> |
||||
<a class="menuitem" href="./robo_files.html#top">Files</a> |
||||
<a class="menuitem" href="./robo_functions.html#top">Functions</a> |
||||
<a class="menuitem" href="./tobo_toplevel.html#top">Toplevel</a> |
||||
<a class="menuitem" href="./robo_variables.html#top">Variables</a> |
||||
</div> <!-- navigation --> |
||||
<div id="content"> |
||||
<h1>Index</h1> |
||||
<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2> |
||||
<h2><a name="C"></a>C</h2><a href="./streamsaver.html#robo5" class="indexitem" >config</a> |
||||
<h2><a name="E"></a>E</h2><a href="./streamsaver.html#robo2" class="indexitem" >enableOption</a> |
||||
<h2><a name="M"></a>M</h2><a href="./streamsaver.html#robo7" class="indexitem" >main</a> |
||||
<a href="./streamsaver.html#robo4" class="indexitem" >makeCMD</a> |
||||
<h2><a name="R"></a>R</h2><a href="./streamsaver.html#robo1" class="indexitem" >readOption</a> |
||||
<a href="./streamsaver.html#robo3" class="indexitem" >readXML</a> |
||||
<h2><a name="S"></a>S</h2><a href="./streamsaver.html#robo6" class="indexitem" >SETTINGS</a> |
||||
<a href="./streamsaver.html#robo0" class="indexitem" >streamsaver</a> |
||||
<a href="./streamsaver.html#robo_top_of_doc" class="indexitem" >streamsaver</a> |
||||
<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2> |
||||
</div> <!-- content --> |
||||
<div id="footer"> |
||||
<p>Generated from ./ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.41 on Tue Jul 12 2016 14:44:43 |
||||
</p> |
||||
</div> <!-- footer --> |
||||
</body> |
||||
</html> |
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Style-Type" content="text/css" /> |
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
<link rel="stylesheet" href="./robodoc.css" type="text/css" /> |
||||
<title>Files</title> |
||||
<!-- Source: ./ --> |
||||
<!-- Generated with ROBODoc Version 4.99.41 (Jul 2 2011) --> |
||||
</head> |
||||
<body> |
||||
<div id="logo"> |
||||
<a name="robo_top_of_doc"></a> |
||||
</div> <!-- logo --> |
||||
<div id="extra"> |
||||
</div> <!-- extra --> |
||||
<div id="navigation"> |
||||
<a class="menuitem" href="./toc_index.html#top">Table of Contents</a> |
||||
<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a> |
||||
<a class="menuitem" href="./masterindex.html#top">Index</a> |
||||
<a class="menuitem" href="#top">Files</a> |
||||
<a class="menuitem" href="./robo_functions.html#top">Functions</a> |
||||
<a class="menuitem" href="./tobo_toplevel.html#top">Toplevel</a> |
||||
<a class="menuitem" href="./robo_variables.html#top">Variables</a> |
||||
</div> <!-- navigation --> |
||||
<div id="content"> |
||||
<h1>Files</h1> |
||||
<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2> |
||||
<h2><a name="S"></a>S</h2><a href="./streamsaver.html#robo0" class="indexitem" >streamsaver</a> |
||||
<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2> |
||||
</div> <!-- content --> |
||||
<div id="footer"> |
||||
<p>Generated from ./ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.41 on Tue Jul 12 2016 14:44:43 |
||||
</p> |
||||
</div> <!-- footer --> |
||||
</body> |
||||
</html> |
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Style-Type" content="text/css" /> |
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
<link rel="stylesheet" href="./robodoc.css" type="text/css" /> |
||||
<title>Functions</title> |
||||
<!-- Source: ./ --> |
||||
<!-- Generated with ROBODoc Version 4.99.41 (Jul 2 2011) --> |
||||
</head> |
||||
<body> |
||||
<div id="logo"> |
||||
<a name="robo_top_of_doc"></a> |
||||
</div> <!-- logo --> |
||||
<div id="extra"> |
||||
</div> <!-- extra --> |
||||
<div id="navigation"> |
||||
<a class="menuitem" href="./toc_index.html#top">Table of Contents</a> |
||||
<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a> |
||||
<a class="menuitem" href="./masterindex.html#top">Index</a> |
||||
<a class="menuitem" href="./robo_files.html#top">Files</a> |
||||
<a class="menuitem" href="#top">Functions</a> |
||||
<a class="menuitem" href="./tobo_toplevel.html#top">Toplevel</a> |
||||
<a class="menuitem" href="./robo_variables.html#top">Variables</a> |
||||
</div> <!-- navigation --> |
||||
<div id="content"> |
||||
<h1>Functions</h1> |
||||
<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2> |
||||
<h2><a name="E"></a>E</h2><a href="./streamsaver.html#robo2" class="indexitem" >enableOption</a> |
||||
<h2><a name="M"></a>M</h2><a href="./streamsaver.html#robo4" class="indexitem" >makeCMD</a> |
||||
<h2><a name="R"></a>R</h2><a href="./streamsaver.html#robo1" class="indexitem" >readOption</a> |
||||
<a href="./streamsaver.html#robo3" class="indexitem" >readXML</a> |
||||
<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2> |
||||
</div> <!-- content --> |
||||
<div id="footer"> |
||||
<p>Generated from ./ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.41 on Tue Jul 12 2016 14:44:43 |
||||
</p> |
||||
</div> <!-- footer --> |
||||
</body> |
||||
</html> |
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Style-Type" content="text/css" /> |
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
<link rel="stylesheet" href="./robodoc.css" type="text/css" /> |
||||
<title>Sourcefiles</title> |
||||
<!-- Source: ./ --> |
||||
<!-- Generated with ROBODoc Version 4.99.41 (Jul 2 2011) --> |
||||
</head> |
||||
<body> |
||||
<div id="logo"> |
||||
<a name="robo_top_of_doc"></a> |
||||
</div> <!-- logo --> |
||||
<div id="extra"> |
||||
</div> <!-- extra --> |
||||
<div id="navigation"> |
||||
<a class="menuitem" href="./toc_index.html#top">Table of Contents</a> |
||||
<a class="menuitem" href="#top">Sourcefiles</a> |
||||
<a class="menuitem" href="./masterindex.html#top">Index</a> |
||||
<a class="menuitem" href="./robo_files.html#top">Files</a> |
||||
<a class="menuitem" href="./robo_functions.html#top">Functions</a> |
||||
<a class="menuitem" href="./tobo_toplevel.html#top">Toplevel</a> |
||||
<a class="menuitem" href="./robo_variables.html#top">Variables</a> |
||||
</div> <!-- navigation --> |
||||
<div id="content"> |
||||
<ul> |
||||
<li> |
||||
./<ul> |
||||
<li> |
||||
<a href="./streamsaver.html#robo_top_of_doc"><tt> |
||||
streamsaver</tt></a></li> |
||||
</ul> |
||||
</li> |
||||
</ul> |
||||
</div> <!-- content --> |
||||
<div id="footer"> |
||||
<p>Generated from ./ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.41 on Tue Jul 12 2016 14:44:43 |
||||
</p> |
||||
</div> <!-- footer --> |
||||
</body> |
||||
</html> |
@ -0,0 +1,40 @@
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Style-Type" content="text/css" /> |
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
<link rel="stylesheet" href="./robodoc.css" type="text/css" /> |
||||
<title>Variables</title> |
||||
<!-- Source: ./ --> |
||||
<!-- Generated with ROBODoc Version 4.99.41 (Jul 2 2011) --> |
||||
</head> |
||||
<body> |
||||
<div id="logo"> |
||||
<a name="robo_top_of_doc"></a> |
||||
</div> <!-- logo --> |
||||
<div id="extra"> |
||||
</div> <!-- extra --> |
||||
<div id="navigation"> |
||||
<a class="menuitem" href="./toc_index.html#top">Table of Contents</a> |
||||
<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a> |
||||
<a class="menuitem" href="./masterindex.html#top">Index</a> |
||||
<a class="menuitem" href="./robo_files.html#top">Files</a> |
||||
<a class="menuitem" href="./robo_functions.html#top">Functions</a> |
||||
<a class="menuitem" href="./tobo_toplevel.html#top">Toplevel</a> |
||||
<a class="menuitem" href="#top">Variables</a> |
||||
</div> <!-- navigation --> |
||||
<div id="content"> |
||||
<h1>Variables</h1> |
||||
<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2> |
||||
<h2><a name="C"></a>C</h2><a href="./streamsaver.html#robo5" class="indexitem" >config</a> |
||||
<h2><a name="S"></a>S</h2><a href="./streamsaver.html#robo6" class="indexitem" >SETTINGS</a> |
||||
<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2> |
||||
</div> <!-- content --> |
||||
<div id="footer"> |
||||
<p>Generated from ./ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.41 on Tue Jul 12 2016 14:44:43 |
||||
</p> |
||||
</div> <!-- footer --> |
||||
</body> |
||||
</html> |
@ -0,0 +1,302 @@
@@ -0,0 +1,302 @@
|
||||
/****h* ROBODoc/ROBODoc Cascading Style Sheet |
||||
* FUNCTION |
||||
* This is the default cascading style sheet for documentation |
||||
* generated with ROBODoc. |
||||
* You can edit this file to your own liking and then use |
||||
* it with the option |
||||
* --css <filename> |
||||
* |
||||
* This style-sheet defines the following layout |
||||
* +----------------------------------------+ |
||||
* | logo | |
||||
* +----------------------------------------+ |
||||
* | extra | |
||||
* +----------------------------------------+ |
||||
* | | navi- | |
||||
* | | gation | |
||||
* | content | | |
||||
* | | | |
||||
* +----------------------------------------+ |
||||
* | footer | |
||||
* +----------------------------------------+ |
||||
* |
||||
* This style-sheet is based on a style-sheet that was automatically |
||||
* generated with the Strange Banana stylesheet generator. |
||||
* See http://www.strangebanana.com/generator.aspx |
||||
* |
||||
****** |
||||
* $Id: html_generator.c,v 1.94 2008/06/17 11:49:27 gumpu Exp $ |
||||
*/ |
||||
|
||||
body |
||||
{ |
||||
background-color: rgb(255,255,255); |
||||
color: rgb(98,84,55); |
||||
font-family: Arial, serif; |
||||
border-color: rgb(226,199,143); |
||||
} |
||||
|
||||
pre |
||||
{ |
||||
font-family: monospace; |
||||
margin: 15px; |
||||
padding: 5px; |
||||
white-space: pre; |
||||
color: #000; |
||||
} |
||||
|
||||
pre.source |
||||
{ |
||||
background-color: #ffe; |
||||
border: dashed #aa9 1px; |
||||
} |
||||
|
||||
p |
||||
{ |
||||
margin:15px; |
||||
} |
||||
|
||||
p.item_name |
||||
{ |
||||
font-weight: bolder; |
||||
margin:5px; |
||||
font-size: 120%; |
||||
} |
||||
|
||||
#content |
||||
{ |
||||
font-size: 100%; |
||||
color: rgb(0,0,0); |
||||
background-color: rgb(255,255,255); |
||||
border-left-width: 0px; |
||||
border-right-width: 0px; |
||||
border-top-width: 0px; |
||||
border-bottom-width: 0px; |
||||
border-left-style: none; |
||||
border-right-style: none; |
||||
border-top-style: none; |
||||
border-bottom-style: none; |
||||
padding: 40px 31px 14px 17px; |
||||
border-color: rgb(0,0,0); |
||||
text-align: justify; |
||||
} |
||||
|
||||
#navigation |
||||
{ |
||||
background-color: rgb(98,84,55); |
||||
color: rgb(230,221,202); |
||||
font-family: "Times New Roman", serif; |
||||
font-style: normal; |
||||
border-color: rgb(0,0,0); |
||||
} |
||||
|
||||
a.menuitem |
||||
{ |
||||
font-size: 120%; |
||||
background-color: rgb(0,0,0); |
||||
color: rgb(195,165,100); |
||||
font-variant: normal; |
||||
text-transform: none; |
||||
font-weight: normal; |
||||
padding: 1px 8px 3px 1px; |
||||
margin-left: 5px; |
||||
margin-right: 5px; |
||||
margin-top: 5px; |
||||
margin-bottom: 5px; |
||||
border-color: rgb(159,126,57); |
||||
text-align: right; |
||||
} |
||||
|
||||
#logo, #logo a |
||||
{ |
||||
font-size: 130%; |
||||
background-color: rgb(198,178,135); |
||||
color: rgb(98,84,55); |
||||
font-family: Georgia, serif; |
||||
font-style: normal; |
||||
font-variant: normal; |
||||
text-transform: none; |
||||
font-weight: bold; |
||||
padding: 20px 18px 20px 18px; |
||||
border-color: rgb(255,255,255); |
||||
text-align: right; |
||||
} |
||||
|
||||
#extra, #extra a |
||||
{ |
||||
font-size: 128%; |
||||
background-color: rgb(0,0,0); |
||||
color: rgb(230,221,202); |
||||
font-style: normal; |
||||
font-variant: normal; |
||||
text-transform: none; |
||||
font-weight: normal; |
||||
border-left-width: 0px; |
||||
border-right-width: 0px; |
||||
border-top-width: 0px; |
||||
border-bottom-width: 0px; |
||||
border-left-style: none; |
||||
border-right-style: none; |
||||
border-top-style: none; |
||||
border-bottom-style: none; |
||||
padding: 12px 12px 12px 12px; |
||||
border-color: rgb(195,165,100); |
||||
text-align: center; |
||||
} |
||||
|
||||
#content a |
||||
{ |
||||
color: rgb(159,126,57); |
||||
text-decoration: none; |
||||
} |
||||
|
||||
#content a:hover, #content a:active |
||||
{ |
||||
color: rgb(255,255,255); |
||||
background-color: rgb(159,126,57); |
||||
} |
||||
|
||||
a.indexitem |
||||
{ |
||||
display: block; |
||||
} |
||||
|
||||
h1, h2, h3, h4, h5, h6 |
||||
{ |
||||
background-color: rgb(221,221,221); |
||||
font-family: Arial, serif; |
||||
font-style: normal; |
||||
font-variant: normal; |
||||
text-transform: none; |
||||
font-weight: normal; |
||||
} |
||||
|
||||
h1 |
||||
{ |
||||
font-size: 151%; |
||||
} |
||||
|
||||
h2 |
||||
{ |
||||
font-size: 142%; |
||||
} |
||||
|
||||
h3 |
||||
{ |
||||
font-size: 133%; |
||||
} |
||||
|
||||
h4 |
||||
{ |
||||
font-size: 124%; |
||||
} |
||||
|
||||
h5 |
||||
{ |
||||
font-size: 115%; |
||||
} |
||||
|
||||
h6 |
||||
{ |
||||
font-size: 106%; |
||||
} |
||||
|
||||
#navigation a |
||||
{ |
||||
text-decoration: none; |
||||
} |
||||
|
||||
.menuitem:hover |
||||
{ |
||||
background-color: rgb(195,165,100); |
||||
color: rgb(0,0,0); |
||||
} |
||||
|
||||
#extra a |
||||
{ |
||||
text-decoration: none; |
||||
} |
||||
|
||||
#logo a |
||||
{ |
||||
text-decoration: none; |
||||
} |
||||
|
||||
#extra a:hover |
||||
{ |
||||
} |
||||
|
||||
/* layout */ |
||||
#navigation |
||||
{ |
||||
width: 22%; |
||||
position: relative; |
||||
top: 0; |
||||
right: 0; |
||||
float: right; |
||||
text-align: center; |
||||
margin-left: 10px; |
||||
} |
||||
|
||||
.menuitem {width: auto;} |
||||
#content {width: auto;} |
||||
.menuitem {display: block;} |
||||
|
||||
|
||||
div#footer |
||||
{ |
||||
background-color: rgb(198,178,135); |
||||
color: rgb(98,84,55); |
||||
clear: left; |
||||
width: 100%; |
||||
font-size: 71%; |
||||
} |
||||
|
||||
div#footer a |
||||
{ |
||||
background-color: rgb(198,178,135); |
||||
color: rgb(98,84,55); |
||||
} |
||||
|
||||
div#footer p |
||||
{ |
||||
margin:0; |
||||
padding:5px 10px |
||||
} |
||||
|
||||
span.keyword |
||||
{ |
||||
color: #00F; |
||||
} |
||||
|
||||
span.comment |
||||
{ |
||||
color: #080; |
||||
} |
||||
|
||||
span.quote |
||||
{ |
||||
color: #F00; |
||||
} |
||||
|
||||
span.squote |
||||
{ |
||||
color: #F0F; |
||||
} |
||||
|
||||
span.sign |
||||
{ |
||||
color: #008B8B; |
||||
} |
||||
|
||||
span.line_number |
||||
{ |
||||
color: #808080; |
||||
} |
||||
|
||||
@media print |
||||
{ |
||||
#navigation {display: none;} |
||||
#content {padding: 0px;} |
||||
#content a {text-decoration: underline;} |
||||
} |
@ -0,0 +1,407 @@
@@ -0,0 +1,407 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Style-Type" content="text/css" /> |
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
<link rel="stylesheet" href="./robodoc.css" type="text/css" /> |
||||
<title>./streamsaver</title> |
||||
<!-- Source: ./streamsaver --> |
||||
<!-- Generated with ROBODoc Version 4.99.41 (Jul 2 2011) --> |
||||
</head> |
||||
<body> |
||||
<div id="logo"> |
||||
<a name="robo_top_of_doc"></a> |
||||
</div> <!-- logo --> |
||||
<div id="navigation"> |
||||
<a class="menuitem" href="./toc_index.html#top">Table of Contents</a> |
||||
<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a> |
||||
<a class="menuitem" href="./masterindex.html#top">Index</a> |
||||
<a class="menuitem" href="./robo_files.html#top">Files</a> |
||||
<a class="menuitem" href="./robo_functions.html#top">Functions</a> |
||||
<a class="menuitem" href="./tobo_toplevel.html#top">Toplevel</a> |
||||
<a class="menuitem" href="./robo_variables.html#top">Variables</a> |
||||
</div> <!-- navigation --> |
||||
<div id="content"> |
||||
<hr /> |
||||
<a name="ffmpeg2fstreamsaver"></a> |
||||
<a name="robo0"></a><h2>ffmpeg/streamsaver [ Files ]</h2> |
||||
|
||||
<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="./robo_files.html#robo_top_of_doc">Files</a> ]</p> |
||||
<p class="item_name">NAME</p> |
||||
<pre> <strong>streamsaver</strong> - обработчик аудиопотоков с нарезкой их в файлы и |
||||
ретрансляцией на icecast |
||||
</pre> |
||||
<p class="item_name">VERSION</p> |
||||
<pre> 1.0 |
||||
</pre> |
||||
<p class="item_name">DESCRIPTION</p> |
||||
<p> Сценарий принимает аудиопоток с оборудования, по UDP или TCP, |
||||
фрагментирует его на отрезки заданной длины для последующего хранения и |
||||
анализа, а также ретранслирует поток на сервер радиовещания icecast для |
||||
прослушивания аудио конечным пользователем. |
||||
</p> |
||||
<p class="item_name">USAGE</p> |
||||
<pre> <strong>streamsaver</strong> <файл настроек> |
||||
</pre> |
||||
<p class="item_name">ARGUMENTS</p> |
||||
<ul><li> <файл настроек> - xml-файл с описанием входящего и выходящего потоков и |
||||
правилами фрагментирования записей. |
||||
</li> |
||||
</ul> |
||||
<p></p> |
||||
|
||||
<hr /> |
||||
<a name="streamsaver2freadOption"></a> |
||||
<a name="robo1"></a><h2>streamsaver/readOption [ Functions ]</h2> |
||||
|
||||
<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="#robo0">streamsaver</a> ] [ <a href="./robo_functions.html#robo_top_of_doc">Functions</a> ]</p> |
||||
<p class="item_name">NAME</p> |
||||
<pre> <strong>readOption</strong> - получение значения опции из файла настроек |
||||
</pre> |
||||
<p class="item_name">USAGE</p> |
||||
<pre> <strong>readOption</strong> <опция> <файл> |
||||
</pre> |
||||
<p class="item_name">ARGUMENTS</p> |
||||
<ul><li> опция - имя опции |
||||
</li> |
||||
<li> файл - xml-файл с настройками |
||||
</li> |
||||
</ul> |
||||
<p></p> |
||||
<p class="item_name">RESULT</p> |
||||
<pre> Значение параметра при наличии искомой опции в xml-файле или значение по |
||||
умолчанию, которое задаётся при инициализации переменной <a href="#robo5">config</a>. |
||||
</pre> |
||||
<p class="item_name">SOURCE</p> |
||||
<pre class="source"><span class="line_number">45 </span><strong>readOption</strong><span class="sign">(</span><span class="sign">)</span> <span class="keyword">{</span> |
||||
<span class="line_number">46 </span> cfg<span class="sign">=</span><span class="sign">$</span><span class="sign">(</span><span class="sign">\</span><span class="keyword">grep</span> <span class="sign">-</span>oPm1 <span class="quote">"(?<=<$1>)[^<]+"</span> <span class="quote">"$2"</span><span class="sign">)</span> |
||||
<span class="line_number">47 </span> |
||||
<span class="line_number">48 </span> <span class="keyword">if</span> <span class="sign">[</span> <span class="keyword">!</span> <span class="sign">-</span>z <span class="quote">"$cfg"</span> <span class="sign">]</span><span class="sign">;</span> <span class="keyword">then</span> |
||||
<span class="line_number">49 </span> <a href="#robo5">config</a><span class="sign">[</span><span class="sign">$</span>1<span class="sign">]</span><span class="sign">=</span><span class="sign">$</span>cfg |
||||
<span class="line_number">50 </span> <span class="keyword">fi</span> |
||||
<span class="line_number">51 </span><span class="keyword">}</span> |
||||
</pre> |
||||
|
||||
<hr /> |
||||
<a name="streamsaver2fenableOption"></a> |
||||
<a name="robo2"></a><h2>streamsaver/enableOption [ Functions ]</h2> |
||||
|
||||
<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="#robo0">streamsaver</a> ] [ <a href="./robo_functions.html#robo_top_of_doc">Functions</a> ]</p> |
||||
<p class="item_name">NAME</p> |
||||
<pre> <strong>enableOption</strong> - добавление опции к команде ffmpeg |
||||
</pre> |
||||
<p class="item_name">DESCRIPTION</p> |
||||
<p> Процедура включает опцию, если в конфигурационном файле имеется |
||||
соответствующая настройка. |
||||
</p> |
||||
<p class="item_name">USAGE</p> |
||||
<pre> <strong>enableOption</strong> <опция> |
||||
</pre> |
||||
<p class="item_name">ARGUMENTS</p> |
||||
<ul><li> опция - имя опции из массива настроек <a href="#robo5">config</a>. |
||||
</li> |
||||
</ul> |
||||
<p></p> |
||||
<p class="item_name">SOURCE</p> |
||||
<pre class="source"><span class="line_number">71 </span><strong>enableOption</strong> <span class="sign">(</span><span class="sign">)</span> <span class="keyword">{</span> |
||||
<span class="line_number">72 </span> <span class="keyword">if</span> <span class="sign">[</span> <span class="keyword">!</span> <span class="sign">-</span>z <span class="quote">"${<a href="#robo5">config</a>[$1]}"</span> <span class="sign">]</span><span class="sign">;</span> <span class="keyword">then</span> |
||||
<span class="line_number">73 </span> CMD<span class="sign">+</span><span class="sign">=</span><span class="quote">" $(echo $* | cut -d ' ' -f 2- | sed "</span>s<span class="sign">|</span><span class="sign">%</span><span class="sign">%</span><span class="sign">|</span><span class="sign">\</span><span class="sign">"</span><span class="sign">$</span><span class="sign">{</span><a href="#robo5">config</a><span class="sign">[</span><span class="sign">$</span>1<span class="sign">]</span><span class="keyword">}</span><span class="sign">\</span><span class="sign">"</span><span class="sign">|</span>g<span class="quote">")"</span> |
||||
<span class="line_number">74 </span> <span class="keyword">fi</span> |
||||
<span class="line_number">75 </span><span class="keyword">}</span> |
||||
</pre> |
||||
|
||||
<hr /> |
||||
<a name="streamsaver2freadXML"></a> |
||||
<a name="robo3"></a><h2>streamsaver/readXML [ Functions ]</h2> |
||||
|
||||
<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="#robo0">streamsaver</a> ] [ <a href="./robo_functions.html#robo_top_of_doc">Functions</a> ]</p> |
||||
<p class="item_name">NAME</p> |
||||
<pre> <strong>readXML</strong> - чтение файла настроек |
||||
</pre> |
||||
<p class="item_name">DESCRIPTION</p> |
||||
<p> Получение настроек из xml-файла. |
||||
</p> |
||||
<p class="item_name">USAGE</p> |
||||
<pre> <strong>readXML</strong> <xml> |
||||
</pre> |
||||
<p class="item_name">ARGUMENTS</p> |
||||
<ul><li> xml - файл настроек. |
||||
</li> |
||||
</ul> |
||||
<p></p> |
||||
<p class="item_name">SOURCE</p> |
||||
<pre class="source"><span class="line_number">94 </span><strong>readXML</strong><span class="sign">(</span><span class="sign">)</span> <span class="keyword">{</span> |
||||
<span class="line_number">95 </span> <span class="comment">#Чтение настроек из файла</span> |
||||
<span class="line_number">96 </span> <span class="keyword">for</span> option <span class="keyword">in</span> <span class="sign">$</span><span class="keyword">{</span><span class="sign">!</span><a href="#robo5">config</a><span class="sign">[</span><span class="sign">*</span><span class="sign">]</span><span class="keyword">}</span><span class="sign">;</span> <span class="keyword">{</span> |
||||
<span class="line_number">97 </span> <a href="#robo1">readOption</a> <span class="quote">"$option"</span> <span class="quote">"$1"</span> |
||||
<span class="line_number">98 </span> <span class="keyword">}</span> |
||||
<span class="line_number">99 </span><span class="keyword">}</span> |
||||
</pre> |
||||
|
||||
<hr /> |
||||
<a name="streamsaver2fmakeCMD"></a> |
||||
<a name="robo4"></a><h2>streamsaver/makeCMD [ Functions ]</h2> |
||||
|
||||
<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="#robo0">streamsaver</a> ] [ <a href="./robo_functions.html#robo_top_of_doc">Functions</a> ]</p> |
||||
<p class="item_name">NAME</p> |
||||
<pre> <strong>makeCMD</strong> - создание команды для оцифровки сигнала |
||||
</pre> |
||||
<p class="item_name">DESCRIPTION</p> |
||||
<p> Процедура составляет команду ffmpeg, включая опции, если они заданы в |
||||
конфигурационном файле или указаны значения по умолчанию в массиве |
||||
настроек <a href="#robo5">config</a>. |
||||
</p> |
||||
|
||||
<p> Эталонные настройки ffmpeg |
||||
</p> |
||||
|
||||
<pre> ffmpeg -reconnect 1 \ |
||||
\ |
||||
-i "${<a href="#robo5">config</a>[stream]}" \ |
||||
-legacy_icecast 1 \ |
||||
-content_type audio/mpeg \ |
||||
-ice_name "Имя канала" \ |
||||
-ice_description "Описание канала" \ |
||||
icecast://source:${<a href="#robo5">config</a>[password]}@${<a href="#robo5">config</a>[icecast]}/${<a href="#robo5">config</a>[mountpoint]} \ |
||||
\ |
||||
-segment_list "./files_archive.csv" \ |
||||
-segment_list_entry_prefix "$ARCHIVE_DIR" \ |
||||
-segment_list_type "csv" \ |
||||
-segment_list_flags "live" \ |
||||
-segment_atclocktime 1 \ |
||||
-acodec "$FORMAT" -map 0 -f segment \ |
||||
-segment_time "$ARCHIVE_TIME" \ |
||||
-segment_format "$FORMAT" \ |
||||
-strftime 1 "$ARCHIVE_DIR/$FILE_NAME" |
||||
\ |
||||
-segment_list "./files_slices.csv" \ |
||||
-segment_list_entry_prefix "$ARCHIVE_DIR" \ |
||||
-segment_list_type "csv" \ |
||||
-segment_list_flags "live" \ |
||||
-segment_atclocktime 1 \ |
||||
-acodec "$FORMAT" -map 0 -f segment \ |
||||
-segment_time "$SLICES_TIME" \ |
||||
-segment_format "$FORMAT" \ |
||||
-strftime 1 "$SLICES_DIR/$FILE_NAME" |
||||
</pre> |
||||
<p></p> |
||||
<p class="item_name">RESULT</p> |
||||
<pre> Команда ffmpeg, которую можно передать на выполнение. |
||||
</pre> |
||||
<p class="item_name">SOURCE</p> |
||||
<pre class="source"><span class="line_number">148 </span><strong>makeCMD</strong><span class="sign">(</span><span class="sign">)</span> <span class="keyword">{</span> |
||||
<span class="line_number">149 </span> <span class="comment">#Правило именования файлов</span> |
||||
<span class="line_number">150 </span> FILE_NAME<span class="sign">=</span><span class="quote">"${<a href="#robo5">config</a>[filename_prefix]}-${<a href="#robo5">config</a>[channel_name]}.${<a href="#robo5">config</a>[filename_suffix]}"</span> |
||||
<span class="line_number">151 </span> |
||||
<span class="line_number">152 </span> <span class="comment">#Минимальная команда</span> |
||||
<span class="line_number">153 </span> CMD<span class="sign">=</span><span class="quote">"${<a href="#robo5">config</a>[cmd]} -reconnect 1 -i ${<a href="#robo5">config</a>[stream]} -f mp2"</span> |
||||
<span class="line_number">154 </span> <span class="comment"># " -f ${<a href="#robo5">config</a>[input_format]}"</span> |
||||
<span class="line_number">155 </span> |
||||
<span class="line_number">156 </span> <span class="comment">#КОДИРОВАНИЕ</span> |
||||
<span class="line_number">157 </span> <span class="comment"># <a href="#robo2">enableOption</a> output_format -c %%</span> |
||||
<span class="line_number">158 </span> |
||||
<span class="line_number">159 </span> <span class="comment">#ICECAST</span> |
||||
<span class="line_number">160 </span> <a href="#robo2">enableOption</a> channel_name <span class="sign">\</span> |
||||
<span class="line_number">161 </span> <span class="sign">-</span>legacy_icecast 1 <span class="sign">\</span> |
||||
<span class="line_number">162 </span> <span class="sign">-</span>content_type audio<span class="sign">/</span>mpeg <span class="sign">\</span> |
||||
<span class="line_number">163 </span> <span class="sign">-</span>ice_name <span class="sign">%</span><span class="sign">%</span> |
||||
<span class="line_number">164 </span> |
||||
<span class="line_number">165 </span> <a href="#robo2">enableOption</a> channel_descr <span class="sign">\</span> |
||||
<span class="line_number">166 </span> <span class="sign">-</span>ice_description <span class="sign">%</span><span class="sign">%</span> |
||||
<span class="line_number">167 </span> |
||||
<span class="line_number">168 </span> <a href="#robo2">enableOption</a> icecast <span class="sign">\</span> |
||||
<span class="line_number">169 </span> icecast<span class="sign">:</span><span class="sign">/</span><span class="sign">/</span>source<span class="sign">:</span><span class="sign">$</span><span class="sign">{</span><a href="#robo5">config</a><span class="sign">[</span>password<span class="sign">]</span><span class="keyword">}</span><span class="sign">@</span><span class="sign">$</span><span class="sign">{</span><a href="#robo5">config</a><span class="sign">[</span>icecast<span class="sign">]</span><span class="keyword">}</span><span class="sign">/</span><span class="sign">$</span><span class="sign">{</span><a href="#robo5">config</a><span class="sign">[</span>mountpoint<span class="sign">]</span><span class="keyword">}</span> |
||||
<span class="line_number">170 </span> |
||||
<span class="line_number">171 </span> <span class="comment"># АРХИВ</span> |
||||
<span class="line_number">172 </span> <a href="#robo2">enableOption</a> archive_log <span class="sign">\</span> |
||||
<span class="line_number">173 </span> <span class="sign">-</span>segment_list <span class="sign">%</span><span class="sign">%</span> <span class="sign">\</span> |
||||
<span class="line_number">174 </span> <span class="sign">-</span>segment_list_entry_prefix <span class="quote">"${<a href="#robo5">config</a>[archive_dir]}"</span> <span class="sign">\</span> |
||||
<span class="line_number">175 </span> <span class="sign">-</span>segment_list_type csv <span class="sign">\</span> |
||||
<span class="line_number">176 </span> <span class="sign">-</span>segment_list_flags live |
||||
<span class="line_number">177 </span> |
||||
<span class="line_number">178 </span> <span class="comment"># +СЕГМЕНТИРОВАНИЕ</span> |
||||
<span class="line_number">179 </span> <a href="#robo2">enableOption</a> archive_dir <span class="sign">\</span> |
||||
<span class="line_number">180 </span> <span class="sign">-</span>segment_atclocktime 1 <span class="sign">\</span> |
||||
<span class="line_number">181 </span> <span class="sign">-</span>acodec <span class="quote">"${<a href="#robo5">config</a>[output_format]}"</span> <span class="sign">-</span>map 0 <span class="sign">\</span> |
||||
<span class="line_number">182 </span> <span class="sign">-</span><span class="keyword">fi</span> segment <span class="sign">\</span> |
||||
<span class="line_number">183 </span> <span class="sign">-</span>segment_time <span class="quote">"${<a href="#robo5">config</a>[archive_time]}"</span> <span class="sign">\</span> |
||||
<span class="line_number">184 </span> <span class="sign">-</span>segment_format <span class="quote">"${<a href="#robo5">config</a>[output_format]}"</span> <span class="sign">\</span> |
||||
<span class="line_number">185 </span> <span class="sign">-</span>strftime 1 <span class="quote">"${<a href="#robo5">config</a>[archive_dir]}/$FILE_NAME"</span> |
||||
<span class="line_number">186 </span> |
||||
<span class="line_number">187 </span> <span class="comment"># АНАЛИЗ</span> |
||||
<span class="line_number">188 </span> <a href="#robo2">enableOption</a> slices_log <span class="sign">\</span> |
||||
<span class="line_number">189 </span> <span class="sign">-</span>segment_list <span class="sign">%</span><span class="sign">%</span> <span class="sign">\</span> |
||||
<span class="line_number">190 </span> <span class="sign">-</span>segment_list_entry_prefix <span class="quote">"${<a href="#robo5">config</a>[slices_dir]}"</span> <span class="sign">\</span> |
||||
<span class="line_number">191 </span> <span class="sign">-</span>segment_list_type csv <span class="sign">\</span> |
||||
<span class="line_number">192 </span> <span class="sign">-</span>segment_list_flags live |
||||
<span class="line_number">193 </span> |
||||
<span class="line_number">194 </span> <span class="comment"># +СЕГМЕНТИРОВАНИЕ</span> |
||||
<span class="line_number">195 </span> <a href="#robo2">enableOption</a> slices_dir <span class="sign">\</span> |
||||
<span class="line_number">196 </span> <span class="sign">-</span>segment_atclocktime 1 <span class="sign">\</span> |
||||
<span class="line_number">197 </span> <span class="sign">-</span>acodec <span class="quote">"${<a href="#robo5">config</a>[output_format]}"</span> <span class="sign">-</span>map 0 <span class="sign">\</span> |
||||
<span class="line_number">198 </span> <span class="sign">-</span><span class="keyword">fi</span> segment <span class="sign">\</span> |
||||
<span class="line_number">199 </span> <span class="sign">-</span>segment_time <span class="quote">"${<a href="#robo5">config</a>[slices_time]}"</span> <span class="sign">\</span> |
||||
<span class="line_number">200 </span> <span class="sign">-</span>segment_format <span class="quote">"${<a href="#robo5">config</a>[output_format]}"</span> <span class="sign">\</span> |
||||
<span class="line_number">201 </span> <span class="sign">-</span>strftime 1 <span class="quote">"${<a href="#robo5">config</a>[slices_dir]}/$FILE_NAME"</span> |
||||
<span class="line_number">202 </span> |
||||
<span class="line_number">203 </span> <span class="keyword">echo</span> <span class="quote">"$CMD"</span> |
||||
<span class="line_number">204 </span><span class="keyword">}</span> |
||||
</pre> |
||||
|
||||
<hr /> |
||||
<a name="streamsaver2fconfig"></a> |
||||
<a name="robo5"></a><h2>streamsaver/config [ Variables ]</h2> |
||||
|
||||
<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="#robo0">streamsaver</a> ] [ <a href="./robo_variables.html#robo_top_of_doc">Variables</a> ]</p> |
||||
<p class="item_name">VARIABLE</p> |
||||
<pre> <strong>config</strong> - массив настроек, содержащий значения по-умолчанию. |
||||
Настройки описаны в секции <a href="#robo6">SETTINGS</a>. |
||||
</pre> |
||||
<p class="item_name">USED BY</p> |
||||
<pre> <a href="#robo2">enableOption</a>, <a href="#robo1">readOption</a>, <a href="#robo3">readXML</a>, <a href="#robo4">makeCMD</a> |
||||
</pre> |
||||
<p class="item_name">SOURCE</p> |
||||
<pre class="source"><span class="line_number">220 </span><span class="keyword">typeset</span> <span class="sign">-</span>A <strong>config</strong> |
||||
<span class="line_number">221 </span> |
||||
<span class="line_number">222 </span><strong>config</strong><span class="sign">=</span><span class="sign">(</span> |
||||
<span class="line_number">223 </span> <span class="sign">[</span>stream<span class="sign">]</span><span class="sign">=</span><span class="quote">""</span> |
||||
<span class="line_number">224 </span> <span class="sign">[</span>icecast<span class="sign">]</span><span class="sign">=</span><span class="quote">"http://localhost:8000/"</span> |
||||
<span class="line_number">225 </span> <span class="sign">[</span>password<span class="sign">]</span><span class="sign">=</span><span class="quote">"hackme"</span> |
||||
<span class="line_number">226 </span> <span class="sign">[</span>channel_name<span class="sign">]</span><span class="sign">=</span><span class="quote">""</span> |
||||
<span class="line_number">227 </span> <span class="sign">[</span>channel_descr<span class="sign">]</span><span class="sign">=</span><span class="quote">""</span> |
||||
<span class="line_number">228 </span> <span class="sign">[</span>mountpoint<span class="sign">]</span><span class="sign">=</span><span class="quote">""</span> |
||||
<span class="line_number">229 </span> <span class="sign">[</span>cmd<span class="sign">]</span><span class="sign">=</span><span class="quote">"ffmpeg"</span> |
||||
<span class="line_number">230 </span> <span class="sign">[</span>input_format<span class="sign">]</span><span class="sign">=</span><span class="quote">"mpegts"</span> |
||||
<span class="line_number">231 </span> <span class="sign">[</span>archive_dir<span class="sign">]</span><span class="sign">=</span><span class="quote">""</span> |
||||
<span class="line_number">232 </span> <span class="sign">[</span>archive_time<span class="sign">]</span><span class="sign">=</span><span class="quote">"3600"</span> |
||||
<span class="line_number">233 </span> <span class="sign">[</span>archive_log<span class="sign">]</span><span class="sign">=</span><span class="quote">"/var/log/tuc01_archive.log"</span> |
||||
<span class="line_number">234 </span> <span class="sign">[</span>slices_dir<span class="sign">]</span><span class="sign">=</span><span class="quote">""</span> |
||||
<span class="line_number">235 </span> <span class="sign">[</span>slices_time<span class="sign">]</span><span class="sign">=</span>10 |
||||
<span class="line_number">236 </span> <span class="sign">[</span>slices_log<span class="sign">]</span><span class="sign">=</span><span class="quote">"/var/log/tuc01_slices.log"</span> |
||||
<span class="line_number">237 </span> <span class="sign">[</span>filename_prefix<span class="sign">]</span><span class="sign">=</span><span class="quote">"%Y-%m-%d_%H:%M:%S"</span> |
||||
<span class="line_number">238 </span> <span class="sign">[</span>filename_suffix<span class="sign">]</span><span class="sign">=</span><span class="quote">"mp2"</span> |
||||
<span class="line_number">239 </span> <span class="sign">[</span>output_format<span class="sign">]</span><span class="sign">=</span><span class="quote">"mp2"</span> |
||||
<span class="line_number">240 </span> <span class="sign">[</span>audio_bitrate<span class="sign">]</span><span class="sign">=</span><span class="quote">"256k"</span> |
||||
<span class="line_number">241 </span><span class="sign">)</span> |
||||
</pre> |
||||
|
||||
<hr /> |
||||
<a name="streamsaver2fSETTINGS"></a> |
||||
<a name="robo6"></a><h2>streamsaver/SETTINGS [ Variables ]</h2> |
||||
|
||||
<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="#robo0">streamsaver</a> ] [ <a href="./robo_variables.html#robo_top_of_doc">Variables</a> ]</p> |
||||
<p class="item_name">VARIABLE</p> |
||||
<pre> <strong>SETTINGS</strong> - файл настроек |
||||
</pre> |
||||
<p class="item_name">DESCRIPTION</p> |
||||
<p> Переменная хранит имя файла настроек, который содержит параметры, |
||||
перечисленные в массиве опций <a href="#robo5">config</a>, в формате XML. При отсутствии |
||||
параметра или пустом значении соответствующие флаги а аргументы не |
||||
добавляются в итоговую команду ffmpeg. Таким образом, например, можно |
||||
включать или отключать ведение журнала сохранения аудиозаписей, просто |
||||
указывая или удаляя параметр archive_log. |
||||
</p> |
||||
|
||||
<p> Формат файла настроек следующий: |
||||
</p> |
||||
<pre> <xml> |
||||
<!-- Название канала --> |
||||
<channel_name></channel_name> |
||||
<!-- Описание канала --> |
||||
<channel_descr>Тестовый_канал</channel_descr> |
||||
<!-- Входящий поток --> |
||||
<stream><a href="http://localhost:8000/tuc01</stream>">http://localhost:8000/tuc01</stream></a> |
||||
<!-- Icecast для вывода --> |
||||
<icecast>localhost:8000</icecast> |
||||
<!-- Пароль для доступа к Icecast --> |
||||
<password>hackme</password> |
||||
<!-- Точка подключения канала --> |
||||
<mountpoint>tuc02</mountpoint> |
||||
</pre> |
||||
<p> |
||||
</p> |
||||
<pre> <!-- Команда получения сигнала --> |
||||
<cmd>ffmpeg</cmd> |
||||
</pre> |
||||
<p> |
||||
</p> |
||||
<pre> <!-- Формат входного потока --> |
||||
<input_format>mp2 -map 0:0</input_format> |
||||
</pre> |
||||
<p> |
||||
</p> |
||||
<pre> <!-- Директория для сохранения архивных файлов --> |
||||
<archive_dir>FILES/archive/</archive_dir> |
||||
<!-- Длительность архивных файлов в секундах --> |
||||
<archive_time>3600</archive_time> |
||||
<!-- Файл журнала обработки архивных записей --> |
||||
<archive_log>FILES/archive.log</archive_log> |
||||
</pre> |
||||
<p> |
||||
</p> |
||||
<pre> <!-- Директория для сохранения фрагментов на анализ --> |
||||
<slices_dir>FILES/fragments/</slices_dir> |
||||
<!-- Длительность фрагментов для анализа в секундах --> |
||||
<slices_time>10</slices_time> |
||||
<!-- Файл журнала обработки фрагментов на анализ --> |
||||
<slices_log>FILES/fragments.log</slices_log> |
||||
</pre> |
||||
<p> |
||||
</p> |
||||
<pre> <!-- Префикс имени файла --> |
||||
<filename_prefix>%Y-%m-%d_%H:%M:%S</filename_prefix> |
||||
<!-- Расширение имени файла --> |
||||
<filename_suffix>mp2</filename_suffix> |
||||
</pre> |
||||
<p> |
||||
</p> |
||||
<pre> <!-- Формат аудиофайлов --> |
||||
<output_format>mp2</output_format> |
||||
<!-- Битрейт аудиофайлов --> |
||||
<audio_bitrate>256k</audio_bitrate> |
||||
</xml> |
||||
</pre> |
||||
<p></p> |
||||
<p class="item_name">SOURCE</p> |
||||
<pre class="source"><span class="line_number">305 </span><strong>SETTINGS</strong><span class="sign">=</span><span class="quote">"$1"</span> |
||||
</pre> |
||||
|
||||
<hr /> |
||||
<a name="streamsaver2fmain"></a> |
||||
<a name="robo7"></a><h2>streamsaver/main [ Toplevel ]</h2> |
||||
|
||||
<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="#robo0">streamsaver</a> ] [ <a href="./tobo_toplevel.html#robo_top_of_doc">Toplevel</a> ]</p> |
||||
<p class="item_name">NAME</p> |
||||
<pre> <a href="#robo0">streamsaver</a> |
||||
</pre> |
||||
<p class="item_name">SOURCE</p> |
||||
<pre class="source"><span class="line_number">316 </span><span class="comment">#Проверка на наличие файла настроек</span> |
||||
<span class="line_number">317 </span><span class="keyword">if</span> <span class="sign">[</span> <span class="sign">-</span>z <span class="quote">"$<a href="#robo6">SETTINGS</a>"</span> <span class="sign">]</span><span class="sign">;</span> <span class="keyword">then</span> |
||||
<span class="line_number">318 </span> <span class="keyword">echo</span> <span class="quote">"USAGE: $(basename $0) <settings.xml>"</span> <span class="sign">></span><span class="sign">&</span>2 |
||||
<span class="line_number">319 </span> <span class="keyword">exit</span> 1 |
||||
<span class="line_number">320 </span><span class="keyword">elif</span> <span class="sign">[</span> <span class="keyword">!</span> <span class="sign">-</span>r <span class="quote">"$<a href="#robo6">SETTINGS</a>"</span> <span class="sign">]</span><span class="sign">;</span> <span class="keyword">then</span> |
||||
<span class="line_number">321 </span> <span class="keyword">echo</span> <span class="quote">"Unable open file $1."</span> <span class="sign">></span><span class="sign">&</span>2 |
||||
<span class="line_number">322 </span> <span class="keyword">echo</span> <span class="quote">"USAGE: $(basename $0) <settings.xml>"</span> <span class="sign">></span><span class="sign">&</span>2 |
||||
<span class="line_number">323 </span> <span class="keyword">exit</span> 1 |
||||
<span class="line_number">324 </span><span class="keyword">fi</span> |
||||
<span class="line_number">325 </span> |
||||
<span class="line_number">326 </span><span class="comment">#Чтение настроек</span> |
||||
<span class="line_number">327 </span><a href="#robo3">readXML</a> <span class="quote">"$<a href="#robo6">SETTINGS</a>"</span> |
||||
<span class="line_number">328 </span> |
||||
<span class="line_number">329 </span><span class="comment">#Создание директорий хранения файлов, если требуется</span> |
||||
<span class="line_number">330 </span><span class="keyword">mkdir</span> <span class="sign">-</span>p <span class="sign">$</span><span class="sign">{</span><a href="#robo5">config</a><span class="sign">[</span>archive_dir<span class="sign">]</span><span class="keyword">}</span> |
||||
<span class="line_number">331 </span><span class="keyword">mkdir</span> <span class="sign">-</span>p <span class="sign">$</span><span class="sign">{</span><a href="#robo5">config</a><span class="sign">[</span>slices_dir<span class="sign">]</span><span class="keyword">}</span> |
||||
<span class="line_number">332 </span> |
||||
<span class="line_number">333 </span><span class="comment">#Создание команды оцифровки сигнала</span> |
||||
<span class="line_number">334 </span><a href="#robo4">makeCMD</a> |
||||
</pre> |
||||
|
||||
</div> <!-- content --> |
||||
<div id="footer"> |
||||
<p>Generated from ./streamsaver with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.41 on Tue Jul 12 2016 14:44:43 |
||||
</p> |
||||
</div> <!-- footer --> |
||||
</body> |
||||
</html> |
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Style-Type" content="text/css" /> |
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
<link rel="stylesheet" href="./robodoc.css" type="text/css" /> |
||||
<title>Toplevel</title> |
||||
<!-- Source: ./ --> |
||||
<!-- Generated with ROBODoc Version 4.99.41 (Jul 2 2011) --> |
||||
</head> |
||||
<body> |
||||
<div id="logo"> |
||||
<a name="robo_top_of_doc"></a> |
||||
</div> <!-- logo --> |
||||
<div id="extra"> |
||||
</div> <!-- extra --> |
||||
<div id="navigation"> |
||||
<a class="menuitem" href="./toc_index.html#top">Table of Contents</a> |
||||
<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a> |
||||
<a class="menuitem" href="./masterindex.html#top">Index</a> |
||||
<a class="menuitem" href="./robo_files.html#top">Files</a> |
||||
<a class="menuitem" href="./robo_functions.html#top">Functions</a> |
||||
<a class="menuitem" href="#top">Toplevel</a> |
||||
<a class="menuitem" href="./robo_variables.html#top">Variables</a> |
||||
</div> <!-- navigation --> |
||||
<div id="content"> |
||||
<h1>Toplevel</h1> |
||||
<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2> |
||||
<h2><a name="M"></a>M</h2><a href="./streamsaver.html#robo7" class="indexitem" >main</a> |
||||
<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2> |
||||
</div> <!-- content --> |
||||
<div id="footer"> |
||||
<p>Generated from ./ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.41 on Tue Jul 12 2016 14:44:43 |
||||
</p> |
||||
</div> <!-- footer --> |
||||
</body> |
||||
</html> |
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Style-Type" content="text/css" /> |
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
<link rel="stylesheet" href="./robodoc.css" type="text/css" /> |
||||
<title>Table of Contents</title> |
||||
<!-- Source: ./ --> |
||||
<!-- Generated with ROBODoc Version 4.99.41 (Jul 2 2011) --> |
||||
</head> |
||||
<body> |
||||
<div id="logo"> |
||||
<a name="robo_top_of_doc"></a> |
||||
</div> <!-- logo --> |
||||
<div id="extra"> |
||||
</div> <!-- extra --> |
||||
<div id="navigation"> |
||||
<a class="menuitem" href="#top">Table of Contents</a> |
||||
<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a> |
||||
<a class="menuitem" href="./masterindex.html#top">Index</a> |
||||
<a class="menuitem" href="./robo_files.html#top">Files</a> |
||||
<a class="menuitem" href="./robo_functions.html#top">Functions</a> |
||||
<a class="menuitem" href="./tobo_toplevel.html#top">Toplevel</a> |
||||
<a class="menuitem" href="./robo_variables.html#top">Variables</a> |
||||
</div> <!-- navigation --> |
||||
<div id="content"> |
||||
<h3>TABLE OF CONTENTS</h3> |
||||
<ul> |
||||
<li>1. <a href="./streamsaver.html#robo0">ffmpeg/streamsaver</a></li> |
||||
<ul> |
||||
<li>1.1. <a href="./streamsaver.html#robo1">streamsaver/readOption</a></li> |
||||
<li>1.2. <a href="./streamsaver.html#robo2">streamsaver/enableOption</a></li> |
||||
<li>1.3. <a href="./streamsaver.html#robo3">streamsaver/readXML</a></li> |
||||
<li>1.4. <a href="./streamsaver.html#robo4">streamsaver/makeCMD</a></li> |
||||
<li>1.5. <a href="./streamsaver.html#robo5">streamsaver/config</a></li> |
||||
<li>1.6. <a href="./streamsaver.html#robo6">streamsaver/SETTINGS</a></li> |
||||
<li>1.7. <a href="./streamsaver.html#robo7">streamsaver/main</a></li> |
||||
</ul> |
||||
</ul> |
||||
</div> <!-- content --> |
||||
<div id="footer"> |
||||
<p>Generated from ./ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.41 on Tue Jul 12 2016 14:44:43 |
||||
</p> |
||||
</div> <!-- footer --> |
||||
</body> |
||||
</html> |
@ -0,0 +1,166 @@
@@ -0,0 +1,166 @@
|
||||
items: |
||||
# |
||||
# CUSTOM |
||||
# |
||||
DATA |
||||
DEFAULT VALUE |
||||
GUI |
||||
INIT VALUE |
||||
NAMESPACE |
||||
PACKAGES |
||||
RESOURCE |
||||
STRUCTURE |
||||
USED GLOBAL VARIABLES |
||||
USED VARIABLES |
||||
USER HELP |
||||
VARIABLE |
||||
VARIABLES |
||||
VERSION |
||||
# |
||||
# DEFAULT |
||||
# |
||||
ARGUMENTS |
||||
ATTRIBUTES |
||||
AUTHOR |
||||
BUGS |
||||
CHILDREN |
||||
COMMANDS |
||||
COPYRIGHT |
||||
CREATION DATE |
||||
DERIVED BY |
||||
DERIVED FROM |
||||
DESCRIPTION |
||||
DIAGNOSTICS |
||||
ERRORS |
||||
EXAMPLE |
||||
FUNCTION |
||||
HISTORY |
||||
IDEAS |
||||
INPUTS |
||||
METHODS |
||||
MODIFICATION HISTORY |
||||
NAME |
||||
NEW ATTRIBUTES |
||||
NEW METHODS |
||||
NOTES |
||||
OPTIONS |
||||
OUTPUT |
||||
PARAMETERS |
||||
PARENTS |
||||
PORTABILITY |
||||
PURPOSE |
||||
RESULT |
||||
RETURN VALUE |
||||
SEE ALSO |
||||
SIDE EFFECTS |
||||
SOURCE |
||||
SWITCHES |
||||
SYNOPSIS |
||||
TAGS |
||||
TODO |
||||
USAGE |
||||
USED BY |
||||
USES |
||||
WARNINGS |
||||
ignore items: |
||||
item order: |
||||
FUNCTION |
||||
SYNOPSIS |
||||
INPUTS |
||||
source items: |
||||
SOURCE |
||||
DATA |
||||
preformatted items: |
||||
INPUTS |
||||
format items: |
||||
PORTABILITY |
||||
FUNCTION |
||||
DESCRIPTION |
||||
ARGUMENTS |
||||
PACKAGES |
||||
USED GLOBAL VARIABLES |
||||
USED VARIABLES |
||||
NOTES |
||||
VARIABLES |
||||
NAMESPACE |
||||
BUGS |
||||
TODO |
||||
options: |
||||
--src . |
||||
--doc ./doc |
||||
--html |
||||
--multidoc |
||||
--charset utf-8 |
||||
--nosort |
||||
--sections |
||||
--source_line_numbers |
||||
--index |
||||
--tabsize 8 |
||||
--syntaxcolors_enable quotes,squotes,line_comments,block_comments,keywords,non_alpha |
||||
headertypes: |
||||
F Files robo_files |
||||
a Aliases robo_aliases |
||||
I Interpretators robo_interps |
||||
p Packages robo_packages |
||||
G "Global variables" robo_globals |
||||
n Namespaces robo_namespaces |
||||
r Resources robo_resources |
||||
c "Control flow structures" robo_control_structures |
||||
t Toplevel tobo_toplevel |
||||
ignore files: |
||||
README |
||||
CVS |
||||
robodoc.rc |
||||
config |
||||
*.xml |
||||
*.bak |
||||
*.git |
||||
*~ |
||||
accept files: |
||||
streamsaver |
||||
header markers: |
||||
#**** |
||||
remark markers: |
||||
# |
||||
end markers: |
||||
#**** |
||||
header separate characters: |
||||
, |
||||
header ignore characters: |
||||
[ |
||||
] |
||||
# |
||||
remark begin markers: |
||||
remark end markers: |
||||
source line comments: |
||||
# |
||||
keywords: |
||||
if |
||||
then |
||||
else |
||||
elif |
||||
fi |
||||
case |
||||
esac |
||||
for |
||||
select |
||||
while |
||||
until |
||||
do |
||||
done |
||||
in |
||||
function |
||||
time |
||||
{ |
||||
} |
||||
! |
||||
[[ |
||||
]] |
||||
coproc |
||||
echo |
||||
ffmpeg |
||||
mkdir |
||||
grep |
||||
exit |
||||
typeset |
||||
|
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
<xml> |
||||
<!-- Название канала --> |
||||
<channel_name>RT</channel_name> |
||||
<!-- Описание канала --> |
||||
<channel_descr>Тестовый_канал_RT</channel_descr> |
||||
<!-- Входящий поток --> |
||||
<stream>http://localhost:8000/tuc01</stream> |
||||
<!-- Icecast для вывода --> |
||||
<icecast>localhost:8000</icecast> |
||||
<!-- Пароль для доступа к Icecast --> |
||||
<password>hackme</password> |
||||
<!-- Точка подключения канала --> |
||||
<mountpoint>rt</mountpoint> |
||||
|
||||
<!-- Команда получения сигнала --> |
||||
<cmd>ffmpeg</cmd> |
||||
|
||||
<!-- Формат входного потока --> |
||||
<input_format>mp2 -map 0:0</input_format> |
||||
|
||||
<!-- Директория для сохранения архивных файлов --> |
||||
<archive_dir>FILES/archive/</archive_dir> |
||||
<!-- Длительность архивных файлов в секундах --> |
||||
<archive_time>3600</archive_time> |
||||
<!-- Файл журнала обработки архивных записей --> |
||||
<archive_log>FILES/archive.log</archive_log> |
||||
|
||||
<!-- Директория для сохранения фрагментов на анализ --> |
||||
<slices_dir>FILES/fragments/</slices_dir> |
||||
<!-- Длительность фрагментов для анализа в секундах --> |
||||
<slices_time>10</slices_time> |
||||
<!-- Файл журнала обработки фрагментов на анализ --> |
||||
<slices_log>FILES/fragments.log</slices_log> |
||||
|
||||
<!-- Префикс имени файла --> |
||||
<filename_prefix>%Y-%m-%d_%H:%M:%S</filename_prefix> |
||||
<!-- Расширение имени файла --> |
||||
<filename_suffix>mp2</filename_suffix> |
||||
|
||||
<!-- Формат аудиофайлов --> |
||||
<output_format>mp2</output_format> |
||||
<!-- Битрейт аудиофайлов --> |
||||
<audio_bitrate>256k</audio_bitrate> |
||||
</xml> |
||||
|
@ -0,0 +1,337 @@
@@ -0,0 +1,337 @@
|
||||
#!/bin/bash |
||||
|
||||
#****F* ffmpeg/streamsaver **************************************************** |
||||
# |
||||
# NAME |
||||
# streamsaver - обработчик аудиопотоков с нарезкой их в файлы и |
||||
# ретрансляцией на icecast |
||||
# |
||||
# VERSION |
||||
# 1.0 |
||||
# |
||||
# DESCRIPTION |
||||
# Сценарий принимает аудиопоток с оборудования, по UDP или TCP, |
||||
# фрагментирует его на отрезки заданной длины для последующего хранения и |
||||
# анализа, а также ретранслирует поток на сервер радиовещания icecast для |
||||
# прослушивания аудио конечным пользователем. |
||||
# |
||||
# USAGE |
||||
# streamsaver <файл настроек> |
||||
# |
||||
# ARGUMENTS |
||||
# * <файл настроек> - xml-файл с описанием входящего и выходящего потоков и |
||||
# правилами фрагментирования записей. |
||||
# |
||||
#****************************************************************************** |
||||
|
||||
#****f* streamsaver/readOption |
||||
# |
||||
# NAME |
||||
# readOption - получение значения опции из файла настроек |
||||
# |
||||
# USAGE |
||||
# readOption <опция> <файл> |
||||
# |
||||
# ARGUMENTS |
||||
# * опция - имя опции |
||||
# * файл - xml-файл с настройками |
||||
# |
||||
# RESULT |
||||
# Значение параметра при наличии искомой опции в xml-файле или значение по |
||||
# умолчанию, которое задаётся при инициализации переменной config. |
||||
# |
||||
# SOURCE |
||||
# |
||||
readOption() { |
||||
cfg=$(\grep -oPm1 "(?<=<$1>)[^<]+" "$2") |
||||
|
||||
if [ ! -z "$cfg" ]; then |
||||
config[$1]=$cfg |
||||
fi |
||||
} |
||||
#***** |
||||
|
||||
#****f* streamsaver/enableOption |
||||
# |
||||
# NAME |
||||
# enableOption - добавление опции к команде ffmpeg |
||||
# |
||||
# DESCRIPTION |
||||
# Процедура включает опцию, если в конфигурационном файле имеется |
||||
# соответствующая настройка. |
||||
# |
||||
# USAGE |
||||
# enableOption <опция> |
||||
# |
||||
# ARGUMENTS |
||||
# * опция - имя опции из массива настроек config. |
||||
# |
||||
# SOURCE |
||||
# |
||||
enableOption () { |
||||
if [ ! -z "${config[$1]}" ]; then |
||||
CMD+=" $(echo $* | cut -d ' ' -f 2- | sed "s|%%|\"${config[$1]}\"|g")" |
||||
fi |
||||
} |
||||
#***** |
||||
|
||||
#****f* streamsaver/readXML |
||||
# |
||||
# NAME |
||||
# readXML - чтение файла настроек |
||||
# |
||||
# DESCRIPTION |
||||
# Получение настроек из xml-файла. |
||||
# |
||||
# USAGE |
||||
# readXML <xml> |
||||
# |
||||
# ARGUMENTS |
||||
# * xml - файл настроек. |
||||
# |
||||
# SOURCE |
||||
# |
||||
readXML() { |
||||
#Чтение настроек из файла |
||||
for option in ${!config[*]}; { |
||||
readOption "$option" "$1" |
||||
} |
||||
} |
||||
#***** |
||||
|
||||
#****f* streamsaver/makeCMD |
||||
# |
||||
# NAME |
||||
# makeCMD - создание команды для оцифровки сигнала |
||||
# |
||||
# DESCRIPTION |
||||
# Процедура составляет команду ffmpeg, включая опции, если они заданы в |
||||
# конфигурационном файле или указаны значения по умолчанию в массиве |
||||
# настроек config. |
||||
# |
||||
# Эталонные настройки ffmpeg |
||||
# |
||||
# ffmpeg -reconnect 1 \ |
||||
# \ |
||||
# -i "${config[stream]}" \ |
||||
# -legacy_icecast 1 \ |
||||
# -content_type audio/mpeg \ |
||||
# -ice_name "Имя канала" \ |
||||
# -ice_description "Описание канала" \ |
||||
# icecast://source:${config[password]}@${config[icecast]}/${config[mountpoint]} \ |
||||
# \ |
||||
# -segment_list "./files_archive.csv" \ |
||||
# -segment_list_entry_prefix "$ARCHIVE_DIR" \ |
||||
# -segment_list_type "csv" \ |
||||
# -segment_list_flags "live" \ |
||||
# -segment_atclocktime 1 \ |
||||
# -acodec "$FORMAT" -map 0 -f segment \ |
||||
# -segment_time "$ARCHIVE_TIME" \ |
||||
# -segment_format "$FORMAT" \ |
||||
# -strftime 1 "$ARCHIVE_DIR/$FILE_NAME" |
||||
# \ |
||||
# -segment_list "./files_slices.csv" \ |
||||
# -segment_list_entry_prefix "$ARCHIVE_DIR" \ |
||||
# -segment_list_type "csv" \ |
||||
# -segment_list_flags "live" \ |
||||
# -segment_atclocktime 1 \ |
||||
# -acodec "$FORMAT" -map 0 -f segment \ |
||||
# -segment_time "$SLICES_TIME" \ |
||||
# -segment_format "$FORMAT" \ |
||||
# -strftime 1 "$SLICES_DIR/$FILE_NAME" |
||||
# |
||||
# RESULT |
||||
# Команда ffmpeg, которую можно передать на выполнение. |
||||
# |
||||
# SOURCE |
||||
# |
||||
makeCMD() { |
||||
#Правило именования файлов |
||||
FILE_NAME="${config[filename_prefix]}-${config[channel_name]}.${config[filename_suffix]}" |
||||
|
||||
#Минимальная команда |
||||
CMD="${config[cmd]} -reconnect 1 -i ${config[stream]} -f mp2" |
||||
# " -f ${config[input_format]}" |
||||
|
||||
#КОДИРОВАНИЕ |
||||
# enableOption output_format -c %% |
||||
|
||||
#ICECAST |
||||
enableOption channel_name \ |
||||
-legacy_icecast 1 \ |
||||
-content_type audio/mpeg \ |
||||
-ice_name %% |
||||
|
||||
enableOption channel_descr \ |
||||
-ice_description %% |
||||
|
||||
enableOption icecast \ |
||||
icecast://source:${config[password]}@${config[icecast]}/${config[mountpoint]} |
||||
|
||||
# АРХИВ |
||||
enableOption archive_log \ |
||||
-segment_list %% \ |
||||
-segment_list_entry_prefix "${config[archive_dir]}" \ |
||||
-segment_list_type csv \ |
||||
-segment_list_flags live |
||||
|
||||
# +СЕГМЕНТИРОВАНИЕ |
||||
enableOption archive_dir \ |
||||
-segment_atclocktime 1 \ |
||||
-acodec "${config[output_format]}" -map 0 \ |
||||
-f segment \ |
||||
-segment_time "${config[archive_time]}" \ |
||||
-segment_format "${config[output_format]}" \ |
||||
-strftime 1 "${config[archive_dir]}/$FILE_NAME" |
||||
|
||||
# АНАЛИЗ |
||||
enableOption slices_log \ |
||||
-segment_list %% \ |
||||
-segment_list_entry_prefix "${config[slices_dir]}" \ |
||||
-segment_list_type csv \ |
||||
-segment_list_flags live |
||||
|
||||
# +СЕГМЕНТИРОВАНИЕ |
||||
enableOption slices_dir \ |
||||
-segment_atclocktime 1 \ |
||||
-acodec "${config[output_format]}" -map 0 \ |
||||
-f segment \ |
||||
-segment_time "${config[slices_time]}" \ |
||||
-segment_format "${config[output_format]}" \ |
||||
-strftime 1 "${config[slices_dir]}/$FILE_NAME" |
||||
|
||||
echo "$CMD" |
||||
} |
||||
#***** |
||||
|
||||
################################################################################ |
||||
|
||||
#****v* streamsaver/config |
||||
# |
||||
# VARIABLE |
||||
# config - массив настроек, содержащий значения по-умолчанию. |
||||
# Настройки описаны в секции SETTINGS. |
||||
# |
||||
# USED BY |
||||
# enableOption, readOption, readXML, makeCMD |
||||
# |
||||
# SOURCE |
||||
# |
||||
typeset -A config |
||||
|
||||
config=( |
||||
[stream]="" |
||||
[icecast]="http://localhost:8000/" |
||||
[password]="hackme" |
||||
[channel_name]="" |
||||
[channel_descr]="" |
||||
[mountpoint]="" |
||||
[cmd]="ffmpeg" |
||||
[input_format]="mpegts" |
||||
[archive_dir]="" |
||||
[archive_time]="3600" |
||||
[archive_log]="/var/log/tuc01_archive.log" |
||||
[slices_dir]="" |
||||
[slices_time]=10 |
||||
[slices_log]="/var/log/tuc01_slices.log" |
||||
[filename_prefix]="%Y-%m-%d_%H:%M:%S" |
||||
[filename_suffix]="mp2" |
||||
[output_format]="mp2" |
||||
[audio_bitrate]="256k" |
||||
) |
||||
#***** |
||||
|
||||
#****v* streamsaver/SETTINGS |
||||
# |
||||
# VARIABLE |
||||
# SETTINGS - файл настроек |
||||
# |
||||
# DESCRIPTION |
||||
# Переменная хранит имя файла настроек, который содержит параметры, |
||||
# перечисленные в массиве опций config, в формате XML. При отсутствии |
||||
# параметра или пустом значении соответствующие флаги а аргументы не |
||||
# добавляются в итоговую команду ffmpeg. Таким образом, например, можно |
||||
# включать или отключать ведение журнала сохранения аудиозаписей, просто |
||||
# указывая или удаляя параметр archive_log. |
||||
# |
||||
# Формат файла настроек следующий: |
||||
# <xml> |
||||
# <!-- Название канала --> |
||||
# <channel_name></channel_name> |
||||
# <!-- Описание канала --> |
||||
# <channel_descr>Тестовый_канал</channel_descr> |
||||
# <!-- Входящий поток --> |
||||
# <stream>http://localhost:8000/tuc01</stream> |
||||
# <!-- Icecast для вывода --> |
||||
# <icecast>localhost:8000</icecast> |
||||
# <!-- Пароль для доступа к Icecast --> |
||||
# <password>hackme</password> |
||||
# <!-- Точка подключения канала --> |
||||
# <mountpoint>tuc02</mountpoint> |
||||
# |
||||
# <!-- Команда получения сигнала --> |
||||
# <cmd>ffmpeg</cmd> |
||||
# |
||||
# <!-- Формат входного потока --> |
||||
# <input_format>mp2 -map 0:0</input_format> |
||||
# |
||||
# <!-- Директория для сохранения архивных файлов --> |
||||
# <archive_dir>FILES/archive/</archive_dir> |
||||
# <!-- Длительность архивных файлов в секундах --> |
||||
# <archive_time>3600</archive_time> |
||||
# <!-- Файл журнала обработки архивных записей --> |
||||
# <archive_log>FILES/archive.log</archive_log> |
||||
# |
||||
# <!-- Директория для сохранения фрагментов на анализ --> |
||||
# <slices_dir>FILES/fragments/</slices_dir> |
||||
# <!-- Длительность фрагментов для анализа в секундах --> |
||||
# <slices_time>10</slices_time> |
||||
# <!-- Файл журнала обработки фрагментов на анализ --> |
||||
# <slices_log>FILES/fragments.log</slices_log> |
||||
# |
||||
# <!-- Префикс имени файла --> |
||||
# <filename_prefix>%Y-%m-%d_%H:%M:%S</filename_prefix> |
||||
# <!-- Расширение имени файла --> |
||||
# <filename_suffix>mp2</filename_suffix> |
||||
# |
||||
# <!-- Формат аудиофайлов --> |
||||
# <output_format>mp2</output_format> |
||||
# <!-- Битрейт аудиофайлов --> |
||||
# <audio_bitrate>256k</audio_bitrate> |
||||
# </xml> |
||||
# |
||||
# SOURCE |
||||
# |
||||
SETTINGS="$1" |
||||
#***** |
||||
|
||||
#****t* streamsaver/main |
||||
# |
||||
# NAME |
||||
# streamsaver |
||||
# |
||||
# SOURCE |
||||
# |
||||
|
||||
#Проверка на наличие файла настроек |
||||
if [ -z "$SETTINGS" ]; then |
||||
echo "USAGE: $(basename $0) <settings.xml>" >&2 |
||||
exit 1 |
||||
elif [ ! -r "$SETTINGS" ]; then |
||||
echo "Unable open file $1." >&2 |
||||
echo "USAGE: $(basename $0) <settings.xml>" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
#Чтение настроек |
||||
readXML "$SETTINGS" |
||||
|
||||
#Создание директорий хранения файлов, если требуется |
||||
mkdir -p ${config[archive_dir]} |
||||
mkdir -p ${config[slices_dir]} |
||||
|
||||
#Создание команды оцифровки сигнала |
||||
makeCMD |
||||
|
||||
#***** |
||||
|
Loading…
Reference in new issue