Allowing flash (flv) files to be stored and embedded in a coppermine gallery
April 26th, 2008
I have several websites for which I am responsible. On one site, I am building a new gallery site for storing pictures as well as sound and video clips. There are several good options for building a gallery site, and I have used more than one with success. For the site in question, I decided to use Coppermine, which is powerful, configurable, open source, and freely licensed using the GNU GPL.
I ran into a little snag that took some work to figure out. To help me remember what I did, I am blogging it here. Maybe someone else will find it useful as well.
Coppermine makes it very easy to store, embed and play lots of media files and formats. That is awesome. I found one that is not supported…the now common flv, or flash video. In fact, by default you can’t even upload a file with an flv extension. Bummer. Off to Google I ran.
I found several sites with ideas and info, but one was more useful than others. Even it required lots of reading and page turning. I decided to put all the info in one page for my easy reference, but the Coppermine Gallery forum deserves a link and the credit for this method. I’m just posting it, people there came up with it. That is an old thread, though, and things have changed since the first post. I had to read the whole thing to figure out what needed to happen to make this work, and that is the reason for this post, rather than just a bookmark in my personal web browser. Okay, here are the steps I took that got this working for me.
Note: get your site up and running, with the theme work complete before doing this. That will make your life a little easier.
1. Download and install the filetype editor MOD discussed here. The mod is included in the cpg1.4.x_plugin_pack_v3 package available on the SourceForge download page for Coppermine. I happened to upload all of the plugins to my website, and sorted them from there, ending up using only a handful. That was easier for me. You do it how you want to.
2. Run the plugin and make a new filetype using the following data; “flv - application/x-shockwave-flash - movie - Flash player”
3. Download the FLV Player from this site. Extract the archive locally and upload mediaplayer.swf and swfobject.js to your Coppermine site’s root directory.
4. I added the following code to my theme’s theme.php file, before the function theme_html_img_nav_menu().
//** added by matthew to try to get flv play to work **
function theme_html_picture()
{
global $CONFIG, $CURRENT_PIC_DATA, $CURRENT_ALBUM_DATA, $USER;
global $album, $comment_date_fmt, $template_display_media;
global $lang_display_image_php, $lang_picinfo;
$pid = $CURRENT_PIC_DATA['pid'];
$pic_title = ”;
if (!isset($USER['liv']) || !is_array($USER['liv'])) {
$USER['liv'] = array();
}
// Add 1 to hit counter
if (!USER_IS_ADMIN && !in_array($pid, $USER['liv']) && isset($_COOKIE[$CONFIG['cookie_name'] . ‘_data’])) {
add_hit($pid);
if (count($USER['liv']) > 4) array_shift($USER['liv']);
array_push($USER['liv'], $pid);
}
if($CONFIG['thumb_use']==’ht’ && $CURRENT_PIC_DATA['pheight'] > $CONFIG['picture_width'] ){ // The wierd comparision is because only picture_width is stored
$condition = true;
}elseif($CONFIG['thumb_use']==’wd’ && $CURRENT_PIC_DATA['pwidth'] > $CONFIG['picture_width']){
$condition = true;
}elseif($CONFIG['thumb_use']==’any’ && max($CURRENT_PIC_DATA['pwidth'], $CURRENT_PIC_DATA['pheight']) > $CONFIG['picture_width']){
$condition = true;
}else{
$condition = false;
}
if ($CURRENT_PIC_DATA['title'] != ”) {
$pic_title .= $CURRENT_PIC_DATA['title'] . “\n”;
}
if ($CURRENT_PIC_DATA['caption'] != ”) {
$pic_title .= $CURRENT_PIC_DATA['caption'] . “\n”;
}
if ($CURRENT_PIC_DATA['keywords'] != ”) {
$pic_title .= $lang_picinfo['Keywords'] . “: ” . $CURRENT_PIC_DATA['keywords'];
}
if (!$CURRENT_PIC_DATA['title'] && !$CURRENT_PIC_DATA['caption']) {
template_extract_block($template_display_media, ‘img_desc’);
} else {
if (!$CURRENT_PIC_DATA['title']) {
template_extract_block($template_display_media, ‘title’);
}
if (!$CURRENT_PIC_DATA['caption']) {
template_extract_block($template_display_media, ‘caption’);
}
}
$CURRENT_PIC_DATA['menu'] = html_picture_menu(); //((USER_ADMIN_MODE && $CURRENT_ALBUM_DATA['category'] == FIRST_USER_CAT + USER_ID) || ($CONFIG['users_can_edit_pics'] && $CURRENT_PIC_DATA['owner_id'] == USER_ID && USER_ID != 0) || GALLERY_ADMIN_MODE) ? html_picture_menu($pid) : ”;
if ($CONFIG['make_intermediate'] && $condition ) {
$picture_url = get_pic_url($CURRENT_PIC_DATA, ‘normal’);
} else {
$picture_url = get_pic_url($CURRENT_PIC_DATA, ‘fullsize’);
}
$image_size = compute_img_size($CURRENT_PIC_DATA['pwidth'], $CURRENT_PIC_DATA['pheight'], $CONFIG['picture_width']);
$pic_title = ”;
$mime_content = cpg_get_type($CURRENT_PIC_DATA['filename']);
if ($mime_content['content']==’movie’ || $mime_content['content']==’audio’) {
if ($CURRENT_PIC_DATA['pwidth']==0 || $CURRENT_PIC_DATA['pheight']==0) {
$CURRENT_PIC_DATA['pwidth'] = 320; // Default width
// Set default height; if file is a movie
if ($mime_content['content']==’movie’) {
$CURRENT_PIC_DATA['pheight'] = 240; // Default height
}
}
$ctrl_offset['mov']=15;
$ctrl_offset['wmv']=45;
$ctrl_offset['swf']=0;
$ctrl_offset['rm']=0;
$ctrl_offset_default=45;
$ctrl_height = (isset($ctrl_offset[$mime_content['extension']]))?($ctrl_offset[$mime_content['extension']]):$ctrl_offset_default;
$image_size['whole']=’width=”‘.$CURRENT_PIC_DATA['pwidth'].’” height=”‘.($CURRENT_PIC_DATA['pheight']+$ctrl_height).’”‘;
}
if ($mime_content['content']==’image’) {
if (isset($image_size['reduced'])) {
$winsizeX = $CURRENT_PIC_DATA['pwidth']+5; //the +’s are the mysterious FF and IE paddings
$winsizeY = $CURRENT_PIC_DATA['pheight']+3; //the +’s are the mysterious FF and IE paddings
$pic_html = “<a href=\”javascript:;\” onclick=\”MM_openBrWindow(’displayimage.php?pid=$pid&fullsize=1′,’” . uniqid(rand()) . “‘,’scrollbars=yes,toolbar=no,status=no,resizable=yes,width=$winsizeX,height=$winsizeY’)\”>”;
$pic_title = $lang_display_image_php['view_fs'] . “\n==============\n” . $pic_title;
$pic_html .= “<img src=\”" . $picture_url . “\” class=\”image\” border=\”0\” alt=\”{$lang_display_image_php['view_fs']}\” /><br />”;
$pic_html .= “</a>\n”;
} else {
$pic_html = “<img src=\”" . $picture_url . “\” {$image_size['geom']} class=\”image\” border=\”0\” alt=\”\” /><br />\n”;
}
} elseif ($mime_content['content']==’document’) {
$pic_thumb_url = get_pic_url($CURRENT_PIC_DATA,’thumb’);
$pic_html = “<a href=\”{$picture_url}\” target=\”_blank\” class=\”document_link\”><img src=\”".$pic_thumb_url.”\” border=\”0\” class=\”image\” /></a>\n<br />”;
} else {
$autostart = ($CONFIG['media_autostart']) ? (’true’):(’false’);
$players['WMP'] = array(’id’ => ‘MediaPlayer’,
‘clsid’ => ‘classid=”clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6″ ‘,
‘codebase’ => ‘codebase=”http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701″ ‘,
‘mime’ => ‘type=”application/x-mplayer2″ ‘,
);
$players['RMP'] = array(’id’ => ‘RealPlayer’,
‘clsid’ => ‘classid=”clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA” ‘,
‘codebase’ => ”,
‘mime’ => ‘type=”audio/x-pn-realaudio-plugin” ‘
);
$players['QT'] = array(’id’ => ‘QuickTime’,
‘clsid’ => ‘classid=”clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B” ‘,
‘codebase’ => ‘codebase=”http://www.apple.com/qtactivex/qtplugin.cab” ‘,
‘mime’ => ‘type=”video/x-quicktime” ‘
);
$players['SWF'] = array(’id’ => ‘SWFlash’,
‘clsid’ => ‘ classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ ‘,
‘codebase’ => ‘codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0″ ‘,
‘mime’ => ‘type=”application/x-shockwave-flash” ‘
);
$players['UNK'] = array(’id’ => ‘DefaultPlayer’,
‘clsid’ => ”,
‘codebase’ => ”,
‘mime’ => ”
);
if (isset($_COOKIE[$CONFIG['cookie_name'].’_’.$mime_content['extension'].’player’])) {
$user_player = $_COOKIE[$CONFIG['cookie_name'].’_’.$mime_content['extension'].’player’];
} else {
$user_player = $mime_content['player'];
}
// There isn’t a player selected or user wants client-side control
if (!$user_player) {
$user_player = ‘UNK’;
}
if ($mime_content['content']==’movie’ && $mime_content['mime']==’application/x-shockwave-flash’) {
if ($CURRENT_PIC_DATA['pwidth']==0 || $CURRENT_PIC_DATA['pheight']==0) {
$CURRENT_PIC_DATA['pwidth'] = 640; // Default width
$CURRENT_PIC_DATA['pheight'] = 480; // Default height
}
$CURRENT_PIC_DATA['pwidth']-=26; // black bars on sides for me for some reason
$flv = $CONFIG['fullpath'] . $CURRENT_PIC_DATA['filepath'] . $CURRENT_PIC_DATA['filename'];
if($mime_content['extension']!=’flv’) {
$flvcheck = fopen($flv,”r”);
$flv=fgets($flvcheck);
fclose($flvcheck);
}
$exxvars=str_replace($CONFIG['thumb_pfx'], $CONFIG['normal_pfx'], get_pic_url($CURRENT_PIC_DATA,’thumb’));
if(!file_exists($exxvars)) $exxvars=get_pic_url($CURRENT_PIC_DATA,’thumb’);
$exxvars=”ℑ=”.$exxvars;
$pic_html = “<embed src=\”mediaplayer.swf\” width=’”.$CURRENT_PIC_DATA['pwidth'].”‘ height=’”.$CURRENT_PIC_DATA['pheight'].”‘ allowfullscreen=\”true\” allowscriptaccess=\”always\” type=\”application/x-shockwave-flash\” pluginspage=\”http://www.macromedia.com/go/getflashplayer\”
flashvars=\”file=$flv$exxvars\”></embed>”;
} else {
$player = $players[$user_player];
$pic_html = ‘<object id=”‘.$player['id'].’” ‘.$player['classid'].$player['codebase'].$player['mime'].$image_size['whole'].’>’;
$pic_html .= “<param name=\”autostart\” value=\”$autostart\” /><param name=\”src\” value=\”". $picture_url . “\” />”;
$pic_html .= ‘<embed ‘.$image_size['whole'].’ src=”‘. $picture_url . ‘” autostart=”‘.$autostart.’” ‘.$player['mime'].’></embed>’;
$pic_html .= “</object><br />\n”;
}
}
$CURRENT_PIC_DATA['html'] = $pic_html;
$CURRENT_PIC_DATA['header'] = ”;
$CURRENT_PIC_DATA['footer'] = ”;
$CURRENT_PIC_DATA = CPGPluginAPI::filter(’file_data’,$CURRENT_PIC_DATA);
$params = array(’{CELL_HEIGHT}’ => ‘100′,
‘{IMAGE}’ => $CURRENT_PIC_DATA['header'].$CURRENT_PIC_DATA['html'].$CURRENT_PIC_DATA['footer'],
‘{ADMIN_MENU}’ => $CURRENT_PIC_DATA['menu'],
‘{TITLE}’ => bb_decode($CURRENT_PIC_DATA['title']),
‘{CAPTION}’ => bb_decode($CURRENT_PIC_DATA['caption']),
);
return template_eval($template_display_media, $params);
}
//** end added by matthew **
I have not tried them, but I have read that there are some changes you can make to your theme’s template.html file that will allow you to change the size of the video on site. If I am successful doing so, I will add that info in a comment here. Otherwise, this is all I have done, and the site in question now allows me to upload flash video and play it in the same way as an mpg or mov.
Entry Filed under: General











