Drupal status page for more information.', array('@drupal-status-page' => url('admin/reports/status'))), 'error');
return;
}
$this->access_key = variable_get('video_zencoder_api_key', NULL);
$this->limit = variable_get('amazon_s3_limit', 5);
$this->bucket = variable_get('amazon_s3_bucket', '');
require_once $libfile;
$this->zencoder = new Services_Zencoder($this->access_key);
}
/**
* create transcoding job on Zencoder.com
*/
public function create($file) {
if ($this->zencoder == NULL) {
return FALSE;
}
// dimensions
$dimensions = explode('x', $file->dimensions);
// Notifications
$notifications = array(array(
'format' => 'json',
'url' => variable_get('video_zencoder_postback', url('postback/jobs', array('absolute' => TRUE))),
));
// S3 permissions
$public = !variable_get('amazon_s3_private', FALSE);
// Common output URL prefix
$output_url_prefix = 's3://'. $this->bucket .'/'. pathinfo($file->filepath, PATHINFO_DIRNAME) .'/converted/'. pathinfo($file->filepath, PATHINFO_FILENAME) .'.';
// construct the output array with the presets
$zc_outputs = array();
foreach ($file->presets as $name => $preset) {
$zc_output = array();
$quality = $preset['quality'];
$speed = $preset['speed'];
$upscale = $preset['upscale'];
$stretch = $preset['stretch'];
$frame_rate = $preset['frame_rate'];
$max_frame_rate = $preset['max_frame_rate'];
$keyframe_interval = $preset['keyframe_interval'];
$video_bitrate = $preset['video_bitrate'];
$bitrate_cap = $preset['bitrate_cap'];
$buffer_size = $preset['buffer_size'];
$h264_profile = $preset['h264_profile'];
$h264_level = $preset['h264_level'];
$skip_video = $preset['skip_video'];
$audio_codec = $preset['audio_codec'];
$audio_bitrate = $preset['audio_bitrate'];
$audio_channels = $preset['audio_channels'];
$audio_sample_rate = $preset['audio_sample_rate'];
$skip_audio = $preset['skip_audio'];
$start_clip = $preset['start_clip'];
$clip_length = $preset['clip_length'];
$zc_output['label'] = 'VIDEO_'. $name .'_'. $file->fid;
$zc_output['url'] = $output_url_prefix . $preset['extension'];
$zc_output['public'] = $public;
$zc_output['width'] = $dimensions[0];
$zc_output['height'] = $dimensions[1];
if (!empty($quality))
$zc_output['quality'] = $quality;
if (!empty($speed))
$zc_output['speed'] = $speed;
if (!empty($upscale))
$zc_output['upscale'] = $upscale;
if (!empty($frame_rate))
$zc_output['frame_rate'] = $frame_rate;
if (!empty($max_frame_rate))
$zc_output['max_frame_rate'] = $max_frame_rate;
if (!empty($keyframe_interval))
$zc_output['keyframe_interval'] = $keyframe_interval;
if (!empty($video_bitrate))
$zc_output['video_bitrate'] = $video_bitrate;
if (!empty($bitrate_cap))
$zc_output['bitrate_cap'] = $bitrate_cap;
if (!empty($buffer_size))
$zc_output['buffer_size'] = $buffer_size;
if (!empty($h264_profile))
$zc_output['h264_profile'] = $h264_profile;
if (!empty($h264_level))
$zc_output['h264_level'] = $h264_level;
if (!empty($skip_video))
$zc_output['skip_video'] = $skip_video;
if (!empty($audio_codec))
$zc_output['audio_codec'] = $audio_codec;
if (!empty($audio_bitrate))
$zc_output['audio_bitrate'] = $audio_bitrate;
if (!empty($audio_channels))
$zc_output['audio_channels'] = $audio_channels;
if (!empty($audio_sample_rate))
$zc_output['audio_sample_rate'] = $audio_sample_rate;
if (!empty($skip_audio))
$zc_output['skip_audio'] = $skip_audio;
if (!empty($start_clip))
$zc_output['start_clip'] = $start_clip;
if (!empty($clip_length))
$zc_output['clip_length'] = $clip_length;
//notifications
$zc_output['notifications'] = $notifications;
$zc_outputs[] = $zc_output;
}
// Add thumbnails
if (empty($zc_outputs)) $zc_outputs[0] = array();
$video_thumb_path = variable_get('video_thumb_path', 'video_thumbs');
$final_thumb_path = file_directory_path() .'/'. $video_thumb_path .'/'. $file->fid;
$zc_outputs[0]['thumbnails'] = array(
'number' => intval(variable_get('video_thumbs', 5)),
'size' => variable_get('video_thumbs_size', '160x120'),
'base_url' => 's3://'. $this->bucket .'/'. $final_thumb_path,
'prefix' => $file->fid,
);
$encoding_job_json = array(
'api_key' => $this->access_key,
'input' => 's3://'. $this->bucket .'/'. $file->filepath,
'outputs' => $zc_outputs,
);
try {
return $this->zencoder->jobs->create($encoding_job_json);
}
catch (Services_Zencoder_Exception $e) {
watchdog('zencoder', 'Zencoder reports errors while converting %file:
!errorlist', array('%file' => $file->filename, '!errorlist' => theme('item_list', $e->getErrors())), WATCHDOG_ERROR);
return FALSE;
}
}
/**
* Create Zencoder user account
*/
public function create_user($email) {
if ($this->zencoder == NULL) {
return FALSE;
}
try {
// $result is Services_Zencoder_Account
$result = $this->zencoder->accounts->create(array(
'terms_of_service' => '1',
'email' => $email,
'affiliate_code' => 'drupal-video',
));
$params = array(
'email' => $email,
'api_key' => $result->api_key,
'password' => $result->password,
);
variable_set('video_zencoder_api_key', $result->api_key);
$message = drupal_mail('video_zencoder', 'video_zencoder', $email, language_default(), $params);
if (!$message['result']) {
drupal_set_message(t('Unable to send e-mail!. Your Zencoder Details are as below.
API Key : !api_key
Password : !password
', array('!api_key' => $results['api_key'], '!password' => $results['password'])), 'status');
}
else {
drupal_set_message(t('Your account has been created and is ready to start processing on Zencoder'));
}
return TRUE;
}
catch (Services_Zencoder_Exception $e) {
$errors = '';
foreach ($e->getErrors() as $error) {
if ($error == 'Email has already been taken') {
drupal_set_message(t('Your account already exists on Zencoder. So !login to here and enter API key below.', array('!login' => l(t('login'), 'https://app.zencoder.com/session/new'))));
variable_set('video_zencoder_api_key', 'Please enter your API Key');
return TRUE;
}
$errors .= $error;
}
return $errors;
}
}
}