Java에서 GroupDocs.Metadata를 사용하여 asf 추출하는 방법

현대 미디어 파이프라인에서는 extract asf metadata in Java를 수행하는 것이 카탈로그화, 규정 준수 및 자동 처리에 필수적입니다. ASF 컨테이너를 수동으로 파싱하는 것은 오류가 발생하기 쉽고 시간이 많이 소요되지만, GroupDocs.Metadata for Java는 무거운 작업을 대신해 주는 고수준 API를 제공합니다. 이 튜토리얼에서는 라이브러리 설치, 핵심 속성 읽기, 코덱 정보 접근 및 일반적인 함정 처리 방법을 단계별로 안내하여, 어떤 Java 애플리케이션에도 자신 있게 ASF 메타데이터 추출을 통합할 수 있도록 돕습니다.

빠른 답변

  • What does “extract ASF metadata” mean? 프로그래밍 방식으로 임베드된 정보(예: 타임스탬프, 코덱 식별자, 스트림 설명자)를 ASF 파일에서 읽는 것을 의미합니다.
  • Which library is required? GroupDocs.Metadata for Java (version 24.12 or later).
  • Do I need a license? 개발에는 무료 체험판 또는 임시 라이선스로 충분하지만, 프로덕션 사용에는 정식 라이선스가 필요합니다.
  • What Java version is supported? JDK 8 이상.
  • Can I use Maven? 예 – Maven이 권장되는 의존성 관리 도구입니다.

asf 메타데이터란?

ASF (Advanced Systems Format) 메타데이터는 ASF 컨테이너 내부에 저장된 구조화된 태그들의 모음으로, 미디어 파일의 기술적 및 설명적 속성을 설명합니다. 이러한 태그에는 생성 타임스탬프, 코덱 식별자, 언어 설명자, 비트레이트 및 지속 시간과 같은 스트림 수준 속성이 포함됩니다. 이 데이터를 프로그래밍 방식으로 접근하면 검색 가능한 카탈로그를 구축하고, 규정 준수 규칙을 적용하며, 자동 트랜스코딩 결정을 내릴 수 있습니다.

asf 메타데이터를 추출하기 위해 Java용 GroupDocs.Metadata를 사용하는 이유

GroupDocs.Metadata는 30+ audio/video formats를 지원하며 스트리밍 아키텍처 덕분에 5 GB까지의 파일을 전체를 메모리에 로드하지 않고도 처리할 수 있습니다. 이 라이브러리는 깔끔한 객체 모델을 제공하므로—저수준 바이트 파싱이 필요 없으며—몇 번의 메서드 호출만으로 속성, 코덱, 설명자 및 스트림 세부 정보를 가져올 수 있습니다. 이는 맞춤 파서를 구축하는 경우에 비해 개발 노력을 최대 **70 %**까지 줄여줍니다.

사전 요구 사항

  • Java Development Kit (JDK) 8 이상 설치.
  • IDE (IntelliJ IDEA 또는 Eclipse 등) 사용 시 편리함.
  • Maven을 IDE에 설정 (선택 사항이지만 권장).
  • Java 및 외부 라이브러리에 대한 기본적인 이해.

Java용 GroupDocs.Metadata 설정

Java용 GroupDocs.Metadata 설정 방법?

pom.xml에 GroupDocs 저장소와 의존성을 추가합니다. 이 한 단계만으로 프로젝트에서 전체 API를 사용할 수 있게 됩니다.

<!-- Maven repository -->
<repositories>
    <repository>
        <id>groupdocs-maven</id>
        <url>https://repo.groupdocs.com/maven</url>
    </repository>
</repositories>

<!-- GroupDocs.Metadata dependency -->
<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>metadata</artifactId>
    <version>24.12</version>
</dependency>

GroupDocs.Metadata JAR는 Maven 빌드 중 자동으로 해결됩니다.

직접 다운로드 (Maven 사용 안 함)

Maven을 사용하고 싶지 않다면, 최신 JAR를 GroupDocs.Metadata for Java releases에서 다운로드하십시오. JAR를 클래스패스에 배치하면 바로 사용할 수 있습니다.

라이선스 개요

  • Free trial – 평가를 위한 무제한 기능 접근; 워터마크 없음.
  • Temporary license – 개발 및 자동 테스트에 이상적.
  • Full license – 상업적 배포에 필요하며 프리미엄 지원을 활성화합니다.

기본 초기화

Metadata 클래스는 파일을 로드하고 포맷별 접근자를 제공하는 진입점입니다. 아래는 ASF 파일을 열기 위해 필요한 최소 코드입니다.

import com.groupdocs.metadata.Metadata;

class MetadataExample {
    public static void main(String[] args) {
        try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.asf")) {
            // Your code for accessing metadata properties will go here.
        }
    }
}

기본 ASF 메타데이터 속성 추출 방법

ASF 파일을 로드하고 생성 날짜, 파일 식별자, 전역 플래그와 같은 고수준 속성을 가져옵니다. 이를 통해 자산이 언제 생성되었는지 및 재생을 위해 어떻게 플래그가 설정되었는지 즉시 파악할 수 있습니다.

