diff options
Diffstat (limited to 'modules/video_zencoder/video_zencoder.module')
-rw-r--r-- | modules/video_zencoder/video_zencoder.module | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/modules/video_zencoder/video_zencoder.module b/modules/video_zencoder/video_zencoder.module new file mode 100644 index 0000000..93735c0 --- /dev/null +++ b/modules/video_zencoder/video_zencoder.module @@ -0,0 +1,142 @@ +<?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'])); +} + |