function mx_analyzequeue() { global $s3, $sqs, $mxuser, $maxhandle; if ($mxuser && $mxuser->id) { error_log('Access Error.'); die; } ini_set('error_log', '/var/log/mxmedia-error.log'); error_log('start wait.'); while (--$maxhandle > 0) { gc_enable(); $mxuser = null; $res = $sqs->receive_message(MXMEDIAQUEUEURL, array('VisibilityTimeout' => DEBUG ? 15 : 60, 'MaxNumberOfMessages' => 1)); if ($res->isOK()) { $msgcnt = 0; if ($msg = $res->body->Message(0)) { $msgcnt++; //print_r('msg: '.$msg->Body); $req = unserialize($msg->Body); error_log(print_r($req, true)); $ffile = $req['ffile']; $media = $req['media']; $userid = $req['userid']; $ffmt = $req['ffmt']; $rescan = $req['rescan']; $fwave = ''; $fpreview = ''; $id3info = ''; if (!$userid) { error_log('No USERID in message...'); } else { $mxuser = new MXUser($userid); if (!$mxuser->id) { error_log('Can\'t switch to user ' . $userid . '. EXITING.'); die; } error_log("I am now: " . $mxuser->getname()); //error_log('mxuser='******''; $fpic = ''; if ($rescan && !file_exists($ffile)) { // retrieve uploaded version to re-analyse $ffile = mx_option('usersdir') . '/tmp/' . $media->filename; $fhash = $media->hashcode; $ext = preg_replace('%^.*\\.([^.]+)$%', '\\1', $media->filename); $ffmt = $ext; $hashdir = $mxuser->hashdir; $keyname = 'users/' . $hashdir . '/media/' . $fhash . '.' . $ext; error_log('loading ' . $keyname); if (!file_exists($ffile)) { $s3->get_object(MXS3BUCKET, $keyname, array('fileDownload' => $ffile)); } // get miniature if any since it may not be anymore in the mp3 $keyname2 = 'users/' . $hashdir . '/media/' . $fhash . '.jpg'; if ($keyname2 != $keyname) { $fpic = preg_replace('%^(.*)[.][^.]+$%', '\\1.jpg', $ffile); if ($s3->if_object_exists(MXS3BUCKET, $keyname2)) { error_log('loading ' . $keyname2); $s3->get_object(MXS3BUCKET, $keyname2, array('fileDownload' => $fpic)); } if (file_exists($fpic)) { $img = imagecreatefromjpeg($fpic); if ($img) { $w = imagesx($img); $h = imagesy($img); if ($w > 320) { $sc = $w / 320; $img2 = imagecreatetruecolor(320, round($h / $sc)); imagecopyresampled($img2, $img, 0, 0, 0, 0, 320, round($h / $sc), $w, $h); $fpic = preg_replace('%^(.*)[.][^.]+$%', '\\1.jpg', $ffile); imagejpeg($img2, $fpic); imagedestroy($img2); } imagedestroy($img); } $picext = 'jpg'; } else { $fpic = ''; } } } if (file_exists($ffile)) { $rescode = 0; $getID3 = new getID3(); $id3info = $getID3->analyze($ffile); switch ($ffmt) { case 'mp3': // type MP3 $sffile = preg_replace('%([\'"])%', '\\1', $ffile); //preg_replace('%([^a-zA-Z0-9-_/.])%','\1',$ffile); //error_log($sffile); $output = array(); //$res=exec('/usr/local/bin/id3v2 --delete-all "'.$sffile.'"',$output,$rescode); $res = exec('/usr/local/bin/id3v2 --remove-frame "APIC" "' . $sffile . '"', $output, $rescode); if (!$rescode) { $tags = $id3info['id3v2']; if (is_array($tags) && array_key_exists('PIC', $tags)) { $trackpic = $tags['PIC'][0]['data']; $picext = strtolower($tags['PIC'][0]['imagetype']); $fpic = preg_replace('%^(.*)[.][^.]+$%', '\\1.' . $picext, $ffile); file_put_contents($fpic, $trackpic); $img = ''; if ($picext == 'jpg' || $picext == 'jpeg') { $img = imagecreatefromjpeg($fpic); } else { if ($picext == 'png') { $img = imagecreatefrompng($fpic); } else { if ($picext == 'gif') { $img = imagecreatefromgif($fpic); } } } if ($img) { $w = imagesx($img); $h = imagesy($img); if ($w > 320) { $sc = $w / 320; $img2 = imagecreatetruecolor(320, round($h / $sc)); imagecopyresampled($img2, $img, 0, 0, 0, 0, 320, round($h / $sc), $w, $h); $fpic = preg_replace('%^(.*)[.][^.]+$%', '\\1.jpg', $ffile); imagejpeg($img2, $fpic); $picext = 'jpg'; imagedestroy($img2); } imagedestroy($img); } } } unset($id3info['id3v2']['PIC']); unset($id3info['comments']['picture']); unset($id3info['id3v2']); $mxuser->resetid3info($media->id, $id3info); //proc_nice(+15); error_log('generating waveform...'); $fwave = mp3_waveform($ffile, 400, 50, '#ccff99', '#000000'); error_log('generating preview...'); $fpreview = str_replace('.mp3', '-preview.mp3', $sffile); $res = exec('/usr/local/bin/sox --norm "' . $sffile . '" --rate 48k "' . $fpreview . '" fade t 0 0:0:45 5', $output, $rescode); //proc_nice(-15); break; case 'png': case 'jpg': case 'jpeg': case 'gif': $picext = $ffmt; if ($picext == 'jpg' || $picext == 'jpeg') { $img = imagecreatefromjpeg($ffile); } else { if ($picext == 'png') { $img = imagecreatefrompng($ffile); } else { if ($picext == 'gif') { $img = imagecreatefromgif($ffile); } } } if ($img) { $w = imagesx($img); $h = imagesy($img); if ($w > 320 || $h > 320) { $sc = max(array($w, $h)) / 320; } else { $sc = 1; } $img2 = imagecreatetruecolor(round($w / $sc), round($h / $sc)); imagecopyresampled($img2, $img, 0, 0, 0, 0, round($w / $sc), round($h / $sc), $w, $h); //$img2=imagecreatetruecolor($w,$h); //imagecopyresampled($img2,$img,0,0,0,0,$w,$h,$w,$h); $fpic = preg_replace('%^(.*)[.][^.]+$%', '\\1-thumb.jpg', $ffile); //imageinterlace($img2,1); imagejpeg($img2, $fpic); $picext = 'jpg'; imagedestroy($img2); } if ($img) { $w = imagesx($img); $h = imagesy($img); if ($w > 320 || $h > 320) { $sc = max(array($w, $h)) / 320; } else { $sc = 1; } //$img2=imagecreatetruecolor(round($w/$sc),round($h/$sc)); //imagecopyresampled($img2,$img,0,0,0,0,round($w/$sc),round($h/$sc),$w,$h); $img2 = imagecreatetruecolor($w, $h); imagecopyresampled($img2, $img, 0, 0, 0, 0, $w, $h, $w, $h); $fpic = preg_replace('%^(.*)[.][^.]+$%', '\\1-small.jpg', $ffile); imageinterlace($img2, 1); imagejpeg($img2, $fpic, 50); $picext = 'jpg'; imagedestroy($img2); } if ($img) { imagedestroy($img); } break; case 'mov': case 'avi': case 'm4v': case 'mpeg': case 'real': case 'quicktime': break; default: break; } if (!$rescode) { error_log('uploading media...'); $ret = $mxuser->uploadmedia($media->id, $media->filename, $media->title, $media->type, $media->description, $media->completion, $fpic, $fpreview); if (!array_key_exists('error', $ret)) { // set to ready OR restore previous media status if ($media->status < MXMEDIAREADY) { $mxuser->setmediastatus($media->id, MXMEDIAREADY); } else { $mxuser->setmediastatus($media->id, $media->status); } if ($fpreview && file_exists($fpreview) || $fpic && file_exists($fpic)) { $mxuser->setmediafield($media->id, 'preview', 1); } $mxuser->setmediapic($media->id, $picext); @unlink($ffile); if ($fpic) { @unlink($fpic); } if ($fwave) { @unlink($fwave); } if ($fpreview) { @unlink($fpreview); } error_log('OK'); } else { error_log($ret['error']); } } } else { error_log('file ' . $ffile . ' missing...'); } } $sqs->delete_message(MXMEDIAQUEUEURL, $msg->ReceiptHandle); $sqs->delete_message(MXMEDIAQUEUEURL, $msg->ReceiptHandle); } if (!$msgcnt) { sleep(15); } } else { // receive message error error_log($res); sleep(60); } } // while true error_log('end wait.'); }