11 Comments Add your own
1. matthew | April 26th, 2008 at 3:26 pm
Oh, I just realized, at some point in the process you will need to go through the site settings and set up the file size and type permissions and parameters. I would do that first, but really it doesn’t matter when you do it, just that it gets done somewhere in the process.
2. G.B. | April 28th, 2008 at 3:12 pm
Hello, 2 questions:
1. How do you add the code to OS X theme?
2. Can you clarify your comment, maybe edit the blog post?
3. matthew | April 28th, 2008 at 4:03 pm
I’ll do my best to answer.
1. I’ve never used that theme, so what I am about to suggest has not been tested. However, you should be able to put the code I included above near the top of the theme.php file, after the headers. I suggest trying it right before this line
// HTML template for sys_menu.2. What I am describing is a simple, but detailed process. Once Coppermine is installed on your site, go to the admin menu and click “config.” In the config area, look for the “files and thumbnails settings” and “files and thumbnails advanced settings” and adjust according to your server settings and personal taste/desires.
4. G.B. | April 28th, 2008 at 5:41 pm
I tried your recommendation but get an error message. Being not that proficient in PHP I am looking for some help:
Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in //themes/mac_ox_x/theme.php on line 59
Parse error: syntax error, unexpected T_STRING in //themes/mac_ox_x/theme.php on line 59
which is this line:
$pic_title .= $CURRENT_PIC_DATA['title'] . “\n”;
5. matthew | April 28th, 2008 at 5:59 pm
Can you confirm that it this function is shown like this in the file?
if ($CURRENT_PIC_DATA['title'] != ”) {$pic_title .= $CURRENT_PIC_DATA['title'] . “\n”;
}
If it is, then what is happening is there appears to be a character in the file’s title that the check is rejecting. Does the file that you are attempting to use have a \ in the title?
Of course, I might be jumping ahead here. Do you get the error when you upload or attempt to view a file (which is what I am assuming here)? Or, are you getting this when trying to load the main page?
EDIT: I just had another thought. I suppose the server could be rejecting the \ in the \n at the end of the line. That would be odd, but it could happen. Are you running your site on a Linux server, or a Windows server?
6. G.B. | April 28th, 2008 at 6:10 pm
The statement is correct, but I think I figured out the problem:
“\n” should be “\n”
note the double quotes are different. There are many instances of these and I am going line by line and replacing them.
7. G.B. | April 28th, 2008 at 6:12 pm
OK, looks like your portal automatically changes both the plain double and single quotes into open/close directional quotes. They throw an error in PHP.
8. matthew | April 28th, 2008 at 6:26 pm
Doh! That would do it. I’ll see if I can format the text differently in the post to correct that. If I can’t, I’ll put it in a text file somewhere on my server with a link here for downloading. Sorry about that. I’m glad you figured it out.
9. matthew | April 28th, 2008 at 6:33 pm
Okay, changing the tags didn’t seem to change the final output. I have put the code quote here for anyone to download who wants it.
10. G.B. | April 28th, 2008 at 6:48 pm
That was it! Grabbing the text from the TXT file worked. Thanks for your quick response, hopefully this will help everyone else.
11. matthew | April 28th, 2008 at 6:51 pm
I have filed a bug report ticket with WordPress to see if there is something I am doing wrong, or if they would like to revise the code before the next bug fix release.
Leave a Comment
Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed