public string GetMediaInfoString(string fileName) { string result = ""; if (fileName == "") return result; result += fileName + "\n"; //if (graphBuilder == null) return result; IMediaDet mediaDet = null; AMMediaType mt = new AMMediaType(); try { mediaDet = (IMediaDet)new MediaDet(); mediaDet.put_Filename(fileName); int streams; mediaDet.get_OutputStreams(out streams); for (int i = 0; i < streams; i++) { mediaDet.put_CurrentStream(i); mediaDet.get_StreamMediaType(mt); result += GetMediaTypeString(mt) + "\n"; } } catch { } finally { if (mediaDet != null) Marshal.ReleaseComObject(mediaDet); } return result; }
private unsafe string GetMediaTypeString(AMMediaType mt) { string result = ""; try { if (mt.majorType == MediaType.AnalogAudio) result += "AnalogAudio"; else if (mt.majorType == MediaType.AnalogVideo) result += "AnalogVideo"; else if (mt.majorType == MediaType.Audio) result += "Audio"; else if (mt.majorType == MediaType.AuxLine21Data) result += "AuxLine21Data"; else if (mt.majorType == MediaType.DTVCCData) result += "DTVCCData"; else if (mt.majorType == MediaType.File) result += "File"; else if (mt.majorType == MediaType.Interleaved) result += "Interleaved"; else if (mt.majorType == MediaType.LMRT) result += "LMRT"; else if (mt.majorType == MediaType.Midi) result += "Midi"; else if (mt.majorType == MediaType.Mpeg2Sections) result += "Mpeg2Sections"; else if (mt.majorType == MediaType.MSTVCaption) result += "MSTVCaption"; else if (mt.majorType == MediaType.ScriptCommand) result += "ScriptCommand"; else if (mt.majorType == MediaType.Stream) result += "Stream"; else if (mt.majorType == MediaType.Text) result += "Text"; else if (mt.majorType == MediaType.Timecode) result += "Timecode"; else if (mt.majorType == MediaType.URLStream) result += "URLStream"; else if (mt.majorType == MediaType.VBI) result += "VBI"; else if (mt.majorType == MediaType.Video) result += "Video"; else result += mt.majorType.ToString();//"UnKnown"; result += ": "; if (mt.subType == MediaSubType.A2B10G10R10) result += "A2B10G10R10"; else if (mt.subType == MediaSubType.A2R10G10B10) result += "A2R10G10B10"; else if (mt.subType == MediaSubType.AI44) result += "AI44"; else if (mt.subType == MediaSubType.AIFF) result += "AIFF"; else if (mt.subType == MediaSubType.AnalogVideo_NTSC_M) result += "AnalogVideo_NTSC_M"; else if (mt.subType == MediaSubType.AnalogVideo_PAL_B) result += "AnalogVideo_PAL_B"; else if (mt.subType == MediaSubType.AnalogVideo_PAL_D) result += "AnalogVideo_PAL_D"; else if (mt.subType == MediaSubType.AnalogVideo_PAL_G) result += "AnalogVideo_PAL_G"; else if (mt.subType == MediaSubType.AnalogVideo_PAL_H) result += "AnalogVideo_PAL_H"; else if (mt.subType == MediaSubType.AnalogVideo_PAL_I) result += "AnalogVideo_PAL_I"; else if (mt.subType == MediaSubType.AnalogVideo_PAL_M) result += "AnalogVideo_PAL_M"; else if (mt.subType == MediaSubType.AnalogVideo_PAL_N) result += "AnalogVideo_PAL_N"; else if (mt.subType == MediaSubType.AnalogVideo_PAL_N_COMBO) result += "AnalogVideo_PAL_N_COMBO"; else if (mt.subType == MediaSubType.AnalogVideo_SECAM_B) result += "AnalogVideo_SECAM_B"; else if (mt.subType == MediaSubType.AnalogVideo_SECAM_D) result += "AnalogVideo_SECAM_D"; else if (mt.subType == MediaSubType.AnalogVideo_SECAM_G) result += "AnalogVideo_SECAM_G"; else if (mt.subType == MediaSubType.AnalogVideo_SECAM_H) result += "AnalogVideo_SECAM_H"; else if (mt.subType == MediaSubType.AnalogVideo_SECAM_K) result += "AnalogVideo_SECAM_K"; else if (mt.subType == MediaSubType.AnalogVideo_SECAM_K1) result += "AnalogVideo_SECAM_K1"; else if (mt.subType == MediaSubType.AnalogVideo_SECAM_L) result += "AnalogVideo_SECAM_L"; else if (mt.subType == MediaSubType.ARGB1555) result += "ARGB1555"; else if (mt.subType == MediaSubType.ARGB1555_D3D_DX7_RT) result += "ARGB1555_D3D_DX7_RT"; else if (mt.subType == MediaSubType.ARGB1555_D3D_DX9_RT) result += "ARGB1555_D3D_DX9_RT"; else if (mt.subType == MediaSubType.ARGB32) result += "ARGB32"; else if (mt.subType == MediaSubType.ARGB32_D3D_DX7_RT) result += "ARGB32_D3D_DX7_RT"; else if (mt.subType == MediaSubType.ARGB32_D3D_DX9_RT) result += "ARGB32_D3D_DX9_RT"; else if (mt.subType == MediaSubType.ARGB4444) result += "ARGB4444"; else if (mt.subType == MediaSubType.ARGB4444_D3D_DX7_RT) result += "ARGB4444_D3D_DX7_RT"; else if (mt.subType == MediaSubType.ARGB4444_D3D_DX9_RT) result += "ARGB4444_D3D_DX9_RT"; else if (mt.subType == MediaSubType.Asf) result += "Asf"; else if (mt.subType == MediaSubType.AtscSI) result += "AtscSI"; else if (mt.subType == MediaSubType.AU) result += "AU"; else if (mt.subType == MediaSubType.Avi) result += "Avi"; else if (mt.subType == MediaSubType.AYUV) result += "AYUV"; else if (mt.subType == MediaSubType.CFCC) result += "CFCC"; else if (mt.subType == MediaSubType.CLJR) result += "CLJR"; else if (mt.subType == MediaSubType.CLPL) result += "CLPL"; else if (mt.subType == MediaSubType.CPLA) result += "CPLA"; else if (mt.subType == MediaSubType.Data708_608) result += "Data708_608"; else if (mt.subType == MediaSubType.DOLBY_AC3_SPDIF) result += "DOLBY_AC3_SPDIF"; else if (mt.subType == MediaSubType.DolbyAC3) result += "DolbyAC3"; else if (mt.subType == MediaSubType.DRM_Audio) result += "DRM_Audio"; else if (mt.subType == MediaSubType.DssAudio) result += "DssAudio"; else if (mt.subType == MediaSubType.DssVideo) result += "DssVideo"; else if (mt.subType == MediaSubType.DtvCcData) result += "DtvCcData"; else if (mt.subType == MediaSubType.dv25) result += "dv25"; else if (mt.subType == MediaSubType.dv50) result += "dv50"; else if (mt.subType == MediaSubType.DvbSI) result += "DvbSI"; else if (mt.subType == MediaSubType.DVCS) result += "DVCS"; else if (mt.subType == MediaSubType.dvh1) result += "dvh1"; else if (mt.subType == MediaSubType.dvhd) result += "dvhd"; else if (mt.subType == MediaSubType.DVSD) result += "DVSD"; else if (mt.subType == MediaSubType.dvsl) result += "dvsl"; else if (mt.subType == MediaSubType.H264) result += "H264"; else if (mt.subType == MediaSubType.I420) result += "I420"; else if (mt.subType == MediaSubType.IA44) result += "IA44"; else if (mt.subType == MediaSubType.IEEE_FLOAT) result += "IEEE_FLOAT"; else if (mt.subType == MediaSubType.IF09) result += "IF09"; else if (mt.subType == MediaSubType.IJPG) result += "IJPG"; else if (mt.subType == MediaSubType.IMC1) result += "IMC1"; else if (mt.subType == MediaSubType.IMC2) result += "IMC2"; else if (mt.subType == MediaSubType.IMC3) result += "IMC3"; else if (mt.subType == MediaSubType.IMC4) result += "IMC4"; else if (mt.subType == MediaSubType.IYUV) result += "IYUV"; else if (mt.subType == MediaSubType.Line21_BytePair) result += "Line21_BytePair"; else if (mt.subType == MediaSubType.Line21_GOPPacket) result += "Line21_GOPPacket"; else if (mt.subType == MediaSubType.Line21_VBIRawData) result += "Line21_VBIRawData"; else if (mt.subType == MediaSubType.MDVF) result += "MDVF"; else if (mt.subType == MediaSubType.MJPG) result += "MJPG"; else if (mt.subType == MediaSubType.MPEG1Audio) result += "MPEG1Audio"; else if (mt.subType == MediaSubType.MPEG1AudioPayload) result += "MPEG1AudioPayload"; else if (mt.subType == MediaSubType.MPEG1Packet) result += "MPEG1Packet"; else if (mt.subType == MediaSubType.MPEG1Payload) result += "MPEG1Payload"; else if (mt.subType == MediaSubType.MPEG1System) result += "MPEG1System"; else if (mt.subType == MediaSubType.MPEG1SystemStream) result += "MPEG1SystemStream"; else if (mt.subType == MediaSubType.MPEG1Video) result += "MPEG1Video"; else if (mt.subType == MediaSubType.MPEG1VideoCD) result += "MPEG1VideoCD"; else if (mt.subType == MediaSubType.Mpeg2Audio) result += "Mpeg2Audio"; else if (mt.subType == MediaSubType.Mpeg2Data) result += "Mpeg2Data"; else if (mt.subType == MediaSubType.Mpeg2Program) result += "Mpeg2Program"; else if (mt.subType == MediaSubType.Mpeg2Transport) result += "Mpeg2Transport"; else if (mt.subType == MediaSubType.Mpeg2TransportStride) result += "Mpeg2TransportStride"; else if (mt.subType == MediaSubType.Mpeg2Video) result += "Mpeg2Video"; else if (mt.subType == MediaSubType.None) result += "None"; else if (mt.subType == MediaSubType.NV12) result += "NV12"; else if (mt.subType == MediaSubType.NV24) result += "NV24"; else if (mt.subType == MediaSubType.Overlay) result += "Overlay"; else if (mt.subType == MediaSubType.PCM) result += "PCM"; else if (mt.subType == MediaSubType.PCMAudio_Obsolete) result += "PCMAudio_Obsolete"; else if (mt.subType == MediaSubType.PLUM) result += "PLUM"; else if (mt.subType == MediaSubType.QTJpeg) result += "QTJpeg"; else if (mt.subType == MediaSubType.QTMovie) result += "QTMovie"; else if (mt.subType == MediaSubType.QTRle) result += "QTRle"; else if (mt.subType == MediaSubType.QTRpza) result += "QTRpza"; else if (mt.subType == MediaSubType.QTSmc) result += "QTSmc"; else if (mt.subType == MediaSubType.RAW_SPORT) result += "RAW_SPORT"; else if (mt.subType == MediaSubType.RGB1) result += "RGB1"; else if (mt.subType == MediaSubType.RGB16_D3D_DX7_RT) result += "RGB16_D3D_DX7_RT"; else if (mt.subType == MediaSubType.RGB16_D3D_DX9_RT) result += "RGB16_D3D_DX9_RT"; else if (mt.subType == MediaSubType.RGB24) result += "RGB24"; else if (mt.subType == MediaSubType.RGB32) result += "RGB32"; else if (mt.subType == MediaSubType.RGB32_D3D_DX7_RT) result += "RGB32_D3D_DX7_RT"; else if (mt.subType == MediaSubType.RGB32_D3D_DX9_RT) result += "RGB32_D3D_DX9_RT"; else if (mt.subType == MediaSubType.RGB4) result += "RGB4"; else if (mt.subType == MediaSubType.RGB555) result += "RGB555"; else if (mt.subType == MediaSubType.RGB565) result += "RGB565"; else if (mt.subType == MediaSubType.RGB8) result += "RGB8"; else if (mt.subType == MediaSubType.S340) result += "S340"; else if (mt.subType == MediaSubType.S342) result += "S342"; else if (mt.subType == MediaSubType.SPDIF_TAG_241h) result += "SPDIF_TAG_241h"; else if (mt.subType == MediaSubType.TELETEXT) result += "TELETEXT"; else if (mt.subType == MediaSubType.TVMJ) result += "TVMJ"; else if (mt.subType == MediaSubType.UYVY) result += "UYVY"; else if (mt.subType == MediaSubType.VideoImage) result += "VideoImage"; else if (mt.subType == MediaSubType.VPS) result += "VPS"; else if (mt.subType == MediaSubType.VPVBI) result += "VPVBI"; else if (mt.subType == MediaSubType.VPVideo) result += "VPVideo"; else if (mt.subType == MediaSubType.WAKE) result += "WAKE"; else if (mt.subType == MediaSubType.WAVE) result += "WAVE"; else if (mt.subType == MediaSubType.WebStream) result += "WebStream"; else if (mt.subType == MediaSubType.WSS) result += "WSS"; else if (mt.subType == MediaSubType.Y211) result += "Y211"; else if (mt.subType == MediaSubType.Y411) result += "Y411"; else if (mt.subType == MediaSubType.Y41P) result += "Y41P"; else if (mt.subType == MediaSubType.YUY2) result += "YUY2"; else if (mt.subType == MediaSubType.YUYV) result += "YUYV"; else if (mt.subType == MediaSubType.YV12) result += "YV12"; else if (mt.subType == MediaSubType.YVU9) result += "YVU9"; else if (mt.subType == MediaSubType.YVYU) result += "YVYU"; else if (mt.subType == MediaSubType.MS_Mpeg4) result += "MS_Mpeg4"; else if (mt.subType == MediaSubType.Divx) result += "Divx"; else if (mt.subType == MediaSubType.Divx5) result += "Divx5"; else if (mt.subType == MediaSubType.VoxWare) result += "VoxWare"; else if (mt.subType == MediaSubType.Mpeg_Layer3) result += "Mpeg_Layer3"; else if (mt.subType == MediaSubType.LPCM) result += "LPCM"; else if (mt.subType == MediaSubType.Vorbis) result += "Vorbis"; else result += mt.subType.ToString();//"UnKnown"; result += ": "; if (mt.formatType == FormatType.VideoInfo) { BITMAPINFOHEADER BIH = ((VideoInfoHeader*)mt.formatPtr)->BmiHeader; result += string.Format("{0}x{1}, {2}bits ", BIH.biWidth, BIH.biHeight, BIH.biBitCount); } else if (mt.formatType == FormatType.VideoInfo2) { BITMAPINFOHEADER BIH = ((VideoInfoHeader2*)mt.formatPtr)->BmiHeader; result += string.Format("{0}x{1}, {2}bits ", BIH.biWidth, BIH.biHeight, BIH.biBitCount); } else if (mt.formatType == FormatType.WaveEx) { WaveFormatEx* pWFE = (WaveFormatEx*)mt.formatPtr; switch (pWFE->wFormatTag) { case 0x0001: result += "PCM"; break; // common case 0x0002: result += "ADPCM"; break; case 0x0003: result += "IEEE_FLOAT"; break; case 0x0005: result += "IBM_CVSD"; break; case 0x0006: result += "ALAW"; break; case 0x0007: result += "MULAW"; break; case 0x0010: result += "OKI_ADPCM"; break; case 0x0011: result += "DVI_ADPCM"; break; case 0x0012: result += "MEDIASPACE_ADPCM"; break; case 0x0013: result += "SIERRA_ADPCM"; break; case 0x0014: result += "G723_ADPCM"; break; case 0x0015: result += "DIGISTD"; break; case 0x0016: result += "DIGIFIX"; break; case 0x0017: result += "DIALOGIC_OKI_ADPCM"; break; case 0x0018: result += "MEDIAVISION_ADPCM"; break; case 0x0020: result += "YAMAHA_ADPCM"; break; case 0x0021: result += "SONARC"; break; case 0x0022: result += "DSPGROUP_TRUESPEECH"; break; case 0x0023: result += "ECHOSC1"; break; case 0x0024: result += "AUDIOFILE_AF36"; break; case 0x0025: result += "APTX"; break; case 0x0026: result += "AUDIOFILE_AF10"; break; case 0x0030: result += "DOLBY_AC2"; break; case 0x0031: result += "GSM610"; break; case 0x0032: result += "MSNAUDIO"; break; case 0x0033: result += "ANTEX_ADPCME"; break; case 0x0034: result += "CONTROL_RES_VQLPC"; break; case 0x0035: result += "DIGIREAL"; break; case 0x0036: result += "DIGIADPCM"; break; case 0x0037: result += "CONTROL_RES_CR10"; break; case 0x0038: result += "NMS_VBXADPCM"; break; case 0x0039: result += "CS_IMAADPCM"; break; case 0x003A: result += "ECHOSC3"; break; case 0x003B: result += "ROCKWELL_ADPCM"; break; case 0x003C: result += "ROCKWELL_DIGITALK"; break; case 0x003D: result += "XEBEC"; break; case 0x0040: result += "G721_ADPCM"; break; case 0x0041: result += "G728_CELP"; break; case 0x0050: result += "MPEG"; break; case 0x0055: result += "MPEGLAYER3"; break; case 0x0060: result += "CIRRUS"; break; case 0x0061: result += "ESPCM"; break; case 0x0062: result += "VOXWARE"; break; case 0x0063: result += "CANOPUS_ATRAC"; break; case 0x0064: result += "G726_ADPCM"; break; case 0x0065: result += "G722_ADPCM"; break; case 0x0066: result += "DSAT"; break; case 0x0067: result += "DSAT_DISPLAY"; break; case 0x0075: result += "VOXWARE"; break;// aditionnal ??? case 0x0080: result += "SOFTSOUND"; break; case 0x0100: result += "RHETOREX_ADPCM"; break; case 0x0200: result += "CREATIVE_ADPCM"; break; case 0x0202: result += "CREATIVE_FASTSPEECH8"; break; case 0x0203: result += "CREATIVE_FASTSPEECH10"; break; case 0x0220: result += "QUARTERDECK"; break; case 0x0300: result += "FM_TOWNS_SND"; break; case 0x0400: result += "BTV_DIGITAL"; break; case 0x1000: result += "OLIGSM"; break; case 0x1001: result += "OLIADPCM"; break; case 0x1002: result += "OLICELP"; break; case 0x1003: result += "OLISBC"; break; case 0x1004: result += "OLIOPR"; break; case 0x1100: result += "LH_CODEC"; break; case 0x1400: result += "NORRIS"; break; default: result += pWFE->wFormatTag.ToString("X"); break; } result += string.Format(",{0}Hz,{1}Ch ", pWFE->nSamplesPerSec, pWFE->nChannels); } else if (mt.formatType == FormatType.MpegVideo) { BITMAPINFOHEADER BIH = ((MPEG1VideoInfo*)mt.formatPtr)->hdr.BmiHeader; result += string.Format("{0}x{1}, {2}bits ", BIH.biWidth, BIH.biHeight, BIH.biBitCount); } else if (mt.formatType == FormatType.Mpeg2Video) { BITMAPINFOHEADER BIH = ((MPEG2VideoInfo*)mt.formatPtr)->hdr.BmiHeader; result += string.Format("{0}x{1}, {2}bits ", BIH.biWidth, BIH.biHeight, BIH.biBitCount); } else if (mt.formatType == FormatType.DvInfo) result += "DVInfo"; else if (mt.formatType == FormatType.MpegStreams) result += "MPEGStreams"; else if (mt.formatType == FormatType.DolbyAC3) result += "DolbyAC3"; else if (mt.formatType == FormatType.Mpeg2Audio) result += "MPEG2Audio"; else if (mt.formatType == FormatType.DVD_LPCMAudio) result += "DVD_LPCMAudio"; else result += "Unknown"; } catch { } finally { } return result; }
public void GetMediaContents(string fileName, out bool video, out bool audio, out long audioLength) { video = false; audio = false; audioLength = 0; if (fileName == "") return; IMediaDet mediaDet = null; AMMediaType mt = new AMMediaType(); IFilterGraph2 fg = (IFilterGraph2)new FilterGraph(); try { string ext = Path.GetExtension(fileName); switch (ext.ToLower()) { case ".asx": case ".wax": case ".wvx": //case ".m3u": return; } try { RegistryKey regkey = Registry.ClassesRoot.OpenSubKey(ext); switch (((string)regkey.GetValue("PerceivedType", "")).ToLower()) { case "audio": audio = true; break; default://����r�f�I //case "video": video = true; break; //default: return; } regkey.Close(); } catch { } mediaDet = (IMediaDet)new MediaDet(); mediaDet.put_Filename(fileName); int streams; mediaDet.get_OutputStreams(out streams); for (int i = 0; i < streams; i++) { mediaDet.put_CurrentStream(i); mediaDet.get_StreamMediaType(mt); video = video | (mt.majorType == MediaType.AnalogVideo) | (mt.majorType == MediaType.Video); audio = audio | (mt.majorType == MediaType.AnalogAudio) | (mt.majorType == MediaType.Audio) | (mt.majorType == MediaType.Midi); } //if ((!video) && ((uint)mediaDet.EnterBitmapGrabMode(0.0) != 0x80040200)) video = true; if (audio&&(!video)&&(fg.RenderFile(fileName, null) == 0)) { ((IMediaSeeking)fg).GetStopPosition(out audioLength); } } catch { } finally { if (mediaDet != null) Marshal.ReleaseComObject(mediaDet); if (fg != null) Marshal.ReleaseComObject(fg); } }