From b33f2677290bbbb6588ed1abce8f97fba4ec5b0c Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Wed, 17 May 2017 20:16:04 +0200 Subject: Vary vp8 speed based on height. --- bin/capture+encode+serve | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'bin/capture+encode+serve') diff --git a/bin/capture+encode+serve b/bin/capture+encode+serve index ad97c24..26c5f40 100755 --- a/bin/capture+encode+serve +++ b/bin/capture+encode+serve @@ -47,45 +47,59 @@ my $HEIGHT = 240; my $FRAMERATE = 25; my $AUDIORATE = 48000; -# TODO: Vary vpx quality based on height -my $SPEED_VP8 = 15; - -# inspired by Apple HLS recommendations -# TODO: Externalize to site-specific configfile +# * height steps and bitrates based on https://developer.apple.com/library/content/documentation/General/Reference/HLSAuthoringSpec/Requirements.html +# * speeds tuned to just below 100% cpu usage for each combination on a multi-core computer +# TODO: adjust height steps or bitrates for 4:3 aspect ratio +# TODO: resolve steps from source height using http://aarmstrong.org/tutorials/aspect-ratios-and-h264 +# TODO: Externalize speeds to site-specific configfile my ( $VBITRATE, $SPEED_X264, $SPEED_X264_ALONE ); if ( $HEIGHT le 234 ) { $VBITRATE = 145000; - $SPEED_X264 = 'slow'; + $SPEED_X264 = 'fast'; $SPEED_X264_ALONE = 'fast'; + $SPEED_VP8 = 3; + $SPEED_VP8_ALONE = 2; } elsif ( $HEIGHT le 270 ) { $VBITRATE = 365000; $SPEED_X264 = 'faster'; $SPEED_X264_ALONE = 'fast'; + $SPEED_VP8 = 4; + $SPEED_VP8_ALONE = 2; } elsif ( $HEIGHT le 360 ) { $VBITRATE = 730000; - $SPEED_X264 = 'faster'; + $SPEED_X264 = 'veryfast'; $SPEED_X264_ALONE = 'fast'; + $SPEED_VP8 = 5; + $SPEED_VP8_ALONE = 3; } elsif ( $HEIGHT le 432 ) { $VBITRATE = 1100000; - $SPEED_X264 = 'veryfast'; + $SPEED_X264 = 'ultrafast'; $SPEED_X264_ALONE = 'fast'; + $SPEED_VP8 = 8; + $SPEED_VP8_ALONE = 4; } elsif ( $HEIGHT le 540 ) { $VBITRATE = 2000000; $SPEED_X264 = 'toofast'; $SPEED_X264_ALONE = 'veryfast'; + $SPEED_VP8_ALONE = 5; } elsif ( $HEIGHT le 720 ) { $VBITRATE = 3000000; $SPEED_X264 = 'toofast'; $SPEED_X264_ALONE = 'ultrafast'; + $SPEED_VP8_ALONE = 15; } -unless ($HEIGHTS_WEBM) { $SPEED_X264 = $SPEED_X264_ALONE } if ( toofast == $SPEED_X264 ) die "Not enough CPU - reduce size or streams"; +# TODO: implement codec-specific height pools +#if ( toofast == $SPEED_X264 ) { @HEIGHTS_MPEG = () }; +#unless (@HEIGHTS_MPEG) { $SPEED_VP8 = $SPEED_VP8_ALONE } +#unless (@HEIGHTS_WEBM) { $SPEED_X264 = $SPEED_X264_ALONE } + my $VCAPS = "video/x-raw,height=$HEIGHT"; my $ACAPS = "audio/x-raw,rate=$AUDIORATE,channels=2,depth=16"; -- cgit v1.2.3