วิธีดึงข้อมูลเมตาดาต้า mkv ด้วย Java และ GroupDocs.Metadata
ในคู่มือฉบับเต็มนี้คุณจะได้เรียนรู้ วิธีดึงข้อมูลเมตาดาต้า mkv ด้วย Java โดยใช้ไลบรารี GroupDocs.Metadata ไม่ว่าคุณจะสร้างแคตาล็อกสื่อ, ตรวจสอบพารามิเตอร์การเข้ารหัส, หรือทำการสร้างภาพย่ออัตโนมัติ การอ่านเมตาดาต้า Matroska (MKV) อย่างโปรแกรมเมตช่วยประหยัดเวลามนุษย์เป็นจำนวนมาก เราจะอธิบายเหตุผล, ความต้องการเบื้องต้น, ขั้นตอนการตั้งค่าอย่างละเอียด, และโค้ดตัวอย่างที่เปิดเผยส่วนหัว EBML, ข้อมูลเซกเมนต์, แท็ก, และข้อมูลแทร็ก
คำตอบสั้น
- “read mkv metadata java” หมายถึงอะไร? คือการดึงข้อมูลเมตาดาต้า Matroska (ชื่อ, codec, ความยาว ฯลฯ) จากไฟล์ MKV ด้วย Java อย่างโปรแกรมเมต
- ควรใช้ไลบรารีใด? GroupDocs.Metadata สำหรับ Java ให้ API ครบวงจรและประสิทธิภาพสูงสำหรับ Matroska และรูปแบบอื่นกว่า 50 รูปแบบ
- ต้องมีลิขสิทธิ์หรือไม่? ทดลองใช้ฟรีสำหรับการประเมิน; ลิขสิทธิ์เชิงพาณิชย์จะลบข้อจำกัดของรุ่นทดลองทั้งหมด
- สามารถอ่านรูปแบบอื่นได้หรือไม่? ได้ – API เดียวกันสามารถอ่าน MP4, AVI, MOV, MP3, และคอนเทนเนอร์อื่น ๆ อีกมากมาย
- ต้องการการเชื่อมต่ออินเทอร์เน็ตขณะรันหรือไม่? ไม่ – การดึงข้อมูลทั้งหมดทำงานในเครื่องหลังจากที่ JAR อยู่ใน classpath ของคุณแล้ว
- ไฟล์ขนาดใหญ่ที่สุดที่สามารถประมวลผลได้คือเท่าไหร่? ไลบรารีสตรีมคอนเทนเนอร์ ทำให้คุณจัดการไฟล์ขนาดสูงสุดถึง 10 GB โดยใช้หน่วยความจำ heap ไม่เกิน 200 MB
Matroska (MKV) metadata คืออะไร?
Matroska (MKV) metadata คือชุดข้อมูลเชิงบรรยายและโครงสร้างที่เก็บอยู่ภายในคอนเทนเนอร์ MKV เช่น ชื่อ, codec, ความยาว, รายละเอียดแทร็ก การเข้าถึงข้อมูลนี้ช่วยให้คุณสร้างแคตาล็อกที่ค้นหาได้, ตรวจสอบความสมบูรณ์ของไฟล์, หรือขับเคลื่อนเวิร์กโฟลว์อัตโนมัติเช่นการสร้างภาพย่อ
ทำไมต้องอ่าน mkv metadata ด้วย Java?
การอ่านเมตาดาต้า MKV ด้วย Java ช่วยให้คุณทำการจัดทำแคตาล็อกอัตโนมัติ, ตรวจสอบข้อกำหนด codec และภาษา, และดึงคุณสมบัติสำคัญโดยไม่ต้องตรวจสอบด้วยตนเอง ประหยัดเวลาและลดข้อผิดพลาด อีกทั้งยังให้แหล่งข้อมูลเดียวสำหรับการสร้างฐานข้อมูลที่ค้นหาได้หรือส่งต่อไปยังไพพ์ไลน์การแปลงสัญญาณต่อไป
ทำไมต้องใช้ GroupDocs.Metadata สำหรับ Java?
GroupDocs.Metadata สำหรับ Java มี API สตรีมที่ประสิทธิภาพสูง รองรับรูปแบบเข้า‑ออกกว่า 50 รูปแบบรวมถึง MKV พร้อมการใช้หน่วยความจำน้อย เหมาะสำหรับการประมวลผลสื่อขนาดใหญ่ มันแยกการพาร์ส EBML ระดับต่ำออกไป ทำให้คุณโฟกัสที่ตรรกะธุรกิจแทนการจัดการไฟล์ไบนารี
ความต้องการเบื้องต้น
- GroupDocs.Metadata สำหรับ Java รุ่น 24.12 หรือใหม่กว่า
- Java Development Kit (JDK) 8 หรือใหม่กว่า
- Maven (หรือจัดการ JAR ด้วยตนเอง) เพื่อจัดการ dependencies
- ไฟล์ MKV สำหรับทดสอบ, วางไว้ในโฟลเดอร์ที่สามารถอ้างอิงจากโค้ดได้ (เช่น
YOUR_DOCUMENT_DIRECTORY)
การตั้งค่า GroupDocs.Metadata สำหรับ Java
GroupDocs.Metadata สำหรับ Java เป็นไลบรารีที่ช่วยอ่านเมตาดาต้าจากไฟล์กว่า 50 รูปแบบรวมถึง Matroska (MKV) เพิ่มเข้าไปในโปรเจกต์ของคุณด้วย Maven หรือดาวน์โหลด JAR ด้วยตนเอง
Maven:
<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>
ดาวน์โหลดโดยตรง:
หากคุณไม่ต้องการใช้ Maven ให้ดาวน์โหลดเวอร์ชันล่าสุดจาก GroupDocs.Metadata for Java releases
การรับลิขสิทธิ์
เริ่มต้นด้วยการทดลองใช้ฟรีเพื่อสำรวจฟีเจอร์ สำหรับการใช้งานในผลิตภัณฑ์ ให้ซื้อไลเซนส์หรือรับไลเซนส์ชั่วคราวจาก GroupDocs เพื่อยกเลิกข้อจำกัดของรุ่นทดลอง
การเริ่มต้นและตั้งค่าเบื้องต้น
ด้านล่างเป็นโค้ดขั้นต่ำที่จำเป็นสำหรับเปิดไฟล์ MKV ด้วย GroupDocs.Metadata
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.MatroskaRootPackage;
public class MetadataExtraction {
public static void main(String[] args) {
try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.mkv")) {
MatroskaRootPackage root = metadata.getRootPackageGeneric();
// Access and manipulate metadata here
}
}
}
วิธีอ่าน mkv metadata ด้วย GroupDocs.Metadata
Metadata คือคลาสหลักที่แทนไฟล์สื่อและให้การเข้าถึงเมตาดาต้าที่ฝังอยู่
คุณอ่านเมตาดาต้า MKV โดยสร้างอินสแตนซ์ Metadata สำหรับไฟล์นั้น แล้วเรียกเมธอด getter — getRootPackageGeneric(), getSegments(), getTags(), และ getTracks() — เพื่อดึงแต่ละส่วนของเมตาดาต้า วิธีนี้ให้คุณมองเห็นส่วนหัว EBML, ข้อมูลเซกเมนต์, แท็กผู้ใช้, และรายละเอียดแทร็กแต่ละอันโดยไม่ต้องเขียนโค้ดพาร์สระดับต่ำ
Metadata คือคลาสหลักใน GroupDocs.Metadata ที่แทนไฟล์สื่อและให้การเข้าถึงเมตาดาต้าที่ฝังอยู่
การอ่านส่วนหัว EBML ของ Matroska
ส่วนหัว EBML เก็บข้อมูลพื้นฐานของไฟล์ เช่น เวอร์ชัน, ประเภทเอกสาร, และขนาดไฟล์
getRootPackageGeneric() คืนจุดเริ่มต้นของแพ็กเกจ Matroska ที่มีคุณสมบัติระดับ EBML เช่น docType, version, และ fileSize
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.MatroskaRootPackage;
public class ReadMatroskaEBMLHeader {
public static void run() {
try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.mkv")) {
MatroskaRootPackage root = metadata.getRootPackageGeneric();
String docType = root.getMatroskaPackage().getEbmlHeader().getDocType();
String docTypeReadVersion = root.getMatroskaPackage().getEbmlHeader().getDocTypeReadVersion();
String docTypeVersion = root.getMatroskaPackage().getEbmlHeader().getDocTypeVersion();
String readVersion = root.getMatroskaPackage().getEbmlHeader().getReadVersion();
String version = root.getMatroskaPackage().getEbmlHeader().getVersion();
// Use the extracted header details as needed
}
}
}
จุดสำคัญ
getRootPackageGeneric()คืนจุดเริ่มต้นของแพ็กเกจ Matroska- คุณสมบัติ EBML (
docType,versionฯลฯ) ช่วยให้คุณตรวจสอบความเข้ากันได้ของไฟล์ก่อนทำการประมวลผลต่อ
การอ่านข้อมูลเซกเมนต์ของ Matroska
เซกเมนต์บรรยายไทม์ไลน์สื่อโดยรวม, เครื่องมือสร้าง, และข้อมูลหัวเรื่องเพิ่มเติม (ถ้ามี)
getSegments() คืนคอลเลกชันของอ็อบเจ็กต์เซกเมนต์, แต่ละอ็อบเจ็กต์เปิดเผยระยะเวลา, ชื่อเรื่อง, และรายละเอียดแอปพลิเคชันที่สร้างไฟล์
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.MatroskaRootPackage;
public class ReadMatroskaSegmentInformation {
public static void run() {
try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.mkv")) {
MatroskaRootPackage root = metadata.getRootPackageGeneric();
for (var segment : root.getMatroskaPackage().getSegments()) {
String dateUtc = segment.getDateUtc();
long duration = segment.getDuration();
String muxingApp = segment.getMuxingApp();
String segmentFilename = segment.getSegmentFilename();
String segmentUid = segment.getSegmentUid();
long timecodeScale = segment.getTimecodeScale();
String title = segment.getTitle();
String writingApp = segment.getWritingApp();
// Process the extracted segment information as needed
}
}
}
}
จุดสำคัญ
getSegments()คืนคอลเลกชัน; แต่ละเซกเมนต์อาจมีชื่อเรื่อง, ระยะเวลา, และรายละเอียดแอปพลิเคชันของตนเอง- ข้อมูลนี้มีประโยชน์สำหรับการสร้างเพลย์ลิสต์หรือการตรวจสอบพารามิเตอร์การเข้ารหัสในชุดไฟล์หลายไฟล์
การอ่านเมตาดาต้าแท็กของ Matroska
แท็กเก็บข้อมูลที่มนุษย์อ่านได้ เช่น ชื่อ, ศิลปิน, หรือโน้ตกำหนดเอง
getTags() คืนรายการของแท็กที่เชื่อมโยงกับไฟล์, จัดกลุ่มตาม targetType (เช่น movie, track)
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.MatroskaRootPackage;
import com.groupdocs.metadata.core.MetadataProperty;
public class ReadMatroskaTagMetadata {
public static void run() {
try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.mkv")) {
MatroskaRootPackage root = metadata.getRootPackageGeneric();
for (var tag : root.getMatroskaPackage().getTags()) {
String targetType = tag.getTargetType();
String targetTypeValue = tag.getTargetTypeValue();
String tagTrackUid = tag.getTagTrackUid();
for (MetadataProperty simpleTag : tag.getSimpleTags()) {
String name = simpleTag.getName();
String value = simpleTag.getValue();
// Utilize the extracted tag information as needed
}
}
}
}
}
จุดสำคัญ
- แท็กจัดกลุ่มตาม
targetType(เช่นmovie,track) - รายการ
simpleTagมีคู่คีย์/ค่า เช่นTITLE=My Video
การอ่านเมตาดาต้าแทร็กของ Matroska
แทร็กเป็นสตรีมออดิโอ, วิดีโอ, หรือซับไตเติลแต่ละอันภายในคอนเทนเนอร์
getTracks() ให้การเข้าถึงสเปคเทคนิคของแต่ละแทร็ก, รวมถึงประเภท, codec ID, ภาษา, และ bitrate
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.MatroskaRootPackage;
public class ReadMatroskaTrackMetadata {
public static void run() {
try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.mkv")) {
MatroskaRootPackage root = metadata.getRootPackageGeneric();
for (var track : root.getMatroskaPackage().getTracks()) {
String trackType = track.getType();
String codecId = track.getCodecId();
String language = track.getLanguage();
long duration = track.getDuration();
// Process the extracted track information as needed
}
}
}
}
จุดสำคัญ
track.getType()บอกว่าเป็นสตรีมวิดีโอ, ออดิโอ, หรือซับไตเติลcodecIdระบุ codec (เช่นV_MPEG4/ISO/AVC)- ข้อมูลนี้สำคัญสำหรับไพพ์ไลน์การแปลงสัญญาณ, การตรวจสอบคุณภาพ, และการตัดสินใจสตรีมแบบไดนามิก
กรณีใช้งานทั่วไปสำหรับการอ่าน mkv metadata ด้วย Java
- แคตาล็อกสื่อ – เติมตารางฐานข้อมูลด้วยชื่อ, ระยะเวลา, และรหัสภาษาเพื่อการค้นหาอย่างรวดเร็ว
- การตรวจสอบคุณภาพอัตโนมัติ – ตรวจสอบว่าไฟล์ทุกไฟล์มีแท็กที่ต้องการและสอดคล้องกับมาตรฐาน codec ก่อนปล่อยออกสู่สาธารณะ
- สตรีมมิงแบบไดนามิก – เลือกแทร็กออดิโอหรือซับไตเติลที่เหมาะสมตามการตั้งค่าผู้ใช้ในขณะรัน
- การย้ายเนื้อหา – ดึงเมตาดาต้าออกครั้งเดียวแล้วนำเข้าไปยังระบบจัดเก็บใหม่หรือ CDN
ปัญหาที่พบบ่อยและการแก้ไข
| อาการ | สาเหตุที่เป็นไปได้ | วิธีแก้ไข |
|---|---|---|
NullPointerException เมื่อเรียก getEbmlHeader() | เส้นทางไฟล์ไม่ถูกต้องหรือไฟล์ไม่พบ | ตรวจสอบเส้นทางใน new Metadata("...") และยืนยันว่าไฟล์มีอยู่บนดิสก์ |
| ไม่พบแท็ก | ไฟล์ MKV ไม่มีส่วนแท็ก | ใช้ไฟล์สื่อที่มีแท็กเมตาดาต้า (เช่น ที่เพิ่มด้วย MKVToolNix) |
| การประมวลผลช้าในไฟล์ขนาดใหญ่ | หน่วยความจำ heap ไม่เพียงพอ | เพิ่ม heap ของ JVM (-Xmx2g หรือมากกว่า) หรือประมวลผลไฟล์เป็นชิ้นส่วนถ้าเป็นไปได้ |
| Codec ID ไม่คาดคิด | เวอร์ชัน Matroska เก่าที่ยังไม่รองรับเต็มที่ | อัปเดตเป็นเวอร์ชันล่าสุดของ GroupDocs.Metadata ซึ่งเพิ่มการสนับสนุน codec ใหม่ ๆ |
คำถามที่พบบ่อย
ถาม: ฉันสามารถดึงเมตาดาต้าจากรูปแบบวิดีโออื่น ๆ ด้วยไลบรารีเดียวกันได้หรือไม่?
ตอบ: ได้, GroupDocs.Metadata รองรับ MP4, AVI, MOV, และรูปแบบอื่น ๆ อีกมากมาย รูปแบบการใช้ API เหมือนกัน – เพียงใช้คลาสแพ็กเกจรากที่เหมาะสมสำหรับรูปแบบนั้น
ถาม: ต้องมีลิขสิทธิ์สำหรับการใช้งานในผลิตภัณฑ์หรือไม่?
ตอบ: ลิขสิทธิ์เชิงพาณิชย์จะลบข้อจำกัดของรุ่นทดลองและเปิดใช้งานฟังก์ชันเต็ม ไลบรารีทำงานในโหมดทดลองเพื่อการประเมินผล
ถาม: การดึงข้อมูลทำงานแบบออฟไลน์หรือไม่?
ตอบ: ใช่, หลังจากที่ JAR อยู่ใน classpath การอ่านเมตาดาต้าทั้งหมดทำในเครื่องโดยไม่มีการเรียก API ผ่านเครือข่าย
ถาม: ไลบรารีทำงานอย่างไรกับไฟล์ MKV ขนาดใหญ่มาก (หลาย GB)?
ตอบ: ไลบรารีสตรีมโครงสร้างคอนเทนเนอร์ ทำให้การใช้หน่วยความจำคงที่ ตรวจสอบให้แน่ใจว่า JVM มี heap เพียงพอสำหรับคอลเลกชันแท็กขนาดใหญ่ และพิจารณาเพิ่ม -Xmx หากประมวลผลไฟล์ขนาดใหญ่มาก
ถาม: ฉันสามารถแก้ไขเมตาดาต้าและเขียนกลับไปยังไฟล์ได้หรือไม่?
ตอบ: GroupDocs.Metadata เน้นการอ่านเป็นหลัก การสนับสนุนการเขียนมีจำกัด; โปรดดูเอกสาร API ล่าสุดสำหรับความสามารถในการเขียนกลับ
ถาม: ขนาดไฟล์สูงสุดที่ API สามารถจัดการได้คือเท่าไหร่?
ตอบ: สถาปัตยกรรมสตรีมทำให้สามารถประมวลผลไฟล์ได้ถึง 10 GB โดยใช้หน่วยความจำ heap ต่ำกว่า 200 MB บนเซิร์ฟเวอร์ทั่วไป
ถาม: มีข้อกังวลเรื่องความปลอดภัยของเธรดหรือไม่?
ตอบ: แต่ละอินสแตนซ์ Metadata เป็นอิสระ; คุณสามารถประมวลผลหลายไฟล์พร้อมกันได้โดยแต่ละเธรดใช้อินสแตนซ์ของตนเอง
อัปเดตล่าสุด: 2026-11-02
ทดสอบกับ: GroupDocs.Metadata 24.12 for Java
ผู้เขียน: GroupDocs