📄 mediadescriptorutil.java
字号:
/* * File: MediaDescriptorUtil.java * Project: MPI Linguistic Application * Date: 02 May 2007 * * Copyright (C) 2001-2007 Max Planck Institute for Psycholinguistics * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package mpi.eudico.client.annotator.linkedmedia;import mpi.eudico.client.annotator.ElanLayoutManager;import mpi.eudico.client.annotator.ElanLocale;import mpi.eudico.client.annotator.ViewerManager2;import mpi.eudico.client.annotator.commands.ELANCommandFactory;import mpi.eudico.client.annotator.player.ElanMediaPlayer;import mpi.eudico.client.annotator.player.EmptyMediaPlayer;import mpi.eudico.client.annotator.player.JMFGraphicMediaPlayer;import mpi.eudico.client.annotator.player.NoPlayerException;import mpi.eudico.client.annotator.player.PlayerFactory;import mpi.eudico.client.annotator.player.QTMediaPlayer;import mpi.eudico.client.annotator.util.FileExtension;import mpi.eudico.client.annotator.util.FileUtility;import mpi.eudico.client.annotator.viewer.SignalViewer;import mpi.eudico.server.corpora.clomimpl.abstr.MediaDescriptor;import mpi.eudico.server.corpora.clomimpl.abstr.TranscriptionImpl;import java.io.File;import java.util.ArrayList;import java.util.Vector;import javax.swing.JOptionPane;/** * A utility class for creating, checking and updating mediadescriptors. * * @author Han Sloetjes */public class MediaDescriptorUtil { /** * Checks the existance of the file denoted by the mediadescriptor. * * @param md the media descriptor * * @return true when the file exists, false otherwise */ public static boolean checkLinkStatus(MediaDescriptor md) { if ((md == null) || (md.mediaURL == null) || (md.mediaURL.length() < 5)) { return false; } //wwj: return true if rtsp presents if (md.mediaURL.startsWith("rtsp")) { return true; } // remove the file: part of the URL, leading slashes are no problem int colonPos = md.mediaURL.indexOf(':'); String fileName = md.mediaURL.substring(colonPos + 1); // replace all back slashes by forward slashes fileName = fileName.replace('\\', '/'); File file = new File(fileName); if (!file.exists()) { return false; } else { return true; } } /** * Creates a mediadescriptor for the specified file. * * @param filePath the full path of the file * * @return a MediaDescriptor */ public static MediaDescriptor createMediaDescriptor(String filePath) { if ((filePath == null) || (filePath.length() == 0)) { return null; } String mediaURL = FileUtility.pathToURLString(filePath); if (mediaURL == null) { return null; } String mimeType = null; String mediaExtension; if (mediaURL.indexOf('.') > -1) { mediaExtension = mediaURL.substring(mediaURL.lastIndexOf('.') + 1); } else { mediaExtension = mediaURL.substring(mediaURL.length() - 3); // of no use, at least with JMF } mimeType = MediaDescriptorUtil.mimeTypeForExtension(mediaExtension); MediaDescriptor md = new MediaDescriptor(mediaURL, mimeType); return md; } /** * Creates a Vector of mediadescriptors for the specified files. * * @param fileNames a collection of files * * @return a Vector of MediaDescriptors */ public static Vector createMediaDescriptors(Vector fileNames) { Vector mediaDescriptors = new Vector(); if (fileNames == null) { return mediaDescriptors; } MediaDescriptor nextMD = null;mdloop: for (int i = 0; i < fileNames.size(); i++) { String path = (String) fileNames.get(i); nextMD = MediaDescriptorUtil.createMediaDescriptor(path); if (nextMD == null) { continue; } for (int j = 0; j < mediaDescriptors.size(); j++) { MediaDescriptor otherMD = (MediaDescriptor) mediaDescriptors.get(j); if (otherMD.mediaURL.equals(nextMD.mediaURL)) { // don't add the same file twice? continue mdloop; } // should this automatic detection of extracted_from remain?? if (nextMD.mimeType.equals(MediaDescriptor.WAV_MIME_TYPE) && MediaDescriptorUtil.isVideoType(otherMD)) { if (FileUtility.sameNameIgnoreExtension(nextMD.mediaURL, otherMD.mediaURL)) { nextMD.extractedFrom = otherMD.mediaURL; } } if (otherMD.mimeType.equals(MediaDescriptor.WAV_MIME_TYPE) && MediaDescriptorUtil.isVideoType(nextMD)) { if (FileUtility.sameNameIgnoreExtension(nextMD.mediaURL, otherMD.mediaURL)) { otherMD.extractedFrom = nextMD.mediaURL; } } } mediaDescriptors.add(nextMD); } return mediaDescriptors; } /** * Returns a mime-type for a given file extension. Works only for a very * limited set of known file types. * * @param fileExtension the file extension * * @return a Mime-Type String from the <code>MediaDescriptor</code> class */ public static String mimeTypeForExtension(String fileExtension) { if ((fileExtension == null) || (fileExtension.length() < 2)) { return MediaDescriptor.UNKNOWN_MIME_TYPE; } String lowExt = fileExtension.toLowerCase(); for (int i = 0; i < FileExtension.MPEG_EXT.length; i++) { if (lowExt.equals(FileExtension.MPEG_EXT[i])) { return MediaDescriptor.MPG_MIME_TYPE; } } for (int i = 0; i < FileExtension.WAV_EXT.length; i++) { if (lowExt.equals(FileExtension.WAV_EXT[i])) { return MediaDescriptor.WAV_MIME_TYPE; } } for (int i = 0; i < FileExtension.QT_EXT.length; i++) { if (lowExt.equals(FileExtension.QT_EXT[i])) { return MediaDescriptor.QUICKTIME_MIME_TYPE; } } for (int i = 0; i < FileExtension.MISC_AUDIO_EXT.length; i++) { if (lowExt.equals(FileExtension.MISC_AUDIO_EXT[i])) { return MediaDescriptor.GENERIC_AUDIO_TYPE; } } for (int i = 0; i < FileExtension.MISC_VIDEO_EXT.length; i++) { if (lowExt.equals(FileExtension.MISC_VIDEO_EXT[i])) { return MediaDescriptor.GENERIC_VIDEO_TYPE; } } return MediaDescriptor.UNKNOWN_MIME_TYPE; } /** * Returns whether the specified mime type is a known video type. * * @param mimeType the mime type string * * @return true if the specified mimetype is known to be a video type * * @see #isVideoType(MediaDescriptor) */ public static boolean isVideoType(String mimeType) { if (mimeType == null) { return false; } return (mimeType.equals(MediaDescriptor.GENERIC_VIDEO_TYPE) || mimeType.equals(MediaDescriptor.MPG_MIME_TYPE) || mimeType.equals(MediaDescriptor.QUICKTIME_MIME_TYPE)); } /** * Returns whether the specified MediaDescriptor is of a known video type. * * @param descriptor the mediadescriptor *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -