4
0
mirror of https://github.com/AzuraCast/AzuraCast.git synced 2024-06-27 19:37:06 +00:00
AzuraCast/src/Media/MimeType.php
2021-07-19 00:53:45 -05:00

62 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Media;
use League\MimeTypeDetection\FinfoMimeTypeDetector;
use League\MimeTypeDetection\GeneratedExtensionToMimeTypeMap;
class MimeType
{
/**
* @return string[]
*/
public static function getProcessableTypes(): array
{
return [
'audio/flac', // MIME type used by some FLAC files
'audio/mp4', // m4a mp4a
'audio/mpeg', // mpga mp2 mp2a mp3 m2a m3a
'audio/ogg', // oga ogg spx
'audio/x-aac', // aac
'audio/x-flac', // flac
'audio/x-m4a', // alt for m4a/mp4a
'audio/x-wav', // wav
'video/mp4', // some MP4 audio files are recognized as this (#3569)
];
}
public static function getMimeTypeFromFile(string $path): string
{
$fileMimeType = (new FinfoMimeTypeDetector())->detectMimeTypeFromFile($path);
if ('application/octet-stream' === $fileMimeType) {
$fileMimeType = null;
}
return $fileMimeType ?? self::getMimeTypeFromPath($path);
}
public static function getMimeTypeFromPath(string $path): string
{
$extensionMap = new GeneratedExtensionToMimeTypeMap();
$extension = strtolower(pathinfo($path, PATHINFO_EXTENSION));
return $extensionMap->lookupMimeType($extension) ?? 'application/octet-stream';
}
public static function isPathProcessable(string $path): bool
{
$mimeType = self::getMimeTypeFromPath($path);
return in_array($mimeType, self::getProcessableTypes(), true);
}
public static function isFileProcessable(string $path): bool
{
$mimeType = self::getMimeTypeFromFile($path);
return in_array($mimeType, self::getProcessableTypes(), true);
}
}