function getStreamImageURL($stream_id, $req_time = null, $req_size = null, $directLink = false)
 {
     global $wgScript, $mvWebImgLoc, $mvLocalImgLoc, $mvExternalImages;
     //check global external image prefrence:
     $req_size_out = $req_size != null ? '&size=' . $req_size : '';
     if ($mvExternalImages) {
         global $mvExternalImgServerPath;
         //try to get the stream_name for external requests:
         $sn = MV_Stream::getStreamNameFromId($stream_id);
         return $mvExternalImgServerPath . '?action=ajax&rs=mv_frame_server&stream_name=' . $sn . '&t=' . $req_time . $req_size_out;
     }
     //by default return a non-direct link so that javascript can modify the url to get new images
     if (!$directLink) {
         return $wgScript . '?action=ajax&rs=mv_frame_server&stream_id=' . $stream_id . '&t=' . $req_time . $req_size_out;
     }
     $req_time = MV_StreamImage::procRequestTime($stream_id, $req_time);
     if ($req_time == false) {
         return MV_StreamImage::getMissingImageURL($req_size);
     }
     //print "got req time: $req_time<br />";
     //first check if the file exist
     if (is_file(MV_StreamImage::getLocalImagePath($stream_id, $req_time, $req_size))) {
         if ($req_size == null) {
             $s = '';
             $ext = 'jpg';
             //default type is jpg
         } else {
             list($im_width, $im_height, $ext) = MV_StreamImage::getSizeType($req_size);
             $s = '_' . $im_width . 'x' . $im_height;
         }
         return $mvWebImgLoc . '/' . MV_StreamImage::getRelativeImagePath($stream_id) . '/' . $req_time . $s . '.' . $ext;
     } else {
         //throw 'error finding image';
         return MV_StreamImage::getMissingImageURL($req_size);
     }
 }