オーディオおよびビデオ ファイルの詳細なメタデータを抽出するカスタム メタデータ エクストラクタを開発しました。エクストラクタは AbstractMappingMetadataExtracter を拡張し、抽出されたフィールドをカスタム タイプにマップする必要があります。抽出クラスは AudioMetadataExtractor という名前で、対応するプロパティ ファイルにはマッピングが含まれています。以下はクラスのコードです
public class AudioMetadataExtractor extends AbstractBaseMetadataExtractor {
public static ArrayList<String> SUPPORTED_MIMETYPES = addMimeTypes(new String[] { MimeTypes.MIMETYPE_MP3, MimeTypes.MIMETYPE_WMA });
public AudioMetadataExtractor() {
this(SUPPORTED_MIMETYPES);
}
public AudioMetadataExtractor(ArrayList<String> supportedMimeTypes) {
super(supportedMimeTypes);
}
@Override
protected Map<String, Serializable> extractRaw(ContentReader reader) throws Throwable {
Map<String, Serializable> rawProperties = newRawMap();
File file = TempFileProvider.createTempFile("DCM", "MINFO");
reader.getContent(file);
MediaInfoJNA mediaInfoLib = new MediaInfoJNA();
mediaInfoLib.Open(file.getAbsolutePath());
String album = mediaInfoLib.Get(StreamKind.General, 0, "Album", MediaInfoJNA.InfoKind.Text, MediaInfoJNA.InfoKind.Name);
System.out.println("Album1 " + album);
String title = mediaInfoLib.Get(StreamKind.General, 0, "Title", MediaInfoJNA.InfoKind.Text, MediaInfoJNA.InfoKind.Name);
System.out.println("Title " + title);
String duration = mediaInfoLib.Get(StreamKind.General, 0, "Duration", MediaInfoJNA.InfoKind.Text, MediaInfoJNA.InfoKind.Name);
System.out.println("Duration " + duration);
putRawValue("album", album, rawProperties);
mediaInfoLib.Close();
return rawProperties;
}
}
抽出器の構成は次のとおりです。
<bean id="metadata.extractor.AudioAsset" class="com.diipl.moviebeam.dcm.alfresco.metadata.AudioMetadataExtractor" parent="baseMetadataExtracter">
<property name="inheritDefaultMapping">
<value>true</value>
</property>
</bean>
問題: 新しいファイルをアップロードするときにエクストラクターが呼び出され、すべての sysout が正しい値で表示されます。ただし、プロパティには値が入力されていません。しかし、ファイルに対して「共通メタデータの抽出」アクションを実行すると、エクストラクターが呼び出され、フィールドが正しい値を取得します。