Формат файла .wmv.(или любой видеофайл будет отличным) - PullRequest
0 голосов
/ 18 октября 2011

Я хочу взять видеофайл и «зашифровать» его с помощью Java. На данный момент шифрование просто переворачивает биты. Я хочу, чтобы видео продолжало воспроизводиться, поэтому заголовок должен быть целым. Мне очень трудно определить, насколько велик заголовок. Я попытался с файлом .avi и предположил размер заголовка с этой ссылкой Сведения о файле AVI , но это, похоже, не сработало. Затем я в конце концов догадался, что первые 40 Кбайт (кажется, очень большой?) Нетронутыми, а затем перевернул все последующие биты. Думаю, это удалось, хотя в конце видео получилось глючное, но на 40 КБ это не совсем понятно. Затем я прочитал, что у файлов .avi есть трейлер, поэтому я решил пока их избегать, чтобы избежать этой дополнительной сложности.

Может кто-нибудь сказать мне, каков формат файла .wmv, особенно размер его заголовка. Если нет .wmv, то любой популярный видеофайл подойдет!

Извинения, если это неясно.

Ответы [ 4 ]

1 голос
/ 30 октября 2011

Как отметили другие, спецификация ASF полностью охватывает формат медиафайлов WMV / WMA. Если C # - это вариант для вас, то есть AsfMojo , который является анализатором файлов ASF, то есть размер заголовка, который вы можете легко определить, используя свойства класса AsfFile.

using (AsfFile asfFile = new AsfFile(@"C:\samples\sample.wmv"))
{
    uint headerSize = asfFile.PacketConfiguration.AsfHeaderSize;
}

Это не позволит вам зашифровать данные, так как это сделает файл недействительным. Вы не хотите шифровать пакеты, вы хотите шифровать отдельные полезные данные и оставить все остальное без изменений. Обычно это делается (насколько мне известно) с помощью кодека, для которого вам нужно получить лицензию, иначе файл не будет воспроизводиться.

Для получения доступа к полезным данным вы можете сделать что-то вроде этого:

using (AsfFile asfFile = new AsfFile(@"C:\samples\sample.wmv"))
{
    var dataObject = asfFile.GetAsfObject<AsfDataObject>();
    foreach (var packet in dataObject.Packets)
        foreach(var payload in packet.Payload)
        {
            //do something with the payload
        }
    }
}

Если вы не можете использовать C #, вы можете использовать проект, по крайней мере, как руководство о том, как анализировать файлы ASF в целом.

1 голос
/ 18 октября 2011

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

1 голос
/ 18 октября 2011

Формат файла .WMV: Спецификация расширенного формата системы (ASF) .

Обычно вы можете либо зашифровать весь файл, либо фиксированный размер файла в начале, если вы можете (ииметь API) для дешифрования в памяти или во временный файл и воспроизведения оттуда.

Или вы бы зашифровали поток полезной нагрузки, подключив новый / нестандартный / приватный тип мультимедиа, чтобы при воспроизведении ваш пользовательский обработчиквызывается для декодирования / дешифрования данных.

1 голос
/ 18 октября 2011

Вы должны беспокоиться не только о заголовке. Многие видео имеют «глобальный» заголовок, а затем каждый отдельный видеокадр имеет свой собственный заголовок. Не каждый кадр в видео одинаков. Некоторые кадры могут быть целым изображением. Некоторые кадры будут отличаться только от последнего кадра и т. Д.

Пропуск глобального заголовка и последующее шифрование остальных данных по-прежнему приведет к полностью поврежденному видеофайлу, поскольку вы искали все биты подзаголовка, а также фактические видеоданные.

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

...