// Load the ASF file
AsfPackage asf = new AsfPackage("sample.asf");

// Retrieve basic properties
Date creationDate = asf.getCreationDate();
String fileId = asf.getFileId();
int flags = asf.getFlags();

Why it matters: 생성 날짜를 알면 버전 관리에 도움이 되며, 파일 ID는 분산 시스템 전반에 걸쳐 자산을 고유하게 식별합니다.

ASF 코덱 정보 표시 방법

AsfCodecInfo 컬렉션은 오디오 및 비디오 스트림에 사용된 각 코덱을 열거합니다. getCodecs() 메서드는 코덱 이름, 유형 및 비트레이트를 제공하는 객체를 반환합니다. 코덱 사용을 이해하는 것은 호환성 테스트, 트랜스코딩 필요 여부 판단, 대상 장치가 오류 없이 스트림을 디코딩할 수 있는지 확인하는 데 중요합니다.

// Get codec collection
List<AsfCodecInfo> codecs = asf.getCodecs();

for (AsfCodecInfo codec : codecs) {
    System.out.println("Codec name: " + codec.getName());
    System.out.println("Codec type: " + codec.getType());
}

Why it matters: 코덱 세부 정보를 통해 대상 장치가 필요한 포맷을 지원하는지 확인할 수 있어, 프로덕션에서 재생 실패를 방지합니다.

메타데이터 설명자 표시 방법

설명자는 언어, 원본 제목, 스트림 번호와 같은 인간이 읽을 수 있는 컨텍스트를 제공합니다. getDescriptors() 메서드를 사용하여 AsfDescriptor 객체 목록을 가져오며, 각 객체는 키, 값 및 선택적 언어 태그를 포함합니다. 이 데이터는 검색 인덱스를 풍부하게 하고, UI 표시를 개선하며, 다국어 라이브러리 구성에 도움을 줍니다.

// Retrieve descriptor collection
List<AsfDescriptor> descriptors = asf.getDescriptors();

for (AsfDescriptor descriptor : descriptors) {
    System.out.println("Language: " + descriptor.getLanguage());
    System.out.println("Original title: " + descriptor.getOriginalTitle());
}

Why it matters: 설명자를 통해 자막 언어나 원본 파일명을 알 수 있어, 다국어 미디어 라이브러리를 구성할 때 유용합니다.

기본 스트림 속성 표시 방법

기본 스트림 속성은 스트림별 비트레이트, 타이밍 및 언어를 노출하여 세밀한 품질 분석을 가능하게 합니다. getStreams() 메서드는 AsfStream 객체를 반환하며, 각 스트림은 bitrate, duration, language와 같은 속성을 포함합니다. 이러한 값을 검토함으로써 파일이 배포 또는 보관 전에 품질 기준을 충족하는지 평가할 수 있습니다.

// Access base streams
List<AsfBaseStream> streams = asf.getBaseStreams();

for (AsfBaseStream stream : streams) {
    System.out.println("Bitrate: " + stream.getBitrate());
    System.out.println("Duration: " + stream.getDuration());
    System.out.println("Language: " + stream.getLanguage());
}

Why it matters: 스트림 수준 메트릭을 통해 파일이 배포 또는 보관 전에 품질 기준을 충족하는지 평가할 수 있습니다.

일반적인 문제 및 해결 방법

증상가능한 원인해결 방법
NullPointerException 발생 시 getAsfPackage() 호출파일 경로가 올바르지 않거나 파일이 유효한 ASF 컨테이너가 아닙니다.경로를 확인하고 파일이 올바른 ASF 파일인지 확인하십시오.
코덱 정보가 표시되지 않음ASF 파일이 현재 라이브러리 버전에서 인식하지 못하는 독점 코덱을 사용하고 있습니다.GroupDocs.Metadata를 최신 릴리스로 업데이트하거나 맞춤 코덱 파서를 구현하십시오.
설명자 목록이 비어 있음파일에 임베드된 설명자가 없으며(예: 인코딩 중 제거됨).메타데이터가 포함된 원본 파일을 사용하거나 메타데이터 보존을 활성화한 상태로 다시 인코딩하십시오.
2 GB 초과 파일에서 성능 저하기본 버퍼 크기가 대용량 스트림에 비해 너무 작습니다.MetadataLoadOptions.setBufferSize()를 사용해 로드하기 전에 버퍼 크기를 늘리십시오.

자주 묻는 질문

Q: 같은 라이브러리로 다른 비디오 포맷의 메타데이터를 추출할 수 있나요?
A: 예, GroupDocs.Metadata는 MP4, MKV, AVI, MOV 등 다양한 포맷을 지원합니다. 필요한 포맷에 해당하는 패키지 클래스를 인스턴스화하면 됩니다.

Q: 추출 후 ASF 메타데이터를 수정할 수 있나요?
A: 물론 가능합니다. 라이브러리는 대부분의 속성에 대한 setter 메서드를 제공하므로 값을 편집한 후 파일을 디스크에 다시 저장할 수 있습니다.

