support new config and playlist format
This commit is contained in:
parent
7499ed9ae2
commit
f9a1828bb7
@ -52,12 +52,16 @@ function modal(btOK, btCan, video, title, content, x, y, callback) {
|
||||
}
|
||||
|
||||
//get date
|
||||
function get_date(hour, seek_day) {
|
||||
var raw_date = moment();
|
||||
if (raw_date.format("H") < parseInt(hour) && seek_day) {
|
||||
return raw_date.add(-1, 'days');
|
||||
function get_date(t, seek_day) {
|
||||
var datetime = moment();
|
||||
var l_time = t.split(":");
|
||||
l_stamp = parseInt(l_time[0]) * 3600 + parseInt(l_time[1]) * 60 + parseInt(l_time[2]);
|
||||
t_stamp = moment.duration(datetime.format("H:M:S")).asSeconds();
|
||||
|
||||
if (l_stamp > 0 && l_stamp > t_stamp && seek_day) {
|
||||
return datetime.add(-1, 'days');
|
||||
} else {
|
||||
return raw_date;
|
||||
return datetime;
|
||||
}
|
||||
}
|
||||
|
||||
@ -137,12 +141,12 @@ function init_browse_click() {
|
||||
}
|
||||
|
||||
// call php script to navigatge to the selected folder on the server
|
||||
function browse(current_data) {
|
||||
$.get("functions.php" + current_data + "&head=get", function(data) {
|
||||
function browse(c_data) {
|
||||
$.get("functions.php" + c_data + "&head=get", function(data) {
|
||||
$('#browserHead').html(data);
|
||||
});
|
||||
|
||||
$.get("functions.php" + current_data + "&ul=get", function(data) {
|
||||
$.get("functions.php" + c_data + "&ul=get", function(data) {
|
||||
$('#rootDirectory').html(data);
|
||||
init_browse_click();
|
||||
});
|
||||
@ -151,13 +155,17 @@ function browse(current_data) {
|
||||
// first page load will open the media directory
|
||||
window.onload = function() {
|
||||
$.get("resources/list_op.php?clips_root=get", function(result) {
|
||||
browse("?dir=" + result);
|
||||
browse("?dir=" + result.replace(/^\//g, ''));
|
||||
});
|
||||
|
||||
$.get("resources/list_op.php?list_start=get", function(result) {
|
||||
var l_time = result.split(":");
|
||||
var l_stamp = parseInt(l_time[0]) * 3600 + parseInt(l_time[1]) * 60 + parseInt(l_time[2]);
|
||||
|
||||
var list_date = get_date(result, true);
|
||||
// write playlist date to list attribute, for later use
|
||||
$('#playlistBody').attr('listday', list_date.format("YYYY-MM-DD"));
|
||||
$('#playlistBody').attr('liststart', l_stamp);
|
||||
// read playlist from current day
|
||||
get_json(list_date.format("YYYY-MM-DD"), true);
|
||||
});
|
||||
@ -252,7 +260,8 @@ function reorder_playlist() {
|
||||
// get start time from: /etc/ffplayout/ffplayout.conf
|
||||
$.get("resources/list_op.php?list_start=get", function(result) {
|
||||
var reorder = document.getElementById("playlistBody").getElementsByClassName("list-item");
|
||||
var start_time = parseFloat(result * 3600);
|
||||
var l_time = result.split(":");
|
||||
var start_time = parseFloat(l_time[0]) * 3600 + parseFloat(l_time[1]) * 60 + parseFloat(l_time[2]);
|
||||
var time_format, cur_in, cur_out;
|
||||
|
||||
for (var i = 0; i < reorder.length; i++) {
|
||||
@ -281,39 +290,37 @@ function jump_and_colorize_title(jump) {
|
||||
var play_begin, play_dur;
|
||||
|
||||
$.get("resources/list_op.php?list_start=get", function(result) {
|
||||
list_date = get_date(result, true);
|
||||
var list_date = get_date(result, true);
|
||||
|
||||
if (list_date.format("H") < parseInt(result)) {
|
||||
time_in_seconds += 86400
|
||||
}
|
||||
|
||||
$.get("resources/list_op.php?time_shift=get", function(shift) {
|
||||
if ($('#playlistBody').attr('listday') === list_date.format("YYYY-MM-DD")) {
|
||||
for (var i = 0; i < play_items.length; i++) {
|
||||
play_begin = parseFloat($(play_items[i]).attr('begin')) - parseFloat(shift);
|
||||
play_dur = parseFloat($(play_items[i]).attr('dur'));
|
||||
if (play_begin + play_dur >= time_in_seconds) {
|
||||
// jump to position only after page load
|
||||
if (jump) {
|
||||
$('#list-container').animate({
|
||||
scrollTop: $('#playlistBody li:nth-child(' + (i-1) + ')').position().top
|
||||
}, 500, "easeOutQuint");
|
||||
}
|
||||
|
||||
// colorize items
|
||||
$(play_items[i]).addClass('current_item');
|
||||
$(play_items[i+1]).addClass('next_item');
|
||||
$('.list-item:gt('+(i+1)+')').addClass('last_items');
|
||||
break;
|
||||
if ($('#playlistBody').attr('listday') === list_date.format("YYYY-MM-DD")) {
|
||||
for (var i = 0; i < play_items.length; i++) {
|
||||
play_begin = parseFloat($(play_items[i]).attr('begin'));
|
||||
play_dur = parseFloat($(play_items[i]).attr('dur'));
|
||||
if (play_begin + play_dur >= time_in_seconds) {
|
||||
// jump to position only after page load
|
||||
if (jump) {
|
||||
$('#list-container').animate({
|
||||
scrollTop: $('#playlistBody li:nth-child(' + (i-1) + ')').position().top
|
||||
}, 500, "easeOutQuint");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// scroll to playlist top
|
||||
if (jump) {
|
||||
$('#list-container').animate({scrollTop: 0}, 500, "easeOutQuint");
|
||||
|
||||
// colorize items
|
||||
$(play_items[i]).addClass('current_item');
|
||||
$(play_items[i+1]).addClass('next_item');
|
||||
$('.list-item:gt('+(i+1)+')').addClass('last_items');
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// scroll to playlist top
|
||||
if (jump) {
|
||||
$('#list-container').animate({scrollTop: 0}, 500, "easeOutQuint");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -355,24 +362,24 @@ header functions
|
||||
var intervalId = null;
|
||||
|
||||
function get_track_list(interval) {
|
||||
var begin, src, dur, seek, out, time_left;
|
||||
var begin, seek, out, time_left;
|
||||
|
||||
$.get("resources/player.php?track=get", function(result) {
|
||||
function get_track() {
|
||||
var moment_time = moment().format('HH:mm:ss');
|
||||
var time_in_seconds = parseFloat(moment.duration(moment_time).asSeconds());
|
||||
var json = $.parseJSON(result);
|
||||
var playlist_start = parseFloat(json[0]['start'][0]);
|
||||
var playlist_start = parseFloat($('#playlistBody').attr('liststart'));
|
||||
|
||||
if (0.0 <= time_in_seconds && time_in_seconds < playlist_start * 3600.0) {
|
||||
if (0.0 <= time_in_seconds && time_in_seconds < playlist_start) {
|
||||
time_in_seconds += 86400.0;
|
||||
}
|
||||
|
||||
$.each(json, function (index, value) {
|
||||
begin = parseFloat(value['begin'][0]);
|
||||
dur = parseFloat(value['dur'][0]);
|
||||
seek = parseFloat(value['in'][0]);
|
||||
out = parseFloat(value['out'][0]);
|
||||
begin = playlist_start;
|
||||
|
||||
$.each(json, function (_index, value) {
|
||||
seek = parseFloat(value['in']);
|
||||
out = parseFloat(value['out']);
|
||||
|
||||
if (time_in_seconds < begin + out - seek ) {
|
||||
time_left = begin + out - seek - time_in_seconds;
|
||||
@ -380,6 +387,8 @@ function get_track_list(interval) {
|
||||
$('#title').html((value['src']));
|
||||
return false;
|
||||
}
|
||||
|
||||
begin += out - seek;
|
||||
});
|
||||
}
|
||||
if (interval) {
|
||||
@ -387,7 +396,6 @@ function get_track_list(interval) {
|
||||
} else {
|
||||
clearInterval(refreshIntervalId);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@ -521,7 +529,6 @@ $(document).ready(function() {
|
||||
var save_list = [];
|
||||
$('#playlistBody li.list-item').each(function(){
|
||||
save_list.push({
|
||||
begin:$(this).attr('begin'),
|
||||
src:$(this).attr('src'),
|
||||
dur:$(this).attr('dur'),
|
||||
in:$(this).attr('in'),
|
||||
@ -562,7 +569,6 @@ $(document).ready(function() {
|
||||
var save_list = [];
|
||||
$('#playlistBody li.list-item').each(function(){
|
||||
save_list.push({
|
||||
begin:$(this).attr('begin'),
|
||||
src:$(this).attr('src'),
|
||||
dur:$(this).attr('dur'),
|
||||
in:$(this).attr('in'),
|
||||
@ -581,7 +587,6 @@ $(document).ready(function() {
|
||||
modal(null, null, null, "Fill Playlist", "Filling Playlist in progress...", 'auto', 'auto', function(result) {});
|
||||
},
|
||||
success: function(result) {
|
||||
// console.log(result);
|
||||
$('#dialog-confirm').dialog("close");
|
||||
modal(true, null, null, "Fill Playlist", result + "<br/><b>Filled Time:</b> " + moment.utc(Math.abs(missed_length) * 1000).format('HH:mm:ss'), 'auto', 'auto', function(result) {});
|
||||
get_json(date, false);
|
||||
|
@ -5,43 +5,22 @@ read values from ffplayout config file
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
// get config file
|
||||
function get_config() {
|
||||
return file_get_contents("/etc/ffplayout/ffplayout.conf");
|
||||
function get_ini() {
|
||||
return parse_ini_file("/etc/ffplayout/ffplayout.conf", TRUE, INI_SCANNER_RAW);
|
||||
}
|
||||
|
||||
// get start time
|
||||
if(!empty($_GET['list_start'])) {
|
||||
$get_ini = get_config();
|
||||
$get_start = "/^day_start.*\$/m";
|
||||
preg_match_all($get_start, $get_ini, $matches);
|
||||
$line = implode("\n", $matches[0]);
|
||||
echo explode("= ", $line)[1];
|
||||
$ini = get_ini();
|
||||
echo $ini['PLAYLIST']['day_start'];
|
||||
}
|
||||
|
||||
// get clips root directory
|
||||
if(!empty($_GET['clips_root'])) {
|
||||
$get_ini = get_config();
|
||||
$get_root = "/^clips_root.*\$/m";
|
||||
preg_match_all($get_root, $get_ini, $matches);
|
||||
$line = implode("\n", $matches[0]);
|
||||
$root = substr(explode("= ", $line)[1], 1);
|
||||
echo $root;
|
||||
$ini = get_ini();
|
||||
echo $ini['STORAGE']['path'];
|
||||
}
|
||||
|
||||
// get time_shift
|
||||
if (!empty($_GET['time_shift'])) {
|
||||
$get_ini = get_config();
|
||||
$get_shift = "/^time_shift.*\$/m";
|
||||
preg_match_all($get_shift, $get_ini, $shift_arr);
|
||||
$line_shift = implode("\n", $shift_arr[0]);
|
||||
$time_shift = explode("= ", $line_shift)[1];
|
||||
|
||||
if(empty($time_shift)) {
|
||||
echo 0;
|
||||
} else {
|
||||
echo $time_shift;
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
json playlist operations
|
||||
@ -65,19 +44,16 @@ $ext = implode('|', $except);
|
||||
if(!empty($_GET['json_path'])) {
|
||||
$json_date = $_GET['json_path'];
|
||||
$date_str = explode('-', $json_date);
|
||||
$get_ini = get_config();
|
||||
$get_dir = "/^playlist_path.*\$/m";
|
||||
preg_match_all($get_dir, $get_ini, $matches);
|
||||
$line = implode("\n", $matches[0]);
|
||||
$path_root = explode("= ", $line)[1];
|
||||
$ini = get_ini();
|
||||
$dir = $ini['PLAYLIST']['path'];
|
||||
|
||||
$json_path = $path_root . "/" . $date_str[0] . "/" . $date_str[1] . "/" . $json_date . ".json";
|
||||
$json_path = $dir . "/" . $date_str[0] . "/" . $date_str[1] . "/" . $json_date . ".json";
|
||||
|
||||
if (file_exists($json_path)) {
|
||||
$content = file_get_contents($json_path) or die("Error: Cannot create object");
|
||||
$json = json_decode($content, true);
|
||||
|
||||
list($hh, $mm, $ss) = explode(":", $json["begin"]);
|
||||
list($hh, $mm, $ss) = explode(":", $ini['PLAYLIST']['day_start']);
|
||||
list($l_hh, $l_mm, $l_ss) = explode(":", $json["length"]);
|
||||
|
||||
$start = $hh * 3600 + $mm * 60 + $ss;
|
||||
@ -185,22 +161,15 @@ if(!empty($_POST['save'])) {
|
||||
$date = $_POST['date'];
|
||||
$date_str = explode('-', $date);
|
||||
// get save path
|
||||
$get_ini = get_config();
|
||||
$get_dir = "/^playlist_path.*\$/m";
|
||||
preg_match_all($get_dir, $get_ini, $matches);
|
||||
$line = implode("\n", $matches[0]);
|
||||
$path_root = explode("= ", $line)[1];
|
||||
$json_path = $path_root . "/" . $date_str[0] . "/" . $date_str[1];
|
||||
$ini = get_ini();
|
||||
$dir = $ini['PLAYLIST']['path'];
|
||||
$json_path = $dir . "/" . $date_str[0] . "/" . $date_str[1];
|
||||
$json_output = $json_path . "/" . $date . ".json";
|
||||
|
||||
$beginRaw = round($raw_arr[0]->begin);
|
||||
$start = sprintf('%02d:%02d:%02d', ($beginRaw/3600),($beginRaw/60%60), $beginRaw%60);
|
||||
|
||||
// prepare header
|
||||
$list = array(
|
||||
"channel" => "Test 1",
|
||||
"date" => $date,
|
||||
"begin" => $start,
|
||||
"length" => "24:00:00.000",
|
||||
"program" => []
|
||||
);
|
||||
@ -232,69 +201,4 @@ if(!empty($_POST['save'])) {
|
||||
printf('Save playlist "%s.json" done...', $date);
|
||||
}
|
||||
|
||||
// fill playlist to 24 hours
|
||||
if(!empty($_POST['fill_playlist'])) {
|
||||
$list_date = $_POST['fill_playlist'];
|
||||
$diff_len = $_POST['diff_len'];
|
||||
$start_time = $_POST['start_time'];
|
||||
$raw_arr = json_decode(urldecode($_POST['old_list']));
|
||||
|
||||
$get_ini = get_config();
|
||||
$date_str = explode('-', $list_date);
|
||||
$get_dir = "/^playlist_path.*\$/m";
|
||||
preg_match_all($get_dir, $get_ini, $matches);
|
||||
$line = implode("\n", $matches[0]);
|
||||
$path_root = explode("= ", $line)[1];
|
||||
$json_path = $path_root . "/" . $date_str[0] . "/" . $date_str[1];
|
||||
$json_output = $json_path . "/" . $list_date . ".json";
|
||||
|
||||
$fill = shell_exec("./sh/fill.sh '".$diff_len."'");
|
||||
|
||||
$beginRaw = round($raw_arr[0]->begin);
|
||||
$start = sprintf('%02d:%02d:%02d', ($beginRaw/3600),($beginRaw/60%60), $beginRaw%60);
|
||||
|
||||
// prepare header
|
||||
$list = array(
|
||||
"channel" => "Test 1",
|
||||
"date" => $list_date,
|
||||
"begin" => $start,
|
||||
"length" => "24:00:00.000",
|
||||
"program" => []
|
||||
);
|
||||
|
||||
// create json video element
|
||||
foreach($raw_arr as $rawline) {
|
||||
$clipItem = array(
|
||||
"in" => floatval($rawline->in),
|
||||
"out" => floatval($rawline->out),
|
||||
"duration" => floatval($rawline->dur),
|
||||
"source" => $rawline->src
|
||||
);
|
||||
|
||||
$list["program"][] = $clipItem;
|
||||
}
|
||||
|
||||
foreach(preg_split("/((\r?\n)|(\r\n?))/", $fill) as $line){
|
||||
$line_arr = explode('|', $line);
|
||||
|
||||
$clipItem = array(
|
||||
"in" => floatval($line_arr[0]),
|
||||
"out" => floatval($line_arr[1]),
|
||||
"duration" => floatval($line_arr[2]),
|
||||
"source" => $line_arr[3]
|
||||
);
|
||||
|
||||
if ($line_arr[3]) {
|
||||
$list["program"][] = $clipItem;
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_dir($json_path)) {
|
||||
mkdir($json_path, 0777, true);
|
||||
}
|
||||
|
||||
file_put_contents($json_output, json_encode(
|
||||
$list, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT));
|
||||
printf('Filled and save playlist "%s.json" done...', $list_date);
|
||||
}
|
||||
?>
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
// get config file
|
||||
function get_config() {
|
||||
return file_get_contents("/etc/ffplayout/ffplayout.conf");
|
||||
function get_ini() {
|
||||
return parse_ini_file("/etc/ffplayout/ffplayout.conf", TRUE, INI_SCANNER_RAW);
|
||||
}
|
||||
|
||||
// file extension to filter
|
||||
@ -20,31 +20,34 @@ $ext = implode('|', $except);
|
||||
|
||||
// get current track
|
||||
if(!empty($_GET['track'])) {
|
||||
$get_ini = get_config();
|
||||
$get_dir = "/^playlist_path.*\$/m";
|
||||
preg_match_all($get_dir, $get_ini, $match_dir);
|
||||
$line = implode("\n", $match_dir[0]);
|
||||
$path_root = explode("= ", $line)[1];
|
||||
$ini = get_ini();
|
||||
$dir = $ini['PLAYLIST']['path'];
|
||||
|
||||
// list start
|
||||
$get_start = "/^day_start.*\$/m";
|
||||
preg_match_all($get_start, $get_ini, $match_start);
|
||||
$start_line = implode("\n", $match_start[0]);
|
||||
$start_hour = explode("= ", $start_line)[1];
|
||||
$start = $ini['PLAYLIST']['day_start'];
|
||||
$st = date_parse($start);
|
||||
$start_time = $st['hour'] * 3600 + $st['minute'] * 60 + $st['second'];
|
||||
|
||||
$time = date("H");
|
||||
$t = date_parse(date("H:i:s"));
|
||||
$time = $t['hour'] * 3600 + $t['minute'] * 60 + $t['second'];
|
||||
|
||||
if ($time < $start_hour) {
|
||||
if ($time < $start_time) {
|
||||
$date = date("Y-m-d", strtotime( '-1 days' ) );
|
||||
} else {
|
||||
$date = date("Y-m-d");
|
||||
}
|
||||
|
||||
$date_str = explode('-', $date);
|
||||
$xml_path = $path_root . "/" . $date_str[0] . "/" . $date_str[1] . "/" . $date . ".xml";
|
||||
$json_path = $dir . "/" . $date_str[0] . "/" . $date_str[1] . "/" . $date . ".json";
|
||||
|
||||
if (file_exists($xml_path)) {
|
||||
$xml = simplexml_load_file($xml_path) or die("Error: Cannot create object");
|
||||
if (file_exists($json_path)) {
|
||||
$content = file_get_contents($json_path) or die("Error: Cannot create object");
|
||||
$json = json_decode($content, true);
|
||||
|
||||
list($hh, $mm, $ss) = explode(":", $json["begin"]);
|
||||
list($l_hh, $l_mm, $l_ss) = explode(":", $json["length"]);
|
||||
$begin = $hh * 3600 + $mm * 60 + $ss;
|
||||
$length = $l_hh * 3600 + $l_mm * 60 + $l_ss;
|
||||
|
||||
$src_re = array();
|
||||
$src_re[0] = '/# [0-9-]+.('.$ext.')$/';
|
||||
@ -54,17 +57,19 @@ if(!empty($_GET['track'])) {
|
||||
|
||||
$videos = array();
|
||||
|
||||
foreach($xml->body[0]->video as $video) {
|
||||
$src = preg_replace('/^\//', '', $video['src']);
|
||||
foreach($json["program"] as $video) {
|
||||
$src = preg_replace('/^\//', '', $video['source']);
|
||||
$src_arr = explode('/', $src);
|
||||
$name = preg_replace($src_re, '', end($src_arr));
|
||||
$name = str_replace('§', '?', $name);
|
||||
$begin = $video['begin'];
|
||||
$dur = $video['dur'];
|
||||
$dur = $video['duration'];
|
||||
|
||||
$in = $video['in'];
|
||||
$out = $video['out'];
|
||||
|
||||
$videos[] = array('start' => $start_hour, 'begin'=> $begin, 'src' => $name, 'dur' => $dur, 'in' => $in, 'out' => $out);
|
||||
$videos[] = array('start' => $start_time, 'begin'=> $begin, 'src' => $name, 'dur' => $dur, 'in' => $in, 'out' => $out);
|
||||
|
||||
$begin += $out - $in;
|
||||
}
|
||||
|
||||
echo json_encode($videos);
|
||||
|
Loading…
Reference in New Issue
Block a user