Как увидеть разницу между WMA и WMV файлом с обнаружением магического числа? - PullRequest
2 голосов
/ 28 марта 2012

Я пытаюсь определить тип файла, основываясь на магических числах .После некоторого поиска в Google я нашел следующую информацию:

WMA:

Основная связь: Windows MediaКомпания: Microsoft CorporationКлассификация файлов: АудиоТип MIME: аудио / x-ms-wma, видео / x-ms-asfИдентификационные символы Hex: 30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C

WMV:

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

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

Ответы [ 4 ]

1 голос
/ 28 марта 2012

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

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

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

1 голос
/ 28 марта 2012

С MSDN :

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

1 голос
/ 28 марта 2012

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

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

  1. AspectRatio (UTF-16)
  2. WindowsMediaVideo (UTF-16)
  3. WMV3 (ASCII)
  4. DeviceConformanceTemplate MP @ ML (UTF-16)

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

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

0 голосов
/ 28 марта 2012

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

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

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

...