aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/apiclient.inc134
-rw-r--r--includes/common.inc423
2 files changed, 557 insertions, 0 deletions
diff --git a/includes/apiclient.inc b/includes/apiclient.inc
new file mode 100644
index 0000000..4caad24
--- /dev/null
+++ b/includes/apiclient.inc
@@ -0,0 +1,134 @@
+<?php
+/**
+ * @file
+ * Some functions for using video hosting providers api (Youtube, Google Video, etc..)
+ * Part of this code has been inspired by the video_cck module and adapted
+ * for the video module by jyamada1
+ *
+ * @author Fabio Varesano <fvaresano at yahoo dot it>
+ * porting to Drupal 6
+ * @author Heshan Wanigasooriya <heshan at heidisoft.com><heshanmw@gmail.com>
+ * @todo
+ */
+
+
+/**
+* When an include file requires to read an xml to receive information, such as for thumbnails,
+* this script can be used to request the xml and return it as an array.
+* Note that this is a modified function from the flickr.module, made to handle this type of
+* call more generically. also, i suspect it could be done easier (and more quickly) in php 5.
+* @param $provider
+* the string of the third party provider, such as 'youtube' or 'google'
+* @param $url
+* the url for the xml request
+* @param $args
+* an array of args to pass to the xml url
+* @param $cacheable
+* optional; if true, the result of this xml request will be cached. good to play nice w/
+* the third party folks so they don't stop providing service to your site...
+* @return
+* the xml results returned as an array
+*/
+function _video_apiclient_request_xml($provider, $url, $args = array(), $cacheable = true) {
+ ksort($args);
+
+ // build an argument hash that we'll use for the cache id and api signing
+ $arghash = $provider . ':';
+ foreach($args as $k => $v){
+ $arghash .= $k . $v;
+ }
+
+ // build the url
+ foreach ($args as $k => $v){
+ $encoded_params[] = urlencode($k).'='.urlencode($v);
+ }
+ $url .= '?'. implode('&', $encoded_params);
+
+ // if it's a cachable request, try to load a cached value
+ if ($cacheable) {
+ if ($cache = cache_get($arghash, 'cache')) {
+ return unserialize($cache->data);
+ }
+ }
+
+ // connect and fetch a value
+ $result = drupal_http_request($url);
+
+ if ($result->code == 200) {
+ $parser = drupal_xml_parser_create($result->data);
+ $vals = array();
+ $index = array();
+ xml_parse_into_struct($parser, $result->data, $vals, $index);
+ xml_parser_free($parser);
+
+ $params = array();
+ $level = array();
+ $start_level = 1;
+ foreach ($vals as $xml_elem) {
+ if ($xml_elem['type'] == 'open') {
+ if (array_key_exists('attributes',$xml_elem)) {
+ list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
+ } else {
+ $level[$xml_elem['level']] = $xml_elem['tag'];
+ }
+ }
+ if ($xml_elem['type'] == 'complete') {
+ $php_stmt = '$params';
+ while($start_level < $xml_elem['level']) {
+ $php_stmt .= '[$level['.$start_level.']]';
+ $start_level ++;
+ }
+ $php_stmt .= '[$xml_elem[\'tag\']][] = $xml_elem[\'value\'];';
+ eval($php_stmt);
+ $start_level--;
+ }
+ }
+
+ // save a cacheable result for future use
+ if ($cacheable) {
+ cache_set($arghash, 'cache', time() + 3600, serialize($params));
+ }
+ return $params;
+ }
+ return array();
+}
+
+
+/**
+* Create a file object from thumbnail images from providers
+* to allow for automatic thumbnailing of videos from providers
+* @param $node
+* the video node being called
+* @return
+* a file object containing the thumbnail file
+*/
+/*
+function _video_apiclient_provider_auto_thumbnail($node) {
+ // get thumbnail url
+ if(_video_get_filetype($node->vidfile) == 'youtube') {
+ $thumbnail = _video_apiclient_youtube_thumbnail($node->vidfile);
+ }
+ else {
+ $thumbnail = _video_apiclient_google_thumbnail($node->vidfile);
+ }
+
+ // save image to temp directory for processing
+ $image = image_gd_open($thumbnail, 'jpeg');
+ $location = file_directory_temp() .'/'. $node->vidfile .'.jpg';
+ image_gd_close($image, $location, 'jpeg');
+
+
+ // get info and build a file object
+ $filepath = file_create_path($location, file_directory_temp());
+ $info = image_get_info($filepath);
+
+ $file = new stdClass();
+ $file->filepath = realpath($filepath);
+ $file->filename = basename($file->filepath);
+ $file->filesize = $info['file_size'];
+ $file->filemime = $info['mime_type'];
+
+ return $file;
+}
+*/
+
diff --git a/includes/common.inc b/includes/common.inc
new file mode 100644
index 0000000..221f27e
--- /dev/null
+++ b/includes/common.inc
@@ -0,0 +1,423 @@
+<?php
+
+/**
+ * @file
+ * Add some common functions for the various video types supported
+ *
+ * @author Fabio Varesano <fvaresano at yahoo dot it>
+ * porting to Drupal 6
+ * @author Heshan Wanigasooriya <heshan at heidisoft.com><heshanmw@gmail.com>
+ * @todo
+ */
+
+
+
+
+
+/**
+ * Get the object for the suitable player for the parameter resource
+*/
+function _video_common_get_player($node) {
+ switch (_video_get_filetype($node->vidfile)) {
+ case 'divx':
+ return theme('video_play_divx', $node);
+ case 'mov':
+ case 'mp4':
+ case '3gp':
+ case '3g2':
+ case 'mpg':
+ return theme('video_play_quicktime', $node);
+ case 'rm':
+ return theme('video_play_realmedia', $node);
+ case 'flv':
+ return theme('video_play_flash', $node);
+ case 'swf':
+ return theme('video_play_swf', $node);
+ case 'dir':
+ case 'dcr':
+ return theme('video_play_dcr', $node);
+ case 'asf':
+ case 'wmv':
+ case 'avi':
+ return theme('video_play_windowsmedia', $node);
+ case 'ogg':
+ return theme('video_play_ogg_theora', $node);
+ case 'youtube':
+ return theme('video_play_youtube', $node);
+ case 'googlevideo':
+ return theme('video_play_googlevideo', $node);
+ default:
+ drupal_set_message('Video type not supported', 'error');
+ break;
+ }
+}
+
+/*********************************************************************
+ * Themeable functions for playing videos. They print a page with a player embedded.
+ *********************************************************************/
+
+ /**
+ * Play videos from in FLV Flash video format
+ *
+ * @param $node
+ * object with node information
+ *
+ * @return
+ * string of content to display
+ */
+function theme_video_play_flash($node) {
+ $loader_location = variable_get('video_flvplayerloader', 'FlowPlayer.swf');
+
+ $url = _video_get_fileurl($node->vidfile);
+ $file = basename($url);
+ $base_url = substr($url, 0, strrpos($url, '/'));
+
+ $height = $node->video_scaled_y + 24; // add commands height
+
+ // this will be executed by not Internet Explorer browsers
+ $output = '<!--[if !IE]> <-->
+<object type="application/x-shockwave-flash" width="'. $node->video_scaled_x .'" height="'. $height .'"
+data="'. url() . check_plain($loader_location) .'">
+<!--> <![endif]-->' . "\n";
+
+ // this will be executed by Internet Explorer
+ $output .= '<!--[if IE]>
+<object type="application/x-shockwave-flash" width="'. $node->video_scaled_x .'" height="'. $height .'"
+classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
+<![endif]-->' . "\n";
+
+ // params will be passed to both IE or not IE browsers
+ $output .= '<param name="movie" value="' . url() . check_plain($loader_location) . '" />
+ <param name="wmode" value="transparent" />
+ <param name="allowScriptAccess" value="sameDomain" />
+ <param name="quality" value="high" />
+ <param name="flashvars" value="config={baseURL:\''. $base_url .'\',videoFile:\''. $file .'\',autoPlay:true,bufferLength:5}" />' . "\n"
+ . _video_get_parameters($node) .
+ '<p>'. t('Your browser is not able to display this multimedia content.') .'</p>
+</object>';
+
+ $output = theme('video_format_play', $output, t('http://www.macromedia.com/go/getflashplayer'),
+ t('Link to Macromedia Flash Player Download Page'),
+ t('Download latest Flash Player'));
+ return $output;
+}
+
+/**
+ * Play Flash .swf files.
+ *
+ * @param $node
+ * object with node information
+ *
+ * @return
+ * string of content to display
+ */
+function theme_video_play_swf($node) {
+
+ $url = _video_get_fileurl($node->vidfile);
+
+ // this will be executed by not Internet Explorer browsers
+ $output = '<!--[if !IE]> <-->
+<object type="application/x-shockwave-flash" width="'. $node->video_scaled_x .'" height="'. $node->video_scaled_y .'"
+data="'. $url .'">
+<!--> <![endif]-->' . "\n";
+
+ // this will be executed by Internet Explorer
+ $output .= '<!--[if IE]>
+<object type="application/x-shockwave-flash" width="'. $node->video_scaled_x .'" height="'. $node->video_scaled_y .'"
+classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
+<![endif]-->' . "\n";
+
+ // params will be passed to both IE or not IE browsers
+ $output .= '<param name="movie" value="'. $url .'" />'. "\n" .
+ '<param name="wmode" value="transparent" />' . "\n"
+ . _video_get_parameters($node) .
+ '<p>'. t('Your browser is not able to display this multimedia content.') .'</p>
+</object>';
+
+ $output = theme('video_format_play', $output, t('http://www.macromedia.com/go/getflashplayer'), t('Link to Flash player download'), t('Download the latest Flash player'));
+ return $output;
+}
+
+
+
+/**
+ * Play Director .dcr/.dir files.
+ *
+ * @param $node
+ * object with node information
+ *
+ * @return
+ * string of content to display
+ */
+
+function theme_video_play_dcr($node) {
+
+ $url = _video_get_fileurl($node->vidfile);
+
+ // this will be executed by not Internet Explorer browsers
+ $output = '<!--[if !IE]> <-->
+<object type="application/x-director" width="'. $node->video_scaled_x .'" height="'. $node->video_scaled_y .'"
+data="'. $url .'">
+<!--> <![endif]-->' . "\n";
+
+ // this will be executed by Internet Explorer
+ $output .= '<!--[if IE]>
+<object type="application/x-director" width="'. $node->video_scaled_x .'" height="'. $node->video_scaled_y .'"
+classid="clsid:166B1BCA-3F9C-11CF-8075-444553540000"
+codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=10,0,0,0">
+<![endif]-->' . "\n";
+
+// params will be passed to both IE or not IE browsers
+ $output .= '<param name="src" value="'. $url .'" />' . "\n"
+ . _video_get_parameters($node) .
+ '<p>'. t('Your browser is not able to display this multimedia content.') .'</p>
+</object>';
+
+ $output = theme('video_format_play', $output, t('http://www.macromedia.com/shockwave/download/'),
+ t('Link to Macromedia Shockwave Player Download Page'),
+ t('Download latest Shockwave Player'));
+ return $output;
+}
+
+/**
+ * Play videos from in DivX format
+ *
+ * @see http://developer.apple.com/internet/ieembedprep.html
+ * @param $node
+ * object with node information
+ *
+ * @return
+ * string of content to display
+ */
+function theme_video_play_divx($node) {
+ //Increase the height to accommodate the player controls on the bottom.
+ $height = $node->video_scaled_y + 20;
+
+ $url = _video_get_fileurl($node->vidfile);
+
+ $output = '<!-- [if IE] -->
+<object classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616" width="'.$node->video_scaled_x.'" height="'.$height.'" codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab">
+<!--> <![endif]-->'. "\n";
+ // this will be executed by not Internet Explorer browsers
+ $output = '<!-- [if !IE] -->
+<object type="video/divx" data="'.$url.'" width="'.$node->video_scaled_x.'" height="'.$height.'" mode="zero">
+<!--> <![endif]-->'."\n";
+
+ $output .= '<param name="src" value="'.$url.'"/>'."\n";
+ $output .= '<param name="mode" value="zero"/>'."\n";
+ $output .= '</object>';
+ $output = theme('video_format_play', $output,t('http://www.divx.com/divx/webplayer/'),
+ t('Link to DivX Download Page'),
+ t('Download latest DivX Web Player'));
+ return $output;
+}
+
+/**
+ * Play videos from in Quicktime format
+ *
+ * @see http://developer.apple.com/internet/ieembedprep.html
+ * @param $node
+ * object with node information
+ *
+ * @return
+ * string of content to display
+ */
+function theme_video_play_quicktime($node) {
+ //Increase the height to accommodate the player controls on the bottom.
+ $height = $node->video_scaled_y + 16;
+
+ $url = _video_get_fileurl($node->vidfile);
+
+
+ // this will be executed by not Internet Explorer browsers
+ $output = '<!--[if !IE]> <-->
+<object type="video/quicktime" width="'. $node->video_scaled_x .'" height="'. $height .'"
+data="'. $url .'">
+<!--> <![endif]-->' . "\n";
+
+ // this will be executed by Internet Explorer
+ $output .= '<!--[if IE]>
+<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" width="'. $node->video_scaled_x .'" height="'. $height .'" scale="tofit" >
+<![endif]-->' . "\n";
+
+ // params will be passed to both IE or not IE browsers
+ $output .= '<param name="src" value="'. $url .'" />
+ <param name="AUTOPLAY" value="true" />
+ <param name="KIOSKMODE" value="false" />' . "\n"
+ . _video_get_parameters($node) .
+ '<p>'. t('Your browser is not able to display this multimedia content.') .'</p>
+</object>'; // only one </object> needed becouse only one opening tag has been parsed by browsers
+
+
+ /*
+ $output = '<script language="JavaScript" type="text/javascript">';
+ $output .= "InsertQuicktimeVideo('{$node->vidfile}','$height','{$node->video_scaled_x}');";
+ $output .= '</script>';
+ */
+
+
+ $output = theme('video_format_play', $output, t('http://www.apple.com/quicktime/download'),
+ t('Link to QuickTime Download Page'),
+ t('Download latest Quicktime Player'));
+ return $output;
+}
+
+/**
+ * Play videos from in Realmedia format
+ *
+ * @param $node
+ * object with node information
+ *
+ * @return
+ * string of content to display
+ */
+function theme_video_play_realmedia($node) {
+ // Real's embeded player includes the controls
+ // in the height
+ $node->video_scaled_y += 40;
+
+ $url = _video_get_fileurl($node->vidfile);
+
+ // this will be executed by not Internet Explorer browsers
+ $output = '<!--[if !IE]> <-->
+<object type="audio/x-pn-realaudio-plugin" width="'. $node->video_scaled_x .'" height="'. $node->video_scaled_y .'"
+data="'. $url .'">
+<!--> <![endif]-->' . "\n";
+
+ // this will be executed by Internet Explorer
+ $output .= '<!--[if IE]>
+<object type="audio/x-pn-realaudio-plugin" width="'. $node->video_scaled_x .'" height="'. $node->video_scaled_y .'"
+classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" >
+<![endif]-->' . "\n";
+
+ // params will be passed to both IE or not IE browsers
+ $output .= '<param name="src" value="'. $url .'" />
+ <param name="_ExtentX" value="7276" />
+ <param name="" value="3307" />
+ <param name="AUTOSTART" value="true" />
+ <param name="SHUFFLE" value="0" />
+ <param name="PREFETCH" value="0" />
+ <param name="NOLABELS" value="0" />
+ <param name="CONTROLS" value="All" />
+ <param name="CONSOLE" value="Clip1" />
+ <param name="LOOP" value="0" />
+ <param name="NUMLOOP" value="0" />
+ <param name="CENTER" value="0" />
+ <param name="MAINTAINASPECT" value="1" />
+ <param name="BACKGROUNDCOLOR" value="#000000" />'
+ . _video_get_parameters($node) .
+ '<p>'. t('Your browser is not able to display this multimedia content.') .'</p>
+</object>'; // only one </object> needed becouse only one opening tag has been parsed by browsers
+
+
+ $output = theme('video_format_play', $output, t('http://www.real.com/'),
+ t('Link to Real'),
+ t('Download latest Realmedia Player'));
+ return $output;
+}
+
+/**
+ * Play videos from in WindowsMediaVideo format
+ *
+ * @param $node
+ * object with node information
+ *
+ * @return
+ * string of content to display
+ */
+function theme_video_play_windowsmedia($node) {
+ // Windows Media's embeded player includes the controls in the height
+ $node->video_scaled_y += 68;
+ $url = _video_get_fileurl($node->vidfile);
+
+ // this will be executed by not Internet Explorer browsers
+ $output = '<!--[if !IE]> <-->
+<object type="application/x-mplayer2" width="'. $node->video_scaled_x .'" height="'. $node->video_scaled_y .'"
+data="'. $url .'">
+<!--> <![endif]-->' . "\n";
+
+ // this will be executed by Internet Explorer
+ $output .= '<!--[if IE]>
+<object type="application/x-oleobject" width="'. $node->video_scaled_x .'" height="'. $node->video_scaled_y .'"
+classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" >
+<![endif]-->' . "\n";
+
+ // params will be passed to both IE or not IE browsers
+ $output .= '<param name="src" value="'. $url .'" />
+ <param name="URL" value="'.$url.'" />
+ <param name="animationatStart" value="true" />
+ <param name="transparentatStart" value="true" />
+ <param name="autoStart" value="true" />
+ <param name="showControls" value="true" />
+ <param name="loop" value="true" />'
+ . _video_get_parameters($node) .
+ '<p>'. t('Your browser is not able to display this multimedia content.') .'</p>
+</object>'; // only one </object> needed becouse only one opening tag has been parsed by browsers
+
+
+ $output = theme('video_format_play', $output, t('http://windowsupdate.microsoft.com/'),
+ t('Link to Windows Update'),
+ t('Download latest Windows Media Player'));
+ return $output;
+}
+
+
+
+
+/**
+ * Play Ogg Theora videos with Cortado Applet
+ *
+ * @param $node
+ * object with node information
+ *
+ * @return
+ * string of content to display
+ */
+function theme_video_play_ogg_theora($node) {
+ global $base_url;
+ $cortado_location = variable_get('video_cortado', $base_url . '/cortado.jar');
+ $url = _video_get_fileurl($node->vidfile);
+
+ $width = ($node->video_scaled_x ? $node->video_scaled_x : '425');
+ $height = ($node->video_scaled_y ? $node->video_scaled_y : '350');
+
+ $output = '
+ <!--[if !IE]>-->
+ <object classid="java:com.fluendo.player.Cortado.class"
+ type="application/x-java-applet"
+ archive="' . $cortado_location . '"
+ width="' . $width . '" height="' . $height . '" >
+ <!--<![endif]-->
+ <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
+ codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"
+ width="' . $width . '" height="' . $height . '" >
+ <param name="code" value="com.fluendo.player.Cortado" />
+ <!--[if !IE]>-->
+ </object>
+ <!--<![endif]-->
+ <!-- IE and Konqueror browser need the archive param -->
+ <param name="archive" value="' . $cortado_location . '" />
+ <param name="url" value="' . $url . '"/>
+ <param name="local" value="false" />
+ <param name="keepaspect" value="true" />
+ <param name="video" value="true" />
+ <param name="audio" value="true" />
+ <param name="seekable" value="true" />
+ <param name="duration" value="' . $node->playtime_seconds . '" />
+ <param name="bufferSize" value="200" />
+ <strong>
+ This browser does not have a Java Plug-in.<br />
+ <a href="http://java.com/download/">
+ Get the latest Java Plug-in here.
+ </a>
+ </strong>
+ </object>
+ ';
+
+ $output = theme('video_format_play', $output,
+ t('http://java.com/download/'), t('Link to java.com'), t('Download Java'));
+ return $output;
+}
+