2012-03-28 1 views
2

Я пытаюсь обнюхать тип файла, основанный на магических числах . После некоторого googling я нашел следующую информацию:Как увидеть разницу между WMA и WMV-файлом с обнаружением магического числа?

WMA:

Первичная ассоциация: Windows Media
Компания: Microsoft Corporation классификация
файла: Audio
Mime тип: аудио/X-MS-ВМА , видео/X-MS-ASF
Определение символов Hex: 30 26 В2 75 8E 66 CF 11 A6 D9 00 00 62 АА CE 6C

WMV:

Первичная ассоциация: Windows Media File
Компания: Microsoft Corporation
Mime тип: видео/X-MS-WMV
Определение символов Hex: 30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C

Эти магические числа используются как аудио, так и видео. Как я могу определить, есть ли у меня тот или иной. Примечание. Я не могу использовать расширение, у меня есть только System.IO.Stream с байтами.

ответ

1

Это зависит от того, насколько хорош ваш снифер и насколько хороша производительность. Если вы можете проанализировать 1024 байта, вы можете искать другие метаданные, специфичные для файлов WMV. Если таких данных нет, вы можете предположить, что это WMA.

Посмотрите на следующие байты (в преимущественном порядке):

  1. AspectRatio (UTF-16)
  2. WindowsMediaVideo (UTF-16)
  3. WMV3 (ASCII)
  4. DeviceConformanceTemplate [email protected] (UTF -16)

Предоставление любых этих метаданных теги в области заголовка идентифицируют файл как WMV. Поэтому в худшем случае вам нужно будет выполнить около 8 поисков (включая все типы DeviceConformanceTemplate) в области 1024 байта для обнаружения WMV, и в лучшем случае 1 поиск для обнаружения WMV.

Другой способ заключается в parse header (AsfMojo), который может быть типичным 8 Кбайт, но не ограничен в целом. Я предполагаю, что информация заголовка должна быть достаточной для distingush между аудио и видео данными (но я не уверен на 100%). Я бы предпочел, чтобы это было так, и откажитесь от «взломанного» решения, если синтаксический анализ невозможен.

0

Вы не сможете сказать разницу, просто глядя на магическое число - магическое число представляет собой формат контейнера, который является Advanced Systems Format (ASF).

ASF может содержать любое количество потоков, включая аудио- и видеопотоки. Только если присутствует хотя бы один видеопоток, вы будете рассматривать файл WMV-файл.

Если вы хотите различать WMA и WMV (а не только ASF), вам придется разбирать мультимедийный файл, например. используя AsfMojo.

+0

Есть ли способ увидеть, есть ли видеопоток? Имеет ли этот видеопоток несколько идентификационных бит? –

+1

Файл ASF структурирован в объекты заголовка, которые идентифицируются назначенным GUID. Информация о потоке может быть найдена в 'ASF_Stream_Properties_Object' /' B7DC0791-A9B7-11CF-8EE6-00C00C205365'. Вам нужно будет проверить, существует ли поток типа 'BC19EFC0-5B4D-11CF-A8FD-00805F5C442B' (видео) – BrokenGlass

1

От MSDN:

Единственное различие между ASF файлов и WMV или WMA файлы являются расширения файлов и типы MIME. Тип MIME для файла WMV: video/x-ms-wmv, а для WMA - аудио/x-ms-wma. Тип MIME для ASF - video/x-ms-asf. Основная внутренняя структура файлов: идентична.

1

Как уже упоминалось, WMV и WMA файл в том же формате - Advanced Systems Format (ASF). Ну, вы можете проверить спецификацию формата ASF на веб-сайте MS (it is available), но это не для слабонервных.

Чтобы узнать, что находится внутри файлов, вы можете создать экземпляр Windows Media Reader Object с помощью WMCreateReader function и использовать интерфейс IWMHeaderInfo для получения информации о файле.

WindowsMedia.NET Library предоставит вам определение, необходимое для работы с этим API с C# (возможно, оно также имеет полезные образцы).

Смежные вопросы