Benjamin Southall
8 years ago
4 changed files with 192 additions and 0 deletions
@ -0,0 +1,74 @@ |
|||||
|
<?php |
||||
|
$theme = Array(); |
||||
|
|
||||
|
// Theme name |
||||
|
$theme['name'] = 'Stream'; |
||||
|
// Description (you can use Tinyboard markup here) |
||||
|
$theme['description'] = 'Stream page'; |
||||
|
$theme['version'] = 'v0.9.1'; |
||||
|
|
||||
|
// Theme configuration |
||||
|
$theme['config'] = Array(); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Site title', |
||||
|
'name' => 'title', |
||||
|
'type' => 'text' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Slogan', |
||||
|
'name' => 'subtitle', |
||||
|
'type' => 'text', |
||||
|
'comment' => '(optional)' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'File', |
||||
|
'name' => 'file', |
||||
|
'type' => 'text', |
||||
|
'default' => 'stream.html', |
||||
|
'comment' => '(eg. "stream.html")' |
||||
|
); |
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'OGV stream URL', |
||||
|
'name' => 'ogvurl', |
||||
|
'type' => 'text', |
||||
|
'default' => 'https://lainchan.org/radio_assets/lainstream.ogg') |
||||
|
); |
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'RTMP stream URL', |
||||
|
'name' => 'rtmpurl', |
||||
|
'type' => 'text', |
||||
|
'default' => 'rtmp://lainchan.org/live/&stream') |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'OGV Status URL', |
||||
|
'name' => 'ogvstatus', |
||||
|
'type' => 'text', |
||||
|
'default' => '/radio_assets/status.xsl') |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'RTMP Status URL', |
||||
|
'name' => 'rtmpstatus', |
||||
|
'type' => 'text', |
||||
|
'default' => '/live/status?app=live&name=stream') |
||||
|
); |
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'RTMP Viewers URL', |
||||
|
'name' => 'rtmpviewers', |
||||
|
'type' => 'text', |
||||
|
'default' => '/live/subs?app=live&name=stream') |
||||
|
); |
||||
|
|
||||
|
|
||||
|
// Unique function name for building everything |
||||
|
$theme['build_function'] = 'stream_build'; |
||||
|
$theme['install_callback'] = 'stream_install'; |
||||
|
if (!function_exists('stream_install')) { |
||||
|
function stream_install($settings) { |
||||
|
} |
||||
|
} |
||||
|
|
@ -0,0 +1,84 @@ |
|||||
|
{% filter remove_whitespace %} |
||||
|
<!doctype html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<link rel="stylesheet" media="screen" href="/stylesheets/style.css"> |
||||
|
<link href="https://vjs.zencdn.net/5.11.7/video-js.css" rel="stylesheet"> |
||||
|
<meta charset="utf-8"> |
||||
|
<title>{{ settings.title }}</title> |
||||
|
{% if config.meta_keywords %}<meta name="keywords" content="{{ config.meta_keywords }}">{% endif %} |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes"> |
||||
|
{% if config.url_favicon %}<link rel="shortcut icon" href="{{ config.url_favicon }}">{% endif %} |
||||
|
<link rel="stylesheet" media="screen" href="/stylesheets/dark.css"> |
||||
|
<!--{% if config.default_stylesheet.1 != '' %}<link rel="stylesheet" type="text/css" id="stylesheet" href="{{ config.uri_stylesheets }}{{ config.default_stylesheet.1 }}">{% endif %}--> |
||||
|
{% if config.font_awesome %}<link rel="stylesheet" href="{{ config.root }}{{ config.font_awesome_css }}">{% endif %} |
||||
|
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script> |
||||
|
|
||||
|
<script type="text/javascript"> |
||||
|
$(document).ready(function(){ |
||||
|
check_status(); |
||||
|
setInterval(check_status, 15000); |
||||
|
}); |
||||
|
|
||||
|
function check_status(){ |
||||
|
$.get("{ settings.rtmpviewers }}", function(data){ |
||||
|
$("#rtmpviewers").text(data); |
||||
|
}); |
||||
|
|
||||
|
$.get("{{ settings.ogvstatus }}", function(data){ |
||||
|
var el = $( '<div></div>' ); |
||||
|
el.html(data); |
||||
|
var sd = el.find(".streamdata"); |
||||
|
|
||||
|
$("#ogvnowplaying").text( sd[25].textContent); |
||||
|
|
||||
|
$("#ogvviewers").text( sd[22].textContent ); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
</script> |
||||
|
</head> |
||||
|
<body> |
||||
|
<div class="bar top"> |
||||
|
{{ boardlist.top }} |
||||
|
</div> |
||||
|
<header> |
||||
|
<h1>{{ settings.title }}</h1> |
||||
|
<div class="subtitle">{{ settings.subtitle }}</div> |
||||
|
</header> |
||||
|
|
||||
|
<div class="ban"> |
||||
|
<video id="my-video" class="video-js vjs-big-play-centered vjs-default-skin" controls preload="auto" width="640" height="264" poster="https://lainchan.org/static/lain_is_cute_datass_small.png" data-setup="{}"> |
||||
|
<source src='{{ setings.rtmpurl }}' type='rtmp/mp4'/> |
||||
|
<source src="{{ settings.ogvurl }}" type='video/ogv'> |
||||
|
<p class="vjs-no-js"> |
||||
|
To view this video please enable JavaScript, and consider upgrading to a web browser that |
||||
|
<a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a> |
||||
|
</p> |
||||
|
</video> |
||||
|
|
||||
|
<br/> |
||||
|
<p>Now Streaming RTMP <span id="rtmpnowplaying">unknown</span></p> |
||||
|
<p>Now Streaming OGV <span id="ogvnowplaying">unknown</span></p> |
||||
|
<p>Current RTMP viewers: <span id="rtmpviewers">unknown</span></p> |
||||
|
<p>Current OGV viewers: <span id="ogvviewers">unknown</span></p> |
||||
|
<div> |
||||
|
<p>Raw stream URLs for Mplayer, mpv, VLC, etc:</p> |
||||
|
<p> RTMP : {{ setings.rtmpurl }} </p> |
||||
|
<p> OGV : {{ setings.ogvurl }} </p> |
||||
|
</div><br/> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
<hr/> |
||||
|
<footer> |
||||
|
<p class="unimportant" style="margin-top:20px;text-align:center;">- <a href="http://tinyboard.org/">Tinyboard</a> + |
||||
|
<a href='https://int.vichan.net/devel/'>vichan</a> {{ config.version }} - |
||||
|
<br><a href="http://tinyboard.org/">Tinyboard</a> Copyright © 2010-2014 Tinyboard Development Group |
||||
|
<br><a href="https://engine.vichan.net/">vichan</a> Copyright © 2012-2015 vichan-devel</p> |
||||
|
</footer> |
||||
|
<script src="https://vjs.zencdn.net/5.11.7/video.js"></script> |
||||
|
</body> |
||||
|
</html> |
||||
|
{% endfilter %} |
@ -0,0 +1,34 @@ |
|||||
|
<?php |
||||
|
require 'info.php'; |
||||
|
|
||||
|
function stream_build($action, $settings, $board) { |
||||
|
// Possible values for $action: |
||||
|
// - all (rebuild everything, initialization) |
||||
|
// - boards (board list changed) |
||||
|
|
||||
|
Stream::build($action, $settings); |
||||
|
} |
||||
|
|
||||
|
// Wrap functions in a class so they don't interfere with normal Tinyboard operations |
||||
|
class Stream { |
||||
|
public static function build($action, $settings) { |
||||
|
global $config; |
||||
|
|
||||
|
if ($action == 'all' ) |
||||
|
file_write($config['dir']['home'] . $settings['file'], Stream::homepage($settings)); |
||||
|
} |
||||
|
|
||||
|
// Build news page |
||||
|
public static function homepage($settings) { |
||||
|
global $config; |
||||
|
|
||||
|
|
||||
|
return Element('themes/stream/stream.html', Array( |
||||
|
'settings' => $settings, |
||||
|
'config' => $config, |
||||
|
'boardlist' => createBoardlist(), |
||||
|
)); |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
?> |
After Width: | Height: | Size: 7.7 KiB |
Loading…
Reference in new issue