readFile static method
Implementation
static Future<UMediaMetadata> readFile(String path) async {
RandomAccessFile? handle;
try {
handle = await File(path).open();
final int length = await handle.length();
if (length < 16) return const UMediaMetadata();
final _Window window = _Window(handle, length);
final Uint8List head = await window.read(0, 16);
if (head.length < 12) return const UMediaMetadata();
if (head[0] == 0x49 && head[1] == 0x44 && head[2] == 0x33) {
final UMediaMetadata id3 = await _readId3v2(window, path);
final UMediaMetadata v1 = await _readId3v1(window);
return v1.merge(id3);
}
if (head[0] == 0x66 && head[1] == 0x4C && head[2] == 0x61 && head[3] == 0x43) return await _readFlac(window, path);
if (head[0] == 0x4F && head[1] == 0x67 && head[2] == 0x67 && head[3] == 0x53) return await _readOgg(window);
if (head[4] == 0x66 && head[5] == 0x74 && head[6] == 0x79 && head[7] == 0x70) return await _readMp4(window, path);
if (head[0] == 0x52 && head[1] == 0x49 && head[2] == 0x46 && head[3] == 0x46) return await _readWav(window);
return await _readId3v1(window);
} on FileSystemException {
return const UMediaMetadata();
} on UMediaParseException {
return const UMediaMetadata();
} finally {
await handle?.close();
}
}