5 if (php_sapi_name() == 'cli') {
7 errorInput('No URL given as command line parameter');
11 if (!isset($_SERVER['CONTENT_TYPE'])) {
12 errorInput('Content type header missing');
13 } else if ($_SERVER['CONTENT_TYPE'] != 'text/plain') {
14 errorInput('Content type is not text/plain but ' . $_SERVER['CONTENT_TYPE']);
16 $pageUrl = file_get_contents('php://input');
18 $parts = parse_url($pageUrl);
19 if ($parts === false) {
20 errorInput('Invalid URL in POST data');
21 } else if (!isset($parts['scheme'])) {
22 errorInput('Invalid URL in POST data: No scheme');
23 } else if ($parts['scheme'] !== 'http' && $parts['scheme'] !== 'https') {
24 errorInput('Invalid URL in POST data: Non-HTTP scheme');
29 function getYoutubeDlJson($pageUrl, $youtubedlPath)
32 . ' --no-playlist'//would otherwise cause multiple json blocks
35 . ' ' . escapeshellarg($pageUrl)
38 $lastLine = exec($cmd, $output, $exitCode);
39 if ($exitCode !== 0) {
40 if ($exitCode === 127) {
42 'youtube-dl not found at ' . $youtubedlPath,
43 '500 youtube-dl not found'
45 } else if (strpos($lastLine, 'Unsupported URL') !== false) {
47 'Unsupported URL at ' . $pageUrl,
48 '406 Unsupported URL (No video found)'
51 errorOut('youtube-dl error: ' . $lastLine);
55 $json = implode("\n", $output);
59 function extractVideoUrlFromJson($json)
61 $data = json_decode($json);
63 errorOut('Cannot decode JSON: ' . json_last_error_msg());
67 foreach ($data->formats as $format) {
68 if (strpos($format->format, 'hls') !== false) {
69 //dreambox 7080hd does not play hls files
72 if ($format->protocol == 'http_dash_segments') {
73 //split up into multiple small files
80 //use URL chosen by youtube-dl
87 '406 No video URL found'
93 function playVideoOnDreambox($videoUrl, $dreamboxUrl)
95 ini_set('track_errors', 1);
96 $xml = @file_get_contents($dreamboxUrl . '/web/session');
98 list($http, $code, $message) = explode(
99 ' ', $http_response_header[0], 3
102 //dreambox web interface authentication has been enabled
104 'Error: Web interface authentication is required',
105 '401 Dreambox web authentication required'
109 'Failed to fetch dreambox session token: ' . $php_errormsg,
110 $code . ' ' . $message
114 $sx = simplexml_load_string($xml);
115 $token = (string) $sx;
117 $playUrl = $dreamboxUrl
118 . '/web/mediaplayerplay'
119 . '?file=4097:0:1:0:0:0:0:0:0:0:'
120 . str_replace('%3A', '%253A', rawurlencode($videoUrl));
122 $ctx = stream_context_create(
126 'header' => 'Content-type: application/x-www-form-urlencoded',
127 'content' => 'sessionid=' . $token,
128 //'ignore_errors' => true
132 $ret = file_get_contents($playUrl, false, $ctx);
133 if ($ret !== false) {
134 if (php_sapi_name() != 'cli') {
135 header('HTTP/1.0 200 OK');
137 echo "Video play request sent to dreambox\n";
141 'Failed to send video play request to dreambox: ' . $php_errormsg