更新SharpDX.MediaFoundation后调用CreateSinkWriterFromURL报类型转换错误如何解决
错误信息
更新SharpDX.MediaFoundation项目引用后,代码编译时抛出如下错误:
CS1503 参数 2: 无法从“System.IntPtr”转换为“SharpDX.MediaFoundation.IByteStream”
出错代码段
using (var ma = new MediaAttributes()) { // 注意这并不代表一定会启用硬件转换,受HDCP相关配置影响,Intel Media SDK有时无法正常工作 ma.Set(SinkWriterAttributeKeys.ReadwriteEnableHardwareTransforms, Options.EnableHardwareTransforms ? 1 : 0); ma.Set(SinkWriterAttributeKeys.D3DManager, _devManager.Value); // 默认情况下,接收器写入器的WriteSample方法会通过阻塞调用线程限制数据速率,避免应用传递采样过快,如需禁用该行为请将属性值设为1 ma.Set(SinkWriterAttributeKeys.DisableThrottling, Options.DisableThrottling ? 1 : 0); ma.Set(SinkWriterAttributeKeys.LowLatency, Options.LowLatency); Trace("CreateSinkWriterFromURL path:" + RecordFilePath); writer = MediaFactory.CreateSinkWriterFromURL(RecordFilePath, IntPtr.Zero, ma); }
问题定位
报错触发点为MediaFactory.CreateSinkWriterFromURL方法调用行,由第二个传入参数IntPtr.Zero引发类型不匹配问题:新版本SharpDX.MediaFoundation中该方法的第二个参数为可选的IByteStream接口类型,不再接受IntPtr类型的空值输入。
修复方案
将方法调用中第二个参数IntPtr.Zero替换为null即可,修改后的对应代码行如下:
writer = MediaFactory.CreateSinkWriterFromURL(RecordFilePath, null, ma);
内容的提问来源于stack exchange,提问作者Selim Boz
相关产品推荐
相关产品推荐

