/** * Serve a converted web compatible video * URL structure: projekktor/<guid>/<format>/ * * @param array $page Page segments array */ function elgg_file_viewer_projekktor_video($page) { $enable_ffmpeg = elgg_get_plugin_setting('enable_ffmpeg', 'elgg_file_viewer'); if ($enable_ffmpeg != 'yes') { return false; } $guid = elgg_extract(0, $page, null); $file = get_entity($guid); if (!elgg_instanceof($file, 'object', 'file')) { return false; } $info = pathinfo($file->getFilenameOnFilestore()); $filename = $info['filename']; $format = elgg_extract(1, $page); $output = new ElggFile(); $output->owner_guid = $file->owner_guid; $output->setFilename("projekktor/{$file->guid}/{$filename}.{$format}"); if (!$output->size()) { try { $filestorename = $output->getFilenameOnFilestore(); $output->open('write'); $output->close(); $ffmpeg_path = elgg_get_plugin_setting('ffmpeg_path', 'elgg_file_viewer'); $FFmpeg = new FFmpeg($ffmpeg_path); $FFmpeg->input($file->getFilenameOnFilestore())->output($filestorename)->ready(); elgg_log("Converting file {$file->guid} to {$format}: {$FFmpeg->command}", 'NOTICE'); } catch (Exception $e) { elgg_log($e->getMessage(), 'ERROR'); } } $mime = elgg_file_viewer_get_mime_type($file); $base_type = substr($mime, 0, strpos($mime, '/')); header("Pragma: public"); header("Content-type: {$base_type}/{$format}"); header("Content-Disposition: attachment; filename=\"{$filename}.{$format}\""); ob_clean(); flush(); readfile($output->getFilenameOnFilestore()); }
<?php $entity = elgg_extract('entity', $vars); if (!$entity instanceof ElggFile) { return; } $attr = array('class' => 'video-js', 'width' => 640, 'id' => "video-player-{$entity->guid}", 'title' => $entity->getDisplayName(), 'controls' => true, 'preload' => 'metadata', 'autoplay' => false); $entity_mime = elgg_file_viewer_get_mime_type($entity); list($base_type, $ext) = explode('/', $entity_mime); switch ($base_type) { default: case 'video': $tag = 'video'; $mimes = array_unique([$entity_mime, 'video/mp4', 'video/webm', 'video/ogv']); $attr['poster'] = $entity->icontime ? $entity->getIconURL('master') : elgg_get_simplecache_url('elgg_file_viewer/video.jpg'); break; case 'audio': $tag = 'audio'; $mimes = array_unique([$entity_mime, 'audio/mpeg', 'audio/ogg', 'video/wav']); $attr['poster'] = $entity->icontime ? $entity->getIconURL('master') : elgg_get_simplecache_url('elgg_file_viewer/audio.jpg'); break; } $sources = ''; foreach ($mimes as $mime) { if ($mime == $entity_mime) { $url = elgg_get_download_url($entity); } else { list(, $ext) = explode('/', $mime); $url = elgg_file_viewer_get_media_url($entity, $ext); } if ($url) {
<?php $guid = get_input('guid'); $file = get_entity($guid); if (!$file) { return; } $mime = elgg_file_viewer_get_mime_type($file); $filename = $file->originalfilename; header("Pragma: public"); header("Content-type: {$mime}"); header("Content-Disposition: attachment; filename=\"{$filename}\""); ob_clean(); flush(); readfile($file->getFilenameOnFilestore());