UWP中使用MediaCapture调用RTSP流失败,求解决办法
解决UWP MediaCapture初始化RTSP流时的0xC00D36D5异常
根据官方文档,UWP的MediaCapture支持通过RTSP URI初始化连接网络摄像头流。我用VLC和IpCameraEmulator搭建了RTSP流服务器,且VLC播放器能正常播放该流,但执行以下代码时抛出原生异常:
var mcis = new MediaCaptureInitializationSettings() { DeviceUri = new Uri("rtsp://127.0.0.1:8554/live"), StreamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.Video }; await mediaCapture.InitializeAsync(mcis);
异常信息:The specified object or value does not exist. (Exception from HRESULT: 0xC00D36D5)
环境配置:
- 目标与开发机器均为Windows 11 build 22000
- 应用最低版本要求为Windows 10 build 20348
- 使用Visual Studio 2022
- 已关闭防火墙
可能的排查与解决方向
检查RTSP流编码兼容性
Windows MediaCapture仅支持H.264基线/主/高档次视频编码,以及AAC-LC音频编码(若包含音频)。需确保流服务器输出符合要求:- VLC推流时手动指定编码参数,选择H.264作为视频编码、AAC作为音频编码
- IpCameraEmulator中确认编码配置为H.264/AAC
补充MediaCapture初始化配置
尝试完善MediaCaptureInitializationSettings的属性,明确媒体类型与设备选择:
var mcis = new MediaCaptureInitializationSettings() { DeviceUri = new Uri("rtsp://127.0.0.1:8554/live"), StreamingCaptureMode = StreamingCaptureMode.Video, MediaCategory = MediaCategory.VideoRecord, VideoDeviceId = string.Empty, AudioDeviceId = string.Empty };
- 调整RTSP URI参数
- 强制TCP传输:Windows MediaCapture默认优先TCP,部分服务器默认UDP,尝试修改URI为
rtsp://127.0.0.1:8554/live?tcp - 若服务器需认证,在URI中携带账号密码:
rtsp://user:pass@127.0.0.1:8554/live
- 启用调试日志定位问题
添加失败监听获取详细错误信息,同时查看Visual Studio输出窗口的原生媒体栈日志:
mediaCapture.Failed += (sender, errorEventArgs) => { Debug.WriteLine($"MediaCapture失败: {errorEventArgs.Message}, 错误代码: {errorEventArgs.Code}"); };
- 修复系统媒体组件
若Windows媒体组件损坏,执行以下命令修复:
sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth
内容的提问来源于stack exchange,提问作者sahap
相关产品推荐
相关产品推荐

