C#:从WMV文件检索视频编解码器信息
我很难从WMV文件中检索视频编解码器信息。我正在C#中使用.NET2.0(我知道它很旧,但它是必需的)。我在其他方面也考虑过使用DirectShowLib,不过我就是找不到在哪里可以找到这些信息 以下是我希望获得的图片,以供参考: 我想避免使用第三方dll的,但如果我必须,我会。如果有人能帮忙,我将非常感谢您提供的信息 下面是一些代码(尽管我认为它不值得在salt中使用):C#:从WMV文件检索视频编解码器信息,c#,video,format,codec,wmv,C#,Video,Format,Codec,Wmv,我很难从WMV文件中检索视频编解码器信息。我正在C#中使用.NET2.0(我知道它很旧,但它是必需的)。我在其他方面也考虑过使用DirectShowLib,不过我就是找不到在哪里可以找到这些信息 以下是我希望获得的图片,以供参考: 我想避免使用第三方dll的,但如果我必须,我会。如果有人能帮忙,我将非常感谢您提供的信息 下面是一些代码(尽管我认为它不值得在salt中使用): 好的,我找到答案了。我用:作为向导。我添加了WMP.dll作为参考以获得此信息。一旦我添加了WMP.dll,我所做的就是找
好的,我找到答案了。我用:作为向导。我添加了WMP.dll作为参考以获得此信息。一旦我添加了WMP.dll,我所做的就是找到编解码器的十六进制,并进行比较。只有当您每次都在寻找相同的特定编解码器时,这才有效。至少它将帮助您提取编解码器的十六进制值,并且您可以从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;
}
private bool WMPCodecCheck(字符串文件名)
{
尝试
{
WindowsMediaPlayer wmp=新WindowsMediaPlayer();
wmp.mediaCollection.add(文件名);
IWMPMedia currentWMV=wmp.newMedia(文件名);
媒体=wmp.mediaCollection;
this.codecType=media.getMediaAtom(“FourCC”);
iwmplaylist mediaList=null;
IWMPMedia媒体项目;
mediaList=media.getByAttribute(“MediaType”、“Video”);
对于(int i=0;i
好的,我找到了答案。我用:作为向导。我添加了WMP.dll作为参考以获得此信息。一旦我添加了WMP.dll,我所做的就是找到编解码器的十六进制,并进行比较。只有当您每次都在寻找相同的特定编解码器时,这才有效。至少它将帮助您提取编解码器的十六进制值,并且您可以从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;
}
private bool WMPCodecCheck(字符串文件名)
{
尝试
{
WindowsMediaPlayer wmp=新WindowsMediaPlayer();
wmp.mediaCollection.add(文件名);
IWMPMedia currentWMV=wmp.newMedia(文件名);
媒体=wmp.mediaCollection;
this.codecType=media.getMediaAtom(“FourCC”);
iwmplaylist mediaList=null;
IWMPMedia媒体项目;
mediaList=media.getByAttribute(“MediaType”、“Video”);
对于(int i=0;i
TagLib Sharp是一个可能适合您的第三方dll。一个可能适合您的第三方dll是TagLib Sharp。