You are here

videojs_hls.pages.inc in Video.js (HTML5 Video Player) 7.3

Same filename and directory in other branches
  1. 7.2 modules/videojs_hls/videojs_hls.pages.inc

Menu callbacks for the Video.js HTTP Live Streaming module.

File

modules/videojs_hls/videojs_hls.pages.inc
View source
<?php

/**
 * @file
 * Menu callbacks for the Video.js HTTP Live Streaming module.
 */

/**
 * Menu callback for the m3u8/% path.
 */
function videojs_hls_render_dynamic($filedata) {
  if (empty($filedata)) {
    drupal_not_found();
    exit;
  }
  $files = explode('|', rawurldecode($filedata));
  $content = videojs_hls_create_index($files);
  if (!$content) {
    drupal_not_found();
    exit;
  }
  return $content;
}

/**
 * Delivery callback for the m3u8/% path.
 */
function videojs_hls_deliver($page_callback_result) {
  if (is_int($page_callback_result)) {
    drupal_deliver_html_page($page_callback_result);
    return;
  }
  drupal_add_http_header('Content-Type', 'application/vnd.apple.mpegurl; charset=utf-8');
  echo $page_callback_result;
}
function videojs_hls_create_static_file(array $m3u8items) {
  $content = videojs_hls_create_index($m3u8items);
  if (!$content) {
    return FALSE;
  }
  $dir = variable_get('videojs_hls_delivery_static_scheme', variable_get('file_default_scheme', 'public')) . '://' . variable_get('videojs_hls_delivery_static_path', 'm3u8');
  $dir = rtrim($dir, '/');
  if (!file_prepare_directory($dir, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS)) {
    watchdog('videojs_hls', 'Directory %directory is not writable, can\'t use static files. Please check your Video.js HLS settings.', array(
      '%directory' => $dir,
    ));
    return FALSE;
  }
  $path = $dir . '/' . md5($content) . '.m3u8';
  if (!file_exists($path)) {
    file_put_contents($path, $content);
  }
  return $path;
}
function videojs_hls_create_index(array $m3u8items) {
  $return = array();
  $matches = array();
  foreach ($m3u8items as $m3u8item) {
    if (!preg_match('#(\\d+)k#i', $m3u8item, $matches)) {
      continue;
    }
    $bw = $matches[1] * 1000;
    $return[$bw] = '#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=' . $bw . "\n" . file_create_url($m3u8item);
  }
  if (empty($return)) {
    return FALSE;
  }

  // Sort the files by bandwidth, lowest first.
  ksort($return);
  array_unshift($return, '#EXTM3U');
  return implode("\n", $return);
}

Functions

Namesort descending Description
videojs_hls_create_index
videojs_hls_create_static_file
videojs_hls_deliver Delivery callback for the m3u8/% path.
videojs_hls_render_dynamic Menu callback for the m3u8/% path.