You are here

function _video_zencoder_postback_jobs in Video 7

Same name and namespace in other branches
  1. 6.5 plugins/video_zencoder/video_zencoder.module \_video_zencoder_postback_jobs()
  2. 6.4 plugins/video_zencoder/video_zencoder.module \_video_zencoder_postback_jobs()

This will handle Zencoder postback once video conversion is completed

1 string reference to '_video_zencoder_postback_jobs'
video_zencoder_menu in modules/video_zencoder/video_zencoder.module
Implementation of hook_menu().

File

modules/video_zencoder/video_zencoder.module, line 41
Provides wrapper functions for the s3 amazon webservices. @todo

Code

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';
    }
  }
}