Example #1
0
/**
 * 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) {
Example #3
0
<?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());