Как управлять битрейтом MEDIASUBTYPE_H264 директшоу?

У меня есть веб-камера logitech c920, которая представляет закодированный h264 capture pin (подтип: MEDIASUBTYPE_H264).

Вывод h264 поддерживает следующие разрешения:

FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 640x480 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 160x90 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 160x120 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 176x144 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 320x180 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 320x240 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 352x288 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 432x240 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 640x360 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 800x448 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 800x600 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 864x480 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 960x720 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 1024x576 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 1280x720 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 1600x896 @ 30 fps  
FORMAT_VideoInfo - subtype: MEDIASUBTYPE_H264 1920x1080 @ 30 fps  

В моем тестировании он всегда использует 3 Мбит независимо от выбранного разрешения. Это многовато, особенно для низких разрешений.

Любая идея о том, как программно выбрать желаемый битрейт с помощью directshow? Или, может быть, другой API?


person user1558688    schedule 27.07.2012    source источник


Ответы (2)


Из ответа поддержки Logitech следует, что кодировка 80/20 HW/SW и битрейт (и GOP) не может контролироваться. Однако их программное обеспечение в комплекте, очевидно, делает это. Кроме того, после некоторого ограничения происходит снижение битрейта, хотя это происходит при очень низких комбинациях разрешения/fps:

Required bandwidth for size:  ( 1920 , 1080 )  @ 30  is 2.81771 Mbit 
Required bandwidth for size:  ( 1920 , 1080 )  @ 25  is 2.81672 Mbit 
Required bandwidth for size:  ( 1920 , 1080 )  @ 20  is 2.82701 Mbit 
Required bandwidth for size:  ( 1920 , 1080 )  @ 15  is 2.83327 Mbit 
Required bandwidth for size:  ( 1920 , 1080 )  @ 10  is 2.83594 Mbit 
Required bandwidth for size:  ( 1920 , 1080 )  @ 5  is 2.8431 Mbit 
Required bandwidth for size:  ( 1280 , 720 )  @ 30  is 2.82013 Mbit 
Required bandwidth for size:  ( 1280 , 720 )  @ 25  is 2.82436 Mbit 
Required bandwidth for size:  ( 1280 , 720 )  @ 20  is 2.83217 Mbit 
Required bandwidth for size:  ( 1280 , 720 )  @ 15  is 2.83696 Mbit 
Required bandwidth for size:  ( 1280 , 720 )  @ 10  is 2.83721 Mbit 
Required bandwidth for size:  ( 1280 , 720 )  @ 5  is 2.45272 Mbit 
Required bandwidth for size:  ( 864 , 480 )  @ 30  is 2.82089 Mbit 
Required bandwidth for size:  ( 864 , 480 )  @ 25  is 2.82313 Mbit 
Required bandwidth for size:  ( 864 , 480 )  @ 20  is 2.83131 Mbit 
Required bandwidth for size:  ( 864 , 480 )  @ 15  is 2.83343 Mbit 
Required bandwidth for size:  ( 864 , 480 )  @ 10  is 2.79526 Mbit 
Required bandwidth for size:  ( 864 , 480 )  @ 5  is 1.15564 Mbit 
Required bandwidth for size:  ( 320 , 180 )  @ 30  is 1.90123 Mbit 
Required bandwidth for size:  ( 320 , 180 )  @ 25  is 1.89367 Mbit 
Required bandwidth for size:  ( 320 , 180 )  @ 20  is 1.26006 Mbit 
Required bandwidth for size:  ( 320 , 180 )  @ 15  is 0.957935 Mbit 
Required bandwidth for size:  ( 320 , 180 )  @ 10  is 0.637158 Mbit 
Required bandwidth for size:  ( 320 , 180 )  @ 5  is 0.328456 Mbit

Если вы нашли решение, пожалуйста, поделитесь. Спасибо!

person fAX    schedule 18.11.2012

Запросите булавку для интерфейса IAMStreamConfig, получите этот список форматов через GetStreamCaps(), выберите нужный, он будет содержать указатель pFormat на структуру VIDEOINFO, которая содержит поле dwBitRate. Измените это поле на желаемый битрейт и вызовите IAMStreamConfig::SetFormat с этими новыми данными.

person Dee Mon    schedule 31.07.2012