创建一个文件2音频流是互斥的

下面的代码可以用来创建一个文件有两个互斥的音频流:

型型;装运箱帧;HRESULT人力资源;USES_CONVERSION;如果(m_pConvert = = NULL)返回;/ /创建配置文件管理器对象:hr = CoCreateInstance (CLSID_ltmmWMProfileManager, NULL, CLSCTX_INPROC_SERVER IID_IltmmWMProfileManager (无效* *)&m_pProfMan);/ /创建一个空的简介:hr = m_pProfMan - > CreateEmptyProfile (ltmmWMT_VER_7_0 &m_pProf);/ /设置配置文件名称和描述hr = m_pProf - > put_Name (L“互斥Stream_test”);hr = m_pProf - > put_Description (L“示例代码”);/ /添加2音频流不同的比特率hr = AddAudioStream (CODEC_AUDIO_MSAUDIO下,概要文件,1日,8000年,8000年,1,假);hr = AddAudioStream (CODEC_AUDIO_MSAUDIO下,概要文件,2日,16000年,16000年,1,假);/ /使它们相互排斥hr = AddMutexObject(资料,1、2);/ /配置文件添加到转换对象hr = m_pConvert - > put_WMProfile (m_pProf);m_pProf - >释放();m_pProfMan - >释放();/ /设置目标格式hr = m_pConvert - > put_TargetFormat (ltmmConvert_TargetFormat_Asf_Compressor_Mux);/ /设置源文件名称;源文件包含多个音频流:hr = m_pConvert - > put_SourceFile (L“London.avi”);/ /设置输出文件名称:hr = m_pConvert - > put_TargetFile (“London.asf”);/ /转换hr = m_pConvert - > StartConvert ();HRESULT AddVideoStream (IltmmWMProfileManager *下,IltmmWMProfile *概要文件,使用UINT nStreamNum,DWORD dwFourCC,ULONG nBitRate,ULONG nWidth,ULONG nHeight,ULONG国家中心,ULONG nQuality,ULONG nSecPerKey){cCodecs;IltmmWMStreamConfig *流=零;IltmmMediaTypeDisp * pmt =零;VIDEOINFOHEADER * pVIH =零;varFormat变体;VariantInit (&varFormat);/ /得到MEDIATYPE_Video编解码器型型=:SysAllocString (ltmmMEDIATYPE_Video);HRESULT hr =经理- > GetCodecInfoCount (&cCodecs型);::SysFreeString(型);/ /搜索匹配的编解码器(我= 0;!我流& & < cCodecs;我+ +){cFormats;/ /得到MEDIATYPE_Video数编码格式型型=:SysAllocString (ltmmMEDIATYPE_Video);HRESULT hr =经理- > GetCodecFormatCount(型,我,&cFormats);::SysFreeString(型);(j = 0;j < cFormats;j + +){/ /得到MEDIATYPE_Video流配置界面型=:SysAllocString (ltmmMEDIATYPE_Video);hr =经理- > GetCodecFormat(流型,i, j);::SysFreeString(型);如果(成功(人力资源){/ /得到这种格式的媒体类型人力资源- > =流GetMediaType (pmt);如果(成功(人力资源){hr = pmt - > get_FormatType(型);如果(成功(人力资源){/ /只检查FORMAT_VideoInfo格式如果(!wcsicmp(型、ltmmFORMAT_VideoInfo)){&varFormat pmt - > GetFormatData(1日);SafeArrayAccessData (V_ARRAY (&varFormat), (无效* *)&pVIH);如果(pVIH - > bmiHeader。biCompression = = dwFourCC){::SysFreeString(型);打破;}SafeArrayUnaccessData (V_ARRAY (&varFormat));VariantClear (&varFormat);}::SysFreeString(型);}pmt - >释放();pmt =零;}流- >释放();流=零;}}}/ /返回一个错误,如果我们不找到一个好的候选人如果(流)返回E_FAIL;pVIH - > dwBitRate = nBitRate;pVIH - > rcSource。正确的= nWidth;pVIH - > rcSource。底= nHeight;pVIH - > rcTarget。正确的= nWidth;pVIH - > rcTarget。底= nHeight;pVIH - > bmiHeader。biWidth = nWidth;pVIH - > bmiHeader。biHeight = nHeight;pVIH - > AvgTimePerFrame =((龙龙)10000000)/((龙龙)国家中心);varFormat pmt - > SetFormatData(1日);人力资源- > =流put_Quality (nQuality);hr =流- > put_MaxKeyFrameSpacing (()nSecPerKey);流- > put_StreamNumber (nStreamNum);型=::SysAllocString (L“视频”);流- > put_StreamName(型);::SysFreeString(型);型=::SysAllocString (L“视频”);流- > put_ConnectionName(型);::SysFreeString(型);流- > put_Bitrate (nBitRate);流- > SetMediaType (pmt);配置文件- > AddStream(流);流- >释放();pmt - >释放();SafeArrayUnaccessData (V_ARRAY (&varFormat));VariantClear (&varFormat);返回S_OK;}HRESULT AddAudioStream (IltmmWMProfileManager *下,IltmmWMProfile *概要文件,使用UINT nStreamNum,使用UINT nFormatTag,ULONG nBitRate,ULONG nSamplesPerSec,使用UINT nChannels,BOOL bVideo){cCodecs;varSave变体;VariantInit (&varSave);/ /得到MEDIATYPE_Audio编解码器型型=:SysAllocString (ltmmMEDIATYPE_Audio);HRESULT hr =经理- > GetCodecInfoCount (&cCodecs型);::SysFreeString(型);/ /搜索匹配的编解码器(我= 0;我< cCodecs;我+ +){cFormats;/ /得到MEDIATYPE_Audio数编码格式型型=:SysAllocString (ltmmMEDIATYPE_Audio);HRESULT hr =经理- > GetCodecFormatCount(型,我,&cFormats);::SysFreeString(型);(j = 0;j < cFormats;j + +){/ /得到MEDIATYPE_Audio流配置界面IltmmWMStreamConfig *格式;型=:SysAllocString (ltmmMEDIATYPE_Audio);hr =经理- > GetCodecFormat(型,我,j,格式);::SysFreeString(型);如果(成功(人力资源){/ /得到这种格式的媒体类型IltmmMediaTypeDisp * pmt;hr =格式- > GetMediaType (pmt);如果(成功(人力资源){hr = pmt - > get_FormatType(型);如果(成功(人力资源){/ /只检查FORMAT_WaveFormatEx格式如果(!wcsicmp(型、ltmmFORMAT_WaveFormatEx)){变量var;VariantInit (var);pmt - > get_Format (var);WAVEFORMATEX * pWfx;SafeArrayAccessData (V_ARRAY (var), (无效* *)&pWfx);/ /这个格式看起来是一个不错的候选人nDiff = ()(pWfx - > nAvgBytesPerSec * 8 - nBitRate);如果(nDiff < 250 & &nDiff > -250 & &pWfx - > nSamplesPerSec = = nSamplesPerSec & &pWfx - > nChannels = = nChannels & &pWfx - > wFormatTag = = nFormatTag){如果(V_VT (&varSave) ! = VT_EMPTY){WAVEFORMATEX * pSaveWFX;SafeArrayAccessData (V_ARRAY (&varSave), (无效* *)&pSaveWFX);如果(bVideo){/ // /音频/视频配置,我们想/ /找到nBlockAlign越小。在这种情况下,/ / nBlockAlign比较大,所以我们想/ /使用旧格式。/ /如果(pWfx - > nBlockAlign < = pSaveWFX - > nBlockAlign){SafeArrayUnaccessData (V_ARRAY (&varSave));VariantClear (&varSave);VariantCopy (&varSave var);}}其他的{/ /否则,我们想要更大的nBlockAlign如果(pWfx - > nBlockAlign > = pSaveWFX - > nBlockAlign){SafeArrayUnaccessData (V_ARRAY (&varSave));VariantClear (&varSave);VariantCopy (&varSave var);}}}其他的{VariantClear (&varSave);VariantCopy (&varSave var);}}SafeArrayUnaccessData (V_ARRAY (var));VariantClear (var);}::SysFreeString(型);}pmt - >释放();}格式- >释放();}}}/ /返回一个错误,如果我们不找到一个好的候选人如果(V_VT (&varSave) = = VT_EMPTY)返回E_FAIL;WAVEFORMATEX * pSaveWFX;SafeArrayAccessData (V_ARRAY (&varSave), (无效* *)&pSaveWFX);IltmmMediaTypeDisp * pmt;hr = CoCreateInstance (CLSID_ltmmMediaType, NULL, CLSCTX_INPROC_SERVER IID_IltmmMediaTypeDisp (无效* *)pmt);/ /设置新流的媒体类型型=:SysAllocString (ltmmMEDIATYPE_Audio);pmt - > put_Type(型);::SysFreeString(型);装运箱;s.Format (_T (“{% .8x - 0000 - 0010 - 8000 - 00 - aa00389b71}”),(单位)pSaveWFX - > wFormatTag);= s.AllocSysString型();pmt - > put_Subtype(型);::SysFreeString(型);pmt - > put_FixedSizeSamples (VARIANT_TRUE);pmt - > put_TemporalCompression (VARIANT_FALSE);pmt - > put_SampleSize (pSaveWFX - > nBlockAlign);型=:SysAllocString (ltmmFORMAT_WaveFormatEx);pmt - > put_FormatType(型);::SysFreeString(型);pmt - > SetFormatData (1 l, varSave);IltmmWMStreamConfig *流;型=:SysAllocString (ltmmMEDIATYPE_Audio);hr =概要文件- > CreateNewStream(流型);::SysFreeString(型);流- > put_StreamNumber (nStreamNum);型=::SysAllocString (L“音频流”);流- > put_StreamName(型);::SysFreeString(型);型=::SysAllocString (L“音频”);流- > put_ConnectionName(型);::SysFreeString(型);流- > put_Bitrate (pSaveWFX - > nAvgBytesPerSec * 8);人力资源- > =流SetMediaType (pmt);hr =概要文件- > AddStream(流);流- >释放();pmt - >释放();SafeArrayUnaccessData (V_ARRAY (&varSave));VariantClear (&varSave);返回S_OK;}使用UINT nBaseStream HRESULT AddMutexObject (IltmmWMProfile *配置文件,使用UINT nStreamCount){IltmmWMMutualExclusion * excl =零;/ /创建一个排斥对象HRESULT hr =概要文件- > CreateNewMutualExclusion (&excl);/ /标记的所有流相互排斥(使用UINT i = 0;我< nStreamCount;我+ +){hr = excl - > AddStream (nBaseStream + i);}/ /表明流不同的比特率/ /看到CLSID_WMMUTEX_Bitrate WMSDK型型=::SysAllocString (L“{d6e22a01 - 35 - da - 11 - d1 - 9034 - 00 - a0c90349be}”);hr = excl - > put_Type(型);::SysFreeString(型);/ /分配排除对象配置文件hr =概要文件- > AddMutualExclusion (excl);excl - >释放();返回人力资源;}

LEADTOOLS多188宝金博怎么下载媒体C API的帮助
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。