创建或替换实时流示例(c++)

HRESULT CreateOrReplaceLiveStream(IltmsServer* server, LPCTSTR路径,LPCTSTR视频设备,LPCTSTR音频设备){HRESULT人力资源;streamcount;streamindex;CComPtr < IltmsLiveStreams >流;CComPtr < IltmsLiveStream >流;CComPtr < IltmsLiveStreamDevConfig > devconfig;hr = server->GetLiveStreams(&streams);如果(失败(人力资源)转到错误;//搜索具有相同路径的现有流hr = streams->get_Count(&streamcount);如果(失败(人力资源)转到错误;(streamindex = 0;Streamindex < streamcount;streamindex + +){CComBSTR v;hr = streams->GetLiveStream(streamindex, &stream);如果(失败(人力资源)转到错误;hr = stream->get_Path(&v);如果(失败(人力资源)转到错误;如果(CStringW(path).CompareNoCase(v) == 0)打破stream = NULL;}如果(流){//创建一个新的流Streamindex = -1;hr = streams-> createliestream (&stream);如果(失败(人力资源)转到错误;}//启用流hr = stream->put_Enable(VARIANT_TRUE);如果(失败(人力资源)转到错误;//启用硬件解码hr = stream->put_QSVDecoding(VARIANT_TRUE);如果(失败(人力资源)转到错误;hr = stream-> put_cudadcoding (VARIANT_TRUE);如果(失败(人力资源)转到错误;//设置activate-on-demandhr = stream->put_ActivateOnDemand(VARIANT_TRUE);如果(失败(人力资源)转到错误;//将激活-按需空闲超时设置为5分钟hr = stream->put_IdleTimeOut(300000);如果(失败(人力资源)转到错误;//设置流的路径hr = stream->put_Path(CComBSTR(path));如果(失败(人力资源)转到错误;//设置重新压缩。将其更改为VARIANT_TRUE以使用设备的内置压缩hr = stream->put_UseDeviceEncoding(VARIANT_FALSE);如果(失败(人力资源)转到错误;//选择视频设备{CComPtr < IltmsDevices >设备;Index = -1;流- > get_VideoDevices(设备);如果(videodevice){查找(CComBSTR(videodevice), &index);如果(失败(人力资源)转到错误;}hr = devices->put_Selection(索引);如果(失败(人力资源)转到错误;}//选择音频设备{CComPtr < IltmsDevices >设备;Index = -1;流- > get_AudioDevices(设备);如果(audiodevice){查找(CComBSTR(audiodevice), &index);如果(失败(人力资源)转到错误;}#如果1hr = devices->put_Selection(索引);如果(失败(人力资源)转到错误;#其他的//选择方法如果(索引>= 0){CComPtr < IltmsDevice >设备;hr = devices->Item(index, &device);如果(失败(人力资源)转到错误;hr = device->put_Selected(VARIANT_TRUE);如果(失败(人力资源)转到错误;}其他的{hr = devices->put_Selection(-1);如果(失败(人力资源)转到错误;}# endif}//锁定设备,以便编辑其属性hr = stream->get_DeviceConfig(&devconfig);如果(失败(人力资源)转到错误;hr = devconfig->LockDevices();如果(失败(人力资源)转到错误;//显示主视频设备属性页,如果有的话//查看ltms.h ltmsLiveStreamDlg枚举获取更多属性页选项{VARIANT_BOOL v;hr = devconfig->HasDialog(ltmsLiveStreamDlg_VideoDevice, &v);如果(失败(人力资源)转到错误;如果(v != VARIANT_FALSE){hr = devconfig->ShowDialog(ltmsLiveStreamDlg_VideoDevice, NULL);如果(失败(人力资源)转到错误;}}//显示主音频设备属性页,如果有的话//查看ltms.h ltmsLiveStreamDlg枚举获取更多属性页选项{VARIANT_BOOL v;hr = devconfig->HasDialog(ltmsLiveStreamDlg_AudioDevice, &v);如果(失败(人力资源)转到错误;如果(v != VARIANT_FALSE){hr = devconfig->ShowDialog(ltmsLiveStreamDlg_AudioDevice, NULL);如果(失败(人力资源)转到错误;}}//设置输出视频{VARIANT_BOOL v;hr = devconfig->get_IsVideoEncoded(&v);如果(失败(人力资源)转到错误;//视频已经编码,视频输出设置被忽略如果(v != VARIANT_FALSE){hr = stream->put_UseVideoInputSize(VARIANT_TRUE);如果(失败(人力资源)转到错误;//如果UseVideoInputSize为VARIANT_TRUE,则忽略宽度和高度hr = stream->put_VideoWidth(320);如果(失败(人力资源)转到错误;hr = stream->put_VideoHeight(240);如果(失败(人力资源)转到错误;hr = stream->put_UseVideoInputFrameRate(VARIANT_TRUE);如果(失败(人力资源)转到错误;//如果UseVideoInputFrameRate为VARIANT_TRUE,则忽略帧速率hr = stream->put_VideoFrameRate(29.97);如果(失败(人力资源)转到错误;hr = stream->put_VideoBitRate(700000);如果(失败(人力资源)转到错误;hr = stream->put_QSVAcceleration(VARIANT_TRUE);如果(失败(人力资源)转到错误;hr = stream->put_CUDAAcceleration(VARIANT_TRUE);如果(失败(人力资源)转到错误;}}//设置输出音频{VARIANT_BOOL v;hr = devconfig->get_IsAudioEncoded(&v);如果(失败(人力资源)转到错误;//音频已经编码,音频输出设置被忽略如果(v != VARIANT_FALSE){计数;CComPtr < IltmsAudioTypes > audiotypes;hr = stream->get_AudioTypes(&audiotypes);如果(失败(人力资源)转到错误;hr = audiotypes->get_Count(&count);如果(失败(人力资源)转到错误;索引= 0;Index < count;指数+ +){CComPtr < IltmsAudioType > audiotype;渠道;比特率;samplerate;hr = audiotypes->项目(索引,&audiotype);如果(失败(人力资源)转到错误;hr = audiotype->get_Channels(&channels);如果(失败(人力资源)转到错误;hr = audiotype->get_BitRate(&bitrate);如果(失败(人力资源)转到错误;hr = audiotype->get_SampleRate(&samplerate);如果(失败(人力资源)转到错误;如果(通道== 2 &&比特率== 192000 &&采样率== 44100){#如果1audiotype - > put_Selected (VARIANT_TRUE);#其他的//选择方法audiotypes - > put_Selection(指数);# endif打破}}}}//设置输出片段大小hr = stream->put_MinimumFragmentDuration(2.0);如果(失败(人力资源)转到错误;//添加或替换流如果(streamindex < 0)hr = streams->AddLiveStream(流);其他的hr = streams->SetLiveStream(streamindex, stream);如果(失败(人力资源)转到错误;hr = server->SetLiveStreams(流);如果(失败(人力资源)转到错误;错误:如果(devconfig)devconfig - > UnlockDevices ();返回人力资源;}
LEADTOOLS媒体流C API帮助
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领先科技有限公司版权所有。