From: Christian Weiske Date: Mon, 20 Nov 2023 16:04:42 +0000 (+0100) Subject: Fix E_NOTICES on php 8.2 X-Git-Url: https://git.cweiske.de/playVideoOnDreamboxProxy.git/commitdiff_plain/HEAD?hp=e49228d52d2c0ef42444b20ffcd543241bdf485c Fix E_NOTICES on php 8.2 --- diff --git a/README.rst b/README.rst index 0ff7a5e..73318cc 100644 --- a/README.rst +++ b/README.rst @@ -47,6 +47,10 @@ You can test it on command line, too:: $ php www/play.php http://example.org/page.htm +Testing the URL selection without playing on the dreambox is possible:: + + $ php www/play.php http://example.org/page.htm --dry-run + ======= License diff --git a/www/functions.php b/www/functions.php index 6ad1044..95694e7 100644 --- a/www/functions.php +++ b/www/functions.php @@ -2,11 +2,28 @@ function getPageUrl() { global $argv, $argc; + + $dryRun = false; if (php_sapi_name() == 'cli') { if ($argc < 2) { - errorInput('No URL given as command line parameter'); + errorInput( + "No URL given as command line parameter\n" + . "Usage:\n" + . " play.php [--dry-run|-n] " + ); + } + $options = []; + array_shift($argv);//remove script itself + foreach ($argv as $val) { + if ($val[0] == '-') { + $options[$val] = true; + } else { + $pageUrl = $val; + } + } + if (isset($options['--dry-run']) || isset($options['-n'])) { + $dryRun = true; } - $pageUrl = $argv[1]; } else if (!isset($_SERVER['CONTENT_TYPE'])) { errorInput('Content type header missing'); } else if ($_SERVER['CONTENT_TYPE'] == 'text/plain') { @@ -22,7 +39,7 @@ function getPageUrl() errorInput('Content type is not text/plain but ' . $_SERVER['CONTENT_TYPE']); } - $parts = parse_url($pageUrl); + $parts = parse_url($pageUrl ?? null); if ($parts === false) { errorInput('Invalid URL in POST data'); } else if (!isset($parts['scheme'])) { @@ -30,7 +47,7 @@ function getPageUrl() } else if ($parts['scheme'] !== 'http' && $parts['scheme'] !== 'https') { errorInput('Invalid URL in POST data: Non-HTTP scheme'); } - return $pageUrl; + return [$pageUrl, $dryRun]; } function getYoutubeDlJson($pageUrl, $youtubedlPath) @@ -89,17 +106,48 @@ function extractVideoUrlFromJson($json) errorOut('Cannot decode JSON: ' . json_last_error_msg()); } - $url = null; + $safeFormats = []; foreach ($data->formats as $format) { if (strpos($format->format, 'hls') !== false) { //dreambox 7080hd does not play hls files continue; } + if (strpos($format->format, 'vp9') !== false + || $format->vcodec == 'vp9' + ) { + //dreambox 7080hd does not play VP9 video streams + continue; + } + if (strtolower(substr($format->vcodec, 0, 6)) == 'avc1.6') { + //dreambox DM7080 does not play H.264 High Profile + continue; + } if ($format->protocol == 'http_dash_segments') { //split up into multiple small files continue; } + if ($format->ext == 'flv') { + //Internal data flow error + continue; + } + $safeFormats[] = $format; + } + + $url = null; + + //filter: best quality + usort($safeFormats, function ($a, $b) { + $a->acodec = $a->acodec ?? null; + $b->acodec = $b->acodec ?? null; + if ((($a->acodec != 'none') + ($b->acodec != 'none')) == 1) { + return ($b->acodec != 'none') - ($a->acodec != 'none'); + } + return ($b->quality ?? 0) - ($a->quality ?? 0); + }); + foreach ($safeFormats as $format) { + //echo $format->format . ' | ' . $format->vcodec . ' | ' . $format->acodec . "\n"; $url = $format->url; + break; } if ($url === null) { diff --git a/www/play.php b/www/play.php index d96764d..0fdb243 100644 --- a/www/play.php +++ b/www/play.php @@ -18,7 +18,7 @@ if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'GET') { set_error_handler('errorHandlerStore'); -$pageUrl = getPageUrl(); +[$pageUrl, $dryRun] = getPageUrl(); $json = getYoutubeDlJson($pageUrl, $youtubedlPath); $videoUrl = extractVideoUrlFromJson($json); if (php_sapi_name() == 'cli') { @@ -26,7 +26,9 @@ if (php_sapi_name() == 'cli') { } else { header('Video-URL: ' . $videoUrl); } -playVideoOnDreambox($videoUrl, $dreamboxUrl); +if (!$dryRun) { + playVideoOnDreambox($videoUrl, $dreamboxUrl); +} function errorInput($msg)