I just saw that Jami if I select device "SplitCam Video Driver" and resolution 1280x720 I can only select 29 and 59 fps.
SplitCam settings are 1280x720 and 30 fps.
Elyschanged title from [Windows 10] Jami has wrong fps if I use ManyCam / SplitCam and OBS to [Windows 10] Jami has wrong fps if I use the virtual cam of ManyCam / SplitCam and OBS
changed title from [Windows 10] Jami has wrong fps if I use ManyCam / SplitCam and OBS to [Windows 10] Jami has wrong fps if I use the virtual cam of ManyCam / SplitCam and OBS
Elyschanged the descriptionCompare with previous version
Jami lets you select 1360x768 AND 1920x1080 (although I never used such a resolution) both 30 fps each.
Now go to OBS-Studio and change the framerate to 60 fps. (OBS:And click apply)
Jami still lets to just select 30 fps.
If you now launch the OBS-Virtual-Webcam you will just get 30 fps(?) video or a "no video" message
Stop the virtual webcam
Exit Jami (but not OBS-Studio)
Open Jami
Now Jami lets you to select 30 fps (although OBS was set to 60 fps previously) OR 60 fps.
Jami: Select 60 fps
Jami: Once you've selected 60 fps you can't select 30 fps anymore (unless you change the settings in OBS and restart from step 4)
However - (Jami:) you can still select 1920x1080 30 fps (although I never used such a resolution)
Jami: Same issue if you change the resolution (you can reproduce following from step 4 and change to resolution instead of the framerate)
Similar issue if I use ManyCam Virtual Cam:
Jami just lets you to select 60 fps (although ManyCam is set to 30 fps)
However I had no chance to change the fps using Jami.
(It seems that the "ManyCam Virtual Microphone" suffers and might cause stuttering of the audio)
You can now view "Device" "SplitCam Video Driver" and the resolution is 800x600 and 29 fps
Now select 1280x720
Jami still just allows you to select 29fps OR 59fps
Even if I set the fps of SplitCam to 25 etc. Jami still just shows 29 fps or 59 fps
(It does not change if I select another video device and / or resolution and then go back to 1280x720)
I will try to be very explicit on the issue explanation.
Every camera device, virtual or not, that jami shows in the UI is a device the operational system offers. Bellow you can see a list of devices available at my own setup grabbed with the help of ffmpeg library and where you can see four cameras:
$ ffmpeg -list_devices true -f dshow -i dummy [dshow @ 000001A8BA706480] "USB Web-CAM " (video)[dshow @ 000001A8BA706480] Alternative name "@device_pnp_\\?\usb#vid_04fc&pid_2001&mi_00#7&32b81768&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"[dshow @ 000001A8BA706480] "SplitCam Video Driver" (video)[dshow @ 000001A8BA706480] Alternative name "@device_pnp_\\?\root#media#0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"[dshow @ 000001A8BA706480] "ManyCam Virtual Webcam" (video)[dshow @ 000001A8BA706480] Alternative name "@device_pnp_\\?\root#image#0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"[dshow @ 000001A8BA706480] "OBS Virtual Camera" (video)[dshow @ 000001A8BA706480] Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{A3FCE0F5-3493-419F-958A-ABA1250EC20B}"[dshow @ 000001A8BA706480] "Microphone (2- USB Web-CAM )" (audio)[dshow @ 000001A8BA706480] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{E071F5F2-9CCE-4F04-B891-1A21E5171B0A}"[dshow @ 000001A8BA706480] "Microphone (ManyCam Virtual Microphone)" (audio)[dshow @ 000001A8BA706480] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{1B7D6FFB-C853-416A-83BC-B264AB26357A}"[dshow @ 000001A8BA706480] "Microphone (High Definition Audio Device)" (audio)[dshow @ 000001A8BA706480] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{9843C803-337F-444C-B40C-3432072358F5}"[dshow @ 000001A8BA706480] "Microphone (SplitCam Audio Mixer)" (audio)[dshow @ 000001A8BA706480] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{B4D5FE31-7560-4B7E-9DEE-D7F2EAFA40EE}"dummy: Immediate exit requested
Now I will post to you what those cameras provide me as fps:
$ ffmpeg -f dshow -list_options true -i video="USB Web-CAM "[dshow @ 0000028DFEAA53C0] DirectShow video device options (from video devices)[dshow @ 0000028DFEAA53C0] Pin "Capture" (alternative pin name "0")[dshow @ 0000028DFEAA53C0] vcodec=mjpeg min s=320x240 fps=5 max s=320x240 fps=30[dshow @ 0000028DFEAA53C0] vcodec=mjpeg min s=320x240 fps=5 max s=320x240 fps=30 (pc, bt470bg/bt709/unknown, center)[dshow @ 0000028DFEAA53C0] vcodec=mjpeg min s=640x480 fps=5 max s=640x480 fps=30[dshow @ 0000028DFEAA53C0] vcodec=mjpeg min s=640x480 fps=5 max s=640x480 fps=30 (pc, bt470bg/bt709/unknown, center)[dshow @ 0000028DFEAA53C0] vcodec=mjpeg min s=160x120 fps=5 max s=160x120 fps=30[dshow @ 0000028DFEAA53C0] vcodec=mjpeg min s=160x120 fps=5 max s=160x120 fps=30 (pc, bt470bg/bt709/unknown, center)[dshow @ 0000028DFEAA53C0] vcodec=mjpeg min s=176x144 fps=5 max s=176x144 fps=30[dshow @ 0000028DFEAA53C0] vcodec=mjpeg min s=176x144 fps=5 max s=176x144 fps=30 (pc, bt470bg/bt709/unknown, center)[dshow @ 0000028DFEAA53C0] vcodec=mjpeg min s=352x288 fps=5 max s=352x288 fps=30[dshow @ 0000028DFEAA53C0] vcodec=mjpeg min s=352x288 fps=5 max s=352x288 fps=30 (pc, bt470bg/bt709/unknown, center)[dshow @ 0000028DFEAA53C0] video=USB Web-CAM : Immediate exit requested $ ffmpeg -f dshow -list_options true -i video="SplitCam Video Driver"[dshow @ 00000270F1DD70C0] DirectShow video device options (from video devices)[dshow @ 00000270F1DD70C0] Pin "Capture" (alternative pin name "0")[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=640x480 fps=0.015625 max s=640x480 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=2048x1536 fps=0.015625 max s=2048x1536 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1920x1440 fps=0.015625 max s=1920x1440 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1920x1080 fps=0.015625 max s=1920x1080 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1600x1200 fps=0.015625 max s=1600x1200 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1600x900 fps=0.015625 max s=1600x900 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1400x1050 fps=0.015625 max s=1400x1050 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1280x960 fps=0.015625 max s=1280x960 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1280x720 fps=0.015625 max s=1280x720 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1024x768 fps=0.015625 max s=1024x768 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=960x540 fps=0.015625 max s=960x540 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=800x600 fps=0.015625 max s=800x600 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=640x360 fps=0.015625 max s=640x360 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=512x384 fps=0.015625 max s=512x384 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=400x300 fps=0.015625 max s=400x300 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=400x225 fps=0.015625 max s=400x225 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=320x240 fps=0.015625 max s=320x240 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=320x180 fps=0.015625 max s=320x180 fps=29.97[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1024x768 fps=0.015625 max s=1024x768 fps=59.9398[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1280x720 fps=0.015625 max s=1280x720 fps=59.9398[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1280x960 fps=0.015625 max s=1280x960 fps=59.9398[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1400x1050 fps=0.015625 max s=1400x1050 fps=59.9398[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1600x900 fps=0.015625 max s=1600x900 fps=59.9398[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1600x1200 fps=0.015625 max s=1600x1200 fps=59.9398[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1920x1080 fps=0.015625 max s=1920x1080 fps=59.9398[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=1920x1440 fps=0.015625 max s=1920x1440 fps=59.9398[dshow @ 00000270F1DD70C0] pixel_format=bgr24 min s=2048x1536 fps=0.015625 max s=2048x1536 fps=59.9398[dshow @ 00000270F1DD70C0] video=SplitCam Video Driver: Immediate exit requested$ ffmpeg -f dshow -list_options true -i video="ManyCam Virtual Webcam"[dshow @ 000001F46BD265C0] DirectShow video device options (from video devices)[dshow @ 000001F46BD265C0] Pin "Capture" (alternative pin name "0")[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=1920x1080 fps=0.015625 max s=1920x1080 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=1600x1200 fps=0.015625 max s=1600x1200 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=1280x960 fps=0.015625 max s=1280x960 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=1280x720 fps=0.015625 max s=1280x720 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=1024x768 fps=0.015625 max s=1024x768 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=800x600 fps=0.015625 max s=800x600 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=640x480 fps=0.015625 max s=640x480 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=640x360 fps=0.015625 max s=640x360 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=512x384 fps=0.015625 max s=512x384 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=352x288 fps=0.015625 max s=352x288 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=320x240 fps=0.015625 max s=320x240 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=320x180 fps=0.015625 max s=320x180 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=176x144 fps=0.015625 max s=176x144 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=160x120 fps=0.015625 max s=160x120 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=3840x2160 fps=0.015625 max s=3840x2160 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=1920x1440 fps=0.015625 max s=1920x1440 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=960x720 fps=0.015625 max s=960x720 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=960x540 fps=0.015625 max s=960x540 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=424x240 fps=0.015625 max s=424x240 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=480x270 fps=0.015625 max s=480x270 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=800x448 fps=0.015625 max s=800x448 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=848x480 fps=0.015625 max s=848x480 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=1024x576 fps=0.015625 max s=1024x576 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=1600x896 fps=0.015625 max s=1600x896 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=yuyv422 min s=2560x1440 fps=0.015625 max s=2560x1440 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=1920x1080 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=1600x1200 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=1280x960 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=1280x720 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=1024x768 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=800x600 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=640x480 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=640x360 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=512x384 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=352x288 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=320x240 fps=0.015625 max s=320x240 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=320x180 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=176x144 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=160x120 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=320x240 fps=60.0002[dshow @ 000001F46BD265C0] pixel_format=bgr24 min s=160x120 fps=0.015625 max s=1920x1440 fps=60.0002[dshow @ 000001F46BD265C0] video=ManyCam Virtual Webcam: Immediate exit requested$ ffmpeg -f dshow -list_options true -i video="OBS Virtual Camera"[dshow @ 000002D90F628A40] DirectShow video device options (from video devices)[dshow @ 000002D90F628A40] Pin "Video Output" (alternative pin name "Output Pin")[dshow @ 000002D90F628A40] pixel_format=nv12 min s=1920x1080 fps=30 max s=1920x1080 fps=30[dshow @ 000002D90F628A40] pixel_format=yuv420p min s=1920x1080 fps=30 max s=1920x1080 fps=30[dshow @ 000002D90F628A40] pixel_format=yuyv422 min s=1920x1080 fps=30 max s=1920x1080 fps=30[dshow @ 000002D90F628A40] pixel_format=nv12 min s=1920x1080 fps=60.0002 max s=1920x1080 fps=60.0002[dshow @ 000002D90F628A40] pixel_format=yuv420p min s=1920x1080 fps=60.0002 max s=1920x1080 fps=60.0002[dshow @ 000002D90F628A40] pixel_format=yuyv422 min s=1920x1080 fps=60.0002 max s=1920x1080 fps=60.0002[dshow @ 000002D90F628A40] video=OBS Virtual Camera: Immediate exit requested
For the ManyCam and SplitCam options, even if I change the fps in their application, what is available to the system does not change at all. You can do the tests too using the commands exemplified above.
From that we can see a fundamental difference between what their application offer in their UI and what is available to the system.
Taking the ManyCam example, we could have a fps ranging from 0.016 to 60 and Jami chooses to work on the maximum fps available.
What the ManyCam application does is choose another fps and that is only applied to their UI and to the streams they record. Any change in the application UI is never communicated to the system.
The SplitCam does the very same.
As for the OBS, it does change their available fps in the system. However, it is only done when the virtual camera is started. Only changing the settings is not enough, you must start the camera so that OBS informs the operational system that the streams are changed. But, not only that, OBS does not send any Windows signal that could trigger a callback in Jami to update the available fps values. So there isn't much we can do there to follow the fps change. It is a issue related to OBS.
Moreover, as far as my test could go, OBS always lets the fps you chose + default 30fps streams so choosing 30fps in Jami is really using a 30fps stream.
Finally, as far as other applications are concerned, they are not transparent on which fps they are using to transmit your video. So there is no guarantee that if in manycam/splitcam/obs you choose a 25fps for instance that other applications will do the same.
Actually I used the windows 10 (preinstalled) camera app and I can select 30 fps for ManyCam. Regarding ManyCam it does not matter if I select 5,15,30,60 fps you can always select "30fps". So it's an issue because of ManyCam?
It's only Jami that allows you to select just 60 fps (although I set the value to 5,15, etc.)? Can you at least allow to use 30fps for ManyCam too if you use Jami?
However - the windows 10 camera app allows me to select 30 fps OR 60 fps if I use SplitCam.
The windows camera app is the one choosing the fps it would like to show the user. Many can application has no saying in what other application will offer to their own users.
Jami can do it too. But it should be detailed in a dev tickect oppened by the project headers. @sblin.
I moved this part in another ticket jami-daemon#752 with a really low priority for reason explained inside. At least the two patches should solve the black video. The rest of the points are explained in the analysis and are wontfix as it's from the virtual app (no signal from OBS, and ManyCam/SplitCam only offer ranges, not actual fps in the app (which is normal as they probably encode for max and modify the stream after))
the fps which doesn't update for OBS it's definitely this (with ffmpeg -f dshow before/after the update)
ManyCam it's actually not really a bug, as they just show a range and for now it will stick with the max fps from the range (else it's jami-daemon#752).
As mentioned by @agsantos, these are issues in the virtual camera software. If upon reconfiguring virtual camera formats, the software was to reannounce the device, the new formats would be picked up during device enumeration.
This is a won't-fix imo. I recommend a revert for https://review.jami.net/c/jami-daemon/+/22235.
Isn't there any solution Jami can fix these issues of the other software? Without causing issues for Jami? At least that the fps will update (without launching OBS-VirtualCam)?