Q: 대용량 ASF 파일을 위해 64‑bit JVM이 필요합니까?
A: 반드시 필요한 것은 아니지만, 64‑bit JVM은 더 큰 힙을 제공하므로 2 GB 초과 파일을 처리할 때 유리합니다.

Q: 라이선스가 체험판 사용에 어떤 영향을 미칩니까?
A: 체험판 라이선스는 기능 제한을 없애지만 특정 내보내기 작업에 워터마크를 추가합니다. 제한 없는 프로덕션 사용을 위해서는 정식 라이선스를 구매해야 합니다.

Q: 이 코드를 Android 기기에서 실행할 수 있나요?
A: GroupDocs.Metadata는 Java SE용으로 구축되었습니다. Android에서는 Xamarin을 사용한 .NET 버전이나 호환 가능한 래퍼를 이용하십시오.

결론

이 가이드를 따라 하면 GroupDocs.Metadata를 사용하여 how to extract asf metadata in Java를 수행하는 방법을 알게 됩니다. 기본 속성을 읽고, 코덱을 열거하며, 상세 설명자를 가져오고, 스트림 수준 속성을 검사함으로써 미디어 자산을 완전히 파악할 수 있습니다. 다음 단계로는 이 추출 기능을 배치 처리 파이프라인에 통합하고, 검색 가능한 메타데이터 저장소를 구축하거나 코드를 확장하여 ASF 파일을 수정하고 다시 저장하는 것이 있습니다.


마지막 업데이트: 2026-09-02
테스트 환경: GroupDocs.Metadata 24.12 for Java
작성자: GroupDocs

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/metadata/java/</url>
   </repository>
</repositories>

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-metadata</artifactId>
      <version>24.12</version>
   </dependency>
</dependencies>
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.AsfRootPackage;

class ReadBasicProperties {
    public static void main(String[] args) {
        try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.asf")) {
            AsfRootPackage root = metadata.getRootPackageGeneric();
            com.groupdocs.metadata.core.AsfPackage asfPackage = root.getAsfPackage();

            System.out.println("Creation date: " + asfPackage.getCreationDate());
            System.out.println("File id: " + asfPackage.getFileID());
            System.out.println("Flags: " + asfPackage.getFlags());
        }
    }
}
import com.groupdocs.metadata.core.AsfCodec;

class ReadCodecInformation {
    public static void main(String[] args) {
        try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.asf")) {
            AsfRootPackage root = metadata.getRootPackageGeneric();
            com.groupdocs.metadata.core.AsfPackage asfPackage = root.getAsfPackage();

            for (AsfCodec codecInfo : asfPackage.getCodecInformation()) {
                System.out.println("Codec type: " + codecInfo.getCodecType());
                System.out.println("Description: " + codecInfo.getDescription());
                System.out.println("Codec information: " + codecInfo.getInformation());
                System.out.println(codecInfo.getName());
            }
        }
    }
}
import com.groupdocs.metadata.core.AsfBaseDescriptor;
import com.groupdocs.metadata.core.AsfMetadataDescriptor;

class ReadMetadataDescriptors {
    public static void main(String[] args) {
        try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.asf")) {
            AsfRootPackage root = metadata.getRootPackageGeneric();
            com.groupdocs.metadata.core.AsfPackage asfPackage = root.getAsfPackage();

            for (AsfBaseDescriptor descriptor : asfPackage.getMetadataDescriptors()) {
                System.out.println("Name: " + descriptor.getName());
                System.out.println("Value: " + descriptor.getValue());
                System.out.println("Content type: " + descriptor.getAsfContentType());

                if (descriptor instanceof AsfMetadataDescriptor) {
                    AsfMetadataDescriptor metadataDescriptor = (AsfMetadataDescriptor) descriptor;
                    System.out.println("Language: " + metadataDescriptor.getLanguage());
                    System.out.println("Stream number: " + metadataDescriptor.getStreamNumber());
                    System.out.println("Original name: " + metadataDescriptor.getOriginalName());
                }
            }
        }
    }
}
import com.groupdocs.metadata.core.AsfBaseStreamProperty;

class ReadBaseStreamProperties {
    public static void main(String[] args) {
        try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.asf")) {
            AsfRootPackage root = metadata.getRootPackageGeneric();
            com.groupdocs.metadata.core.AsfPackage asfPackage = root.getAsfPackage();

            for (AsfBaseStreamProperty property : asfPackage.getStreamProperties()) {
                System.out.println("Alternate bitrate: " + property.getAlternateBitrate());
                System.out.println("Average bitrate: " + property.getAverageBitrate());
                System.out.println("Average time per frame: " + property.getAverageTimePerFrame());
                System.out.println("Bitrate: " + property.getBitrate());
                System.out.println("Stream end time: " + property.getEndTime());
                System.out.println("Stream flags: " + property.getFlags());
                System.out.println("Stream language: " + property.getLanguage());
                System.out.println("Stream start time: " + property.getStartTime());
                System.out.println("Stream number: " + property.getStreamNumber());
            }
        }
    }
}

관련 튜토리얼