Creación de un flash player para el módulo de Drupal SWFTools

Actualmente en mi trabajo estamos trabajando en un portal educativo para el Ministerio de Educación de Panamá. Este portal cuenta con una serie de tipos contenidos entre los que se encuentran videos. Para los videos de utilizó el módulo swftools

Swftools ofrece una excelente API para crear nuevos players (reproductores) a través de módulos además de los que ya trae por defecto. Uno de ellos es flowplayer3, que permite una grama de opciones pero tiene varios tipos de licencias a la hora de utilizarlo. Tiene una versión que se encuentra bajo la licencia GPL, pero tiene ciertas restricciones como que se debe mantener el logo de flowplayer en todo momento. Por esta razón decidimos desarrollar un player personalizado especialmente para la reproducción de videos.

Estudiando un poco los módulos que trae por defecto swftools (flowplayer3 y genericplayers) pudimos entender la API que define. A continuación una explicación del módulo creado para nuestro player:

Archivo: player.info

;$Id$
 
name = Video Player
description = Create a new player to swftools.
package = SWF Tools
dependencies[] = swftools
core = 6.x
 
version = "6.x-1.0"

Archivo: player.admin.inc

<?php
 
function player_admin_settings() {
 
  // Retrieve combination of default and saved settings
  $saved_settings = _player_settings();
 
  // Initialise array to hold form
  $form = array();
 
  $form['player_data']['#tree'] = TRUE;
 
  $form['player_data']['clip'] = array(
    '#type' => 'fieldset',
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
    '#title' => t('Generic Data'),
  );
 
  $form['player_data']['clip']['autostart'] = array(
    '#type' => 'select',
    '#options' => array('true' => 'true', 'false' => 'false'),
    '#default_value' => $saved_settings['clip']['autostart'],
    '#title' => t('Auto play'),
    '#description' => t('Flag indicating whether the player should start playback immediately upon loading.'),
  );
 
// Canvas settings
  $form['player_data']['canvas'] = array(
    '#type' => 'fieldset',
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
    '#title' => t('Canvas properties'),
  );
 
  $form['player_data']['canvas']['height'] = array(
    '#type' => 'textfield',
    '#default_value' => $saved_settings['canvas']['height'],
    '#title' => t('Height'),
    '#description' => t('The height of the player in pixels.'),
    '#size' => 8,
  );
 
  $form['player_data']['canvas']['width'] = array(
    '#type' => 'textfield',
    '#default_value' => $saved_settings['canvas']['width'],
    '#title' => t('Width'),
    '#description' => t('The width of the player in pixels.'),
    '#size' => 8,
  );
 
  $form['#submit'][] = 'player_admin_settings_submit';
 
  return system_settings_form($form);
}
 
/**
 * Flush all caches when new FlowPlayer3 settings are stored.
 */
function player_admin_settings_submit($form, &$form_state) {
 
  // Flush all caches so new players appear
  drupal_flush_all_caches();
 
}

En este archivo se define el formulario de administración para modificar las configuraciones que defina el módulo.

Archivo: player.module

<?php
/**
 * Implementation of swftools_methods hook
 * Report methods back to SWF Tools
 */
 
define('PLAYER_FLV', 'player_flv'); // Play an flv file
 
 
function _player_settings() {
 
  $defaults['clip'] = array(
    'autostart' => 'false',
  ); 
 
  $defaults['canvas'] = array(
    'width' => 500,
    'height' => 375,
  );
 
  // Retrieve settings from database, if available
  $saved_settings = variable_get('player_data', array());
 
  // Merge the two sets together
  $defaults = array_merge($defaults, $saved_settings);
 
  // Return resulting defaults
  return $defaults;
}
 
function player_swftools_methods() {
 
  $methods = array();
 
  $flv_player = array (
    'name'        => PLAYER_FLV,
    'module'      => 'player',
    'file'        => 'file_url', // Define which flashvar to assign a 'file to play' variable.
    'shared_file' => 'player/' . PLAYER_FLV . '.swf',
    'title'       => t('Player'),
  );
 
  $methods[SWFTOOLS_FLV_DISPLAY][PLAYER_FLV] = $flv_player;
 
  return $methods;
}
 
 
/**
 * Implementation of hook_menu(). Items such as access control is set by swftools automatically
 * This is not a "true" hook, but the contents returned by this function are merged with
 * swftools_menu to provide the complete menu structure for SWF Tools
 */
function player_menu() {
 
  $items = array();
 
  $items['admin/settings/swftools/educaplayer'] = array(
    'title' => t('Custom Player'),
    'description' => 'Custom Player',
    'access arguments' => array('administer flash'),
    'weight' => -1,
    'page callback' => 'drupal_get_form',
    'page arguments' => array('player_admin_settings'),
	'file' => 'player.admin.inc',
    'file path' => drupal_get_path('module', 'player'),
  );
  return $items;
}
 
/**
 * Implementation of swftools_flashvars hook.
 *
 */
function player_swftools_flashvars($action, &$methods, &$vars) {
  if ($vars->othervars['file_url']) {
    $vars->flashvars['file_url'] = $vars->othervars['file_url'];
  }
 
   // If the object doesn't have a width set then assign one
  if (!isset($vars->params['width'])) {
    $vars->params['width'] = $saved_settings['canvas']['width'];
  }
 
  // If the object doesn't have a height set then assign one
  if (!isset($vars->params['height'])) {
    $vars->params['height'] = $saved_settings['canvas']['height'];
  }
 
  $vars->params['bgcolor'] = '#000';
 
  switch ($action) {
    case SWFTOOLS_FLV_DISPLAY:
      $vars->flashvars['autostart'] = (isset($vars->flashvars['autostart'])) ? ($vars->flashvars['autostart']) : ($saved_settings['clip']['autostart'] ? 'true' : 'false');
      break;
  }
  return $vars->flashvars;
}

Explicación del código:

En el hook_swftools_methods se define los métodos que maneja el player: SWFTOOLS_FLV_DISPLAY para video. Como este player sólo maneja video, no definimos audio. Es importante observar el arreglo $flv_player la llave "shared_file", en donde se define la carpeta y el nombre del swf donde se encuentra el player.

En el hook_menu se define la ruta para modificar las configuraciones que se definieron en player.admin.inc. Se puede observar que en "file" se define la ruta de "player.admin.inc" y en "page arguments" se define "player_admin_settings" que fue la función definida en player.admin.inc

El último hook necesario es hook_swftools_flashvars que maneja las variables que se van a utilizar para pasarle al objeto flash declarado en el html y que posteriormente el player creado en flash va a utilizar. La variable "file_url" dentro de flashvars es la variable que debe tomar nuestro player en flash para buscar el archivo de video. "width", "height" y "autostart" son variables que las definidas por el usuario y se encuentran en el formulario de configuraciones definido en player.admin.inc

Su voto: Nada Promedio: 4.3 (3 votos)

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato

CAPTCHA
Esta pregunta es para probar si tu eres un humano y para prevenir spam en el sitio.
5 + 0 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.