You are here

video_zencoder.module in Video 7

Provides wrapper functions for the s3 amazon webservices. @todo

File

modules/video_zencoder/video_zencoder.module
View source
<?php

/**
 * @file
 * Provides wrapper functions for the s3 amazon webservices.
 * @todo
 * - cleand up the _video_zencoder_postback_jobs() function
 * - Add to select random thumbnails to the download image.
 */

/*
 * Implementation of hook_cron().
 */
defined('VIDEO_RENDERING_PENDING') || define('VIDEO_RENDERING_PENDING', 1);
defined('VIDEO_RENDERING_ACTIVE') || define('VIDEO_RENDERING_ACTIVE', 5);
defined('VIDEO_RENDERING_COMPLETE') || define('VIDEO_RENDERING_COMPLETE', 10);
defined('VIDEO_RENDERING_FAILED') || define('VIDEO_RENDERING_FAILED', 20);

/**
 * Implementation of hook_menu().
 */
function video_zencoder_menu() {
  $items = array();
  $items['postback/jobs'] = array(
    //    'title' => 'Video',
    //    'description' => 'Configure different aspects of the video module and its plugins',
    'page callback' => '_video_zencoder_postback_jobs',
    'access arguments' => array(
      'zencoder postback',
    ),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * This will handle Zencoder postback once video conversion is completed
 *
 */
function _video_zencoder_postback_jobs() {

  // get JSON post data
  $data = file_get_contents("php://input");
  watchdog('zencoder', t('Postback received from the Zencoder Transcoding servers.' . serialize($data)));

  // get the file object by zenocder job id
  $video = json_decode($data);

  //  print_r($zc);
  //  $zc_job_id = $video->job->id;
  $zc_job_state = trim($video->job->state);

  //  $zc_output_id = $video->output->id;
  $zc_output_state = trim($video->output->state);

  //  $zc_output_url = $video->output->url;
  if ($zc_output_state == 'finished' && $zc_job_state == 'finished') {
    $video->output->state = VIDEO_RENDERING_COMPLETE;
  }
  if ($zc_output_state == 'failed' || $zc_job_state == 'failed') {
    $video->output->state = VIDEO_RENDERING_FAILED;
  }
  if ($zc_job_state == 'processing') {
    watchdog('zencoder', t('Job !jobid is processing.', array(
      '!jobid' => $video->job->id,
    )));
    return;
  }

  // update the Zencoder Job
  module_load_include('inc', 'video_zencoder', '/includes/transcoder/video_zencoder');
  $zc = new video_zencoder();

  // Lets run delete.
  $videodb = $zc
    ->load_job_by_jobid($video->job->id);
  if ($video->output->state == VIDEO_RENDERING_COMPLETE) {
    $nid = $videodb->nid;
    $vid = $videodb->vid;
    $fid = $videodb->fid;
    $zc
      ->change_status($vid, VIDEO_RENDERING_COMPLETE);

    // update the thumbanils
    // this will update the default thumbnails, if user want to select another one then they wil need to edit the node
    // Setup our thmbnail path.
    $video_thumb_path = variable_get('video_thumb_path', 'videos/thumbnails');
    $final_thumb_path = file_default_scheme() . '://' . $video_thumb_path . '/' . $fid;

    // Ensure the destination directory exists and is writable.
    file_prepare_directory($final_thumb_path, FILE_CREATE_DIRECTORY);

    //    $i = rand(0, (variable_get('no_of_video_thumbs', 5) - 1));
    $filename = $fid . '_' . sprintf("%04d", 1) . '.png';
    $thumbfile = $final_thumb_path . '/' . $filename;

    // s3
    libraries_load('awssdk');
    $key = variable_get('media_amazon_key', '');
    $secret_key = variable_get('media_amazon_key_secret', '');
    $bucket = variable_get('media_amazon_s3_bucket', '');
    $s3 = new AmazonS3($key, $secret_key);
    if ($s3
      ->get_object_metadata($bucket, $video_thumb_path . '/' . $fid . '/' . $filename)) {
      $response = $s3
        ->get_object($bucket, $video_thumb_path . '/' . $fid . '/' . $filename, array(
        'fileDownload' => drupal_realpath($thumbfile),
      ));
      $default = $final_thumb_path . '/no-thumb.png';
      @unlink(drupal_realpath($default));
      if ($response->status == 200) {
        watchdog('zencoder', t('Successfully downloaded the thumbnails file and replaced the default image.'));
      }
      else {
        watchdog('zencoder', t('Download thumbanils files is failed.'), array(), WATCHDOG_ERROR);
      }
    }
    watchdog('zencoder', t('No thumbanils found.', array(
      '!id' => $video->job->id,
      '!states' => $zc_output_state,
    )));
  }
  else {
    if ($video->output->state == VIDEO_RENDERING_FAILED) {

      //    echo 'working failed';
      $zc
        ->change_status($vid, VIDEO_RENDERING_FAILED);
      watchdog('zencoder', t('Zencoder job failed converting videos, please login to zencoder web and check the erros.', array()), NULL, WATCHDOG_ERROR);
    }
    else {
      echo 'zencoder postback is working';
    }
  }
}

/**
 * Implementation of hook_mail().
 */
function video_zencoder_mail($key, &$message, $params) {
  $language = $message['language'];
  $message['subject'] .= 'Zencoder Registration Details for Drupal Video';
  $message['body'][] = video_zencoder_mail_default($params);
}
function video_zencoder_mail_default($params) {
  return t('Welcome to Zencoder for Drupal
-------------------------------

Your account has been created and is ready to start processing.

Your account details are as below.

API Key : %api_key
Password : %password

* Login URL: https://app.zencoder.com/login

You can get help at the following places:

* Our chat room at http://zencoder.com/chat
* Customer forums at https://help.zencoder.com/forums
* The help desk at https://help.zencoder.com/tickets/new

We\'d love to hear from you. Let us know how we can help. Thanks!

Thanks,
-Zencoder for Drupal Team', array(
    '%api_key' => $params['api_key'],
    '%password' => $params['password'],
  ));
}

Functions

Namesort descending Description
video_zencoder_mail Implementation of hook_mail().
video_zencoder_mail_default
video_zencoder_menu Implementation of hook_menu().
_video_zencoder_postback_jobs This will handle Zencoder postback once video conversion is completed