我很难从WMV文件中检索视频编解码器信息。我在C#中使用.Net 2.0(我知道它已经老了......但它是必需的)。我已经看过使用DirectShowLib amoungst其他的东西,虽然我找不到在哪里找到这些信息。
参考,这是我想要获得的图片:http://imgur.com/yNSKo
我想避免使用第三方dll,但如果我必须,我会。如果有人可以提供帮助,我将非常感谢这些信息!
这是一些代码(尽管我认为它不值得在盐中加权):
WindowsMediaPlayer wmp = new WindowsMediaPlayer();
IWMPMedia mediaInfo = wmp.newMedia(fileName);
MessageBox.Show(mediaInfo.getItemInfo("WM/Codec"));
答案 0 :(得分:1)
好的,我找到了答案。我使用:http://www.codeproject.com/Articles/36338/Export-Windows-Media-Player-Music-Metadata-to-XML作为指南。我添加了WMP.dll作为参考来获取此信息。一旦我添加了WMP.dll,我所做的就是找到编解码器的Hex并进行比较。这只有在您每次都具有相同的特定编解码器时才有效。它至少可以帮助您为编解码器拉出十六进制,并且可以将十六进制值与WMP中文件属性的视频编解码器相关联。
我希望这有助于下一个试图在他们的WMV中找到特定编解码器的人。
private bool WMPCodecCheck(string fileName)
{
try
{
WindowsMediaPlayer wmp = new WindowsMediaPlayer();
wmp.mediaCollection.add(fileName);
IWMPMedia currentWMV = wmp.newMedia(fileName);
media = wmp.mediaCollection;
this.codecType = media.getMediaAtom("FourCC");
IWMPPlaylist mediaList = null;
IWMPMedia mediaItem;
mediaList = media.getByAttribute("MediaType", "Video");
for (int i = 0; i < mediaList.count; i++)
{
mediaItem = mediaList.get_Item(i);
if (mediaItem.sourceURL.Equals(fileName))
{
if (_hasCodec.Equals(GetCodec(mediaItem)))
{
//MessageBox.Show("Codec Exists!");
wmp.mediaCollection.remove(mediaItem, true);
return true;
}
}
}
wmp.mediaCollection.remove(currentWMV, true);
return false;
}
catch (Exception e)
{
Log.LogToFile("Codec Read Error." + e, LogType.Exception);
}
return false;
}
private string GetCodec(IWMPMedia mediaItem)
{
// Has Codec = 877474375
// No Codec = 861293911
string codec = mediaItem.getItemInfoByAtom(codecType);
if (string.IsNullOrEmpty(codec))
{
codec = mediaItem.getItemInfoByAtom(codecType);
}
//MessageBox.Show("Codec Hex Value: " + codec);
return codec;
}