Как разобрать информацию о файле WMV в C # - PullRequest
1 голос
/ 21 июля 2011

Я хочу получить информацию об ASF-файле в виде битрейта, метаданных, языка ... Я прочитал Спецификацию ASF и знаю, что в ASF-файле есть части: объект заголовка, объект данных, индексный объект. Во-первых, я думаю, что двоичный файл ASF-файла, и я пытаюсь решить с помощью CLASS и FUNCTION в C # как: FileStream, BinaryReader:

String path = @"E:\KhoaLuanTN\Streaming video server\video\encoder_ad.wmv";
        FileStream filer = File.OpenRead(path);
        BinaryReader br = new BinaryReader(filer);         
        byte [] file = br.ReadBytes(100);

Затем я пытаюсь преобразовать в строку:

 textBox1.Text = Encoding.ASCII.GetString ( file );

Но он не отображается так, как я ожидаю. Он отображает бессмысленную строку: 0 &? U? F? ??. Поэтому, пожалуйста, покажите мне, как преобразовать информацию из файла ASF в строку.

1 Ответ

1 голос
/ 21 июля 2011

Вы можете проверить AsfMojo на codeplex.Он предлагает простой API для извлечения всей интересующей вас информации:

Пример кода

using (AsfFile asfFile = new AsfFile(sampleFileName))
{
    //Get bitrate
    uint asfBitRate = asfFile.PacketConfiguration.AsfBitRate;
    Console.WriteLine("Bitrate: " + asfBitRate);

    //Get language
    var languageObject = (AsfLanguageListObject)asfFile.GetAsfObjectByType(AsfGuid.ASF_Language_List_Object).FirstOrDefault();
    if (languageObject != null)
    {
        foreach (string language in languageObject.Languages)
            Console.WriteLine("Language: " + language);
    }

    //Get Metadata
    var metadataObject = (AsfMetadataObject)asfFile.GetAsfObjectByType(AsfGuid.ASF_Metadata_Object).FirstOrDefault();
    if (metadataObject != null)
    {
        foreach (var item in metadataObject.DescriptionRecords)
            Console.WriteLine(string.Format("{0}: {1} (stream #{2})", item.Name, item.Value, item.StreamNumber));
    }
}

Пример вывода

Это создает следующий вывод для моего файла примера:

Bitrate: 455932
Language: en-us
IsVBR: False (stream #1)
DeviceConformanceTemplate: L2 (stream #1)
IsVBR: False (stream #2)
DeviceConformanceTemplate: MP@ML (stream #2)
...