我想获取ASF文件的信息作为比特率,元数据,语言......我已阅读ASF规范并知道ASF文件有部分:标题对象,数据对象,索引对象。在frist,我认为ASF文件的二进制文件,我尝试通过C#中的CLASS和FUNCTION解决: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);
然后,我尝试转换为String:
textBox1.Text = Encoding.ASCII.GetString ( file );
但它并没有像我期望的那样显示出来。它显示一个荒谬的字符串:0&?u?f? ??。 所以请告诉我如何将ASF文件中的信息转换为String。
答案 0 :(得分:1)
您可以在codeplex上查看AsfMojo。它提供了一个简单的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)