VLC-Unity通过DirectShow播放USB摄像头视频失败的问题求助
VLC-Unity USB摄像头视频流播放问题
问题背景
正在测试VLC-Unity的各类视频流协议适配能力,最基础场景为直接播放USB摄像头视频流。基于官方提供的VLCMinimalPlayback.cs示例(Windows环境编译运行)修改,原示例通过HTTP播放远程视频:
if(_mediaPlayer.Media == null) { // playing remote media _mediaPlayer.Media = new Media(new Uri("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")); }
修改为适配USB摄像头的版本:
if (_mediaPlayer.Media == null) { // playing remote media // _mediaPlayer.Media = new Media(new Uri("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")); _mediaPlayer.Media = new Media( new Uri("dshow://") ); _mediaPlayer.Media.AddOption(":dshow-vdev=<My USB Camera Name>"); Task.Run(async () => { var success = await _mediaPlayer.PlayAsync(); uint height = 0; uint width = 0; _mediaPlayer.Size(0, ref width, ref height); Debug.Log("Media size: " + width + "x" + height); } ); }
运行后调试信息显示:
Media size: 0x0
此时无视频画面(音频流正常),即使给<My USB Camera Name>添加单引号或双引号也无法解决。
更新1:VLC播放器验证与实验结果
该摄像头可在VLC播放器中正常使用,调试日志片段如下:
main debug: Creating an input for 'dshow://' main debug: requesting art for new input thread main debug: using timeshift granularity of 50 MiB main debug: using timeshift path: C:\Users\pengc\AppData\Local\Temp main debug: `dshow://' gives access `dshow' demux `any' path `' main debug: creating demux: access='dshow' demux='any' location='' file='(null)' main debug: looking for access_demux module matching "dshow": 15 candidates main debug: looking for meta fetcher module matching "any": 1 candidates dshow debug: dshow-vdev: <Camera Name> dshow debug: dshow-adev: none
已上传两个极简实验项目至仓库(Windows11环境,已安装VLC播放器与OBS Studio,OBS虚拟摄像头为默认捕获设备):
实验1:OBS虚拟摄像头
媒体播放器创建代码:
_mediaPlayer.Media = new Media( new Uri( "dshow://" ) ); _mediaPlayer.Media.AddOption(":dshow-vdev=\"OBS Virtual Camera\""); _mediaPlayer.Media.AddOption(":dshow-adev=None");
结果:Unity应用仅能播放第一帧,随后画面冻结,虽能识别到正确摄像头,但无法正常播放。
实验2:真实USB摄像头
媒体播放器创建代码:
_mediaPlayer.Media = new Media( new Uri( "dshow://" ) ); _mediaPlayer.Media.AddOption(":dshow-vdev=\"USB2.0 HD UVC WebCam\""); _mediaPlayer.Media.AddOption(":dshow-adev=None");
结果与实验1一致,仍默认使用OBS摄像头,仅显示第一帧后冻结。
该仓库可通过Unity Editor 2022 LTS打开,需手动导入VLCUnity资产(试用版即可)。目前问题原因未知,希望了解是否可复现并寻求解决办法。
更新2
可上传VLCUnity试用版资产以方便复现问题。
内容的提问来源于stack exchange,提问作者tribbloid
相关产品推荐
相关产品推荐

