diff --git a/ansible/roles/firefox/defaults/main.yaml b/ansible/roles/firefox/defaults/main.yaml index 1bf52d5..6e384d7 100644 --- a/ansible/roles/firefox/defaults/main.yaml +++ b/ansible/roles/firefox/defaults/main.yaml @@ -37,4 +37,5 @@ firefox_config: # Instead, enable fingerprinting protection, which allows configuring an override. privacy.fingerprintingProtection: true # Allow sending dark mode preference to websites. - privacy.fingerprintingProtection.overrides: "+AllTargets,-CSSPrefersColorScheme" + # Allow sending timezone to websites. + privacy.fingerprintingProtection.overrides: "+AllTargets,-CSSPrefersColorScheme,-JSDateTimeUTC" diff --git a/ansible/roles/media/files/cast_file_vaapi b/ansible/roles/media/files/cast_file_vaapi index 2681df9..67eb7e2 100644 --- a/ansible/roles/media/files/cast_file_vaapi +++ b/ansible/roles/media/files/cast_file_vaapi @@ -14,8 +14,16 @@ function main { copy "${@}" elif [ "$cmd" = "h264" ]; then h264 "${@}" + elif [ "$cmd" = "preprocess_hardware_h264" ]; then + preprocess_hardware_h264 "${@}" elif [ "$cmd" = "software_h264" ]; then software_h264 "${@}" + elif [ "$cmd" = "vp9" ]; then + vp9 "${@}" + elif [ "$cmd" = "preprocess_hardware_vp9" ]; then + preprocess_hardware_vp9 "${@}" + elif [ "$cmd" = "vp8" ]; then + vp8 "${@}" elif [ "$cmd" = "software_vp8" ]; then software_vp8 "${@}" elif [ "$cmd" = "preprocess_h264" ]; then @@ -40,11 +48,13 @@ function copy { USERNAME="$1" PASSWORD="$2" + set -x exec ffmpeg \ -re \ -stream_loop -1 \ -i "$file_to_cast" \ -c copy \ + -strict experimental \ -f rtsp \ -rtsp_transport tcp \ "rtsp://$USERNAME:$PASSWORD@172.16.16.251:8554/fetch" @@ -58,6 +68,8 @@ function h264 { USERNAME="$1" PASSWORD="$2" + set -x + # -bf 0 :: Disable b-frames because webrtc doesn't support h264 streams with b-frames. exec ffmpeg \ -re \ @@ -71,6 +83,7 @@ function h264 { -vf 'format=nv12|vaapi,hwupload' \ -c:v h264_vaapi \ -bf 0 \ + -strict -2 \ -c:a opus \ -b:a 320k \ -ar 48000 \ @@ -79,6 +92,31 @@ function h264 { "rtsp://$USERNAME:$PASSWORD@172.16.16.251:8554/fetch" } +function preprocess_hardware_h264 { + local file_to_cast file_to_save + file_to_cast="$1" + file_to_save="$2" + + set -x + + # -bf 0 :: Disable b-frames because webrtc doesn't support h264 streams with b-frames. + exec ffmpeg \ + -init_hw_device vaapi=foo:/dev/dri/renderD128 \ + -hwaccel vaapi \ + -hwaccel_output_format vaapi \ + -hwaccel_device foo \ + -i "$file_to_cast" \ + -filter_hw_device foo \ + -vf 'format=nv12|vaapi,hwupload' \ + -c:v h264_vaapi \ + -bf 0 \ + -strict -2 \ + -c:a opus \ + -b:a 320k \ + -ar 48000 \ + "$file_to_save" +} + function software_h264 { local file_to_cast file_to_cast="$3" @@ -87,6 +125,8 @@ function software_h264 { USERNAME="$1" PASSWORD="$2" + set -x + # -bf 0 :: Disable b-frames because webrtc doesn't support h264 streams with b-frames. exec ffmpeg \ -re \ @@ -107,6 +147,8 @@ function preprocess_h264 { file_to_cast="$1" file_to_save="$2" + set -x + # -bf 0 :: Disable b-frames because webrtc doesn't support h264 streams with b-frames. exec ffmpeg \ -i "$file_to_cast" \ @@ -118,25 +160,60 @@ function preprocess_h264 { "$file_to_save" } -function preprocess_vp8 { +function vp9 { + local file_to_cast + file_to_cast="$3" + + local USERNAME PASSWORD + USERNAME="$1" + PASSWORD="$2" + + set -x + + # -bf 0 :: Disable b-frames because webrtc doesn't support h264 streams with b-frames. + exec ffmpeg \ + -re \ + -stream_loop -1 \ + -init_hw_device vaapi=foo:/dev/dri/renderD128 \ + -hwaccel vaapi \ + -hwaccel_output_format vaapi \ + -hwaccel_device foo \ + -i "$file_to_cast" \ + -filter_hw_device foo \ + -vf 'format=nv12|vaapi,hwupload' \ + -c:v vp9_vaapi \ + -bf 0 \ + -strict -2 \ + -c:a opus \ + -b:a 320k \ + -ar 48000 \ + -f rtsp \ + -rtsp_transport tcp \ + "rtsp://$USERNAME:$PASSWORD@172.16.16.251:8554/fetch" +} + +function preprocess_hardware_vp9 { local file_to_cast file_to_save file_to_cast="$1" file_to_save="$2" + set -x + # -bf 0 :: Disable b-frames because webrtc doesn't support h264 streams with b-frames. - # -strict -2 :: Enable support for experimental codecs like opus. - # -b:v 1M :: Target 1 megabit/s - # -crf 10 :: Target a quality level and adjust bitrate accordingly. This should be preferred, but ideally both should be used. exec ffmpeg \ + -init_hw_device vaapi=foo:/dev/dri/renderD128 \ + -hwaccel vaapi \ + -hwaccel_output_format vaapi \ + -hwaccel_device foo \ -i "$file_to_cast" \ - -c:v vp8 \ - -b:v 1M \ - -crf 10 \ + -filter_hw_device foo \ + -vf 'format=nv12|vaapi,hwupload' \ + -c:v vp9_vaapi \ -bf 0 \ + -strict -2 \ -c:a opus \ -b:a 320k \ -ar 48000 \ - -strict -2 \ "$file_to_save" } @@ -148,6 +225,8 @@ function software_vp8 { local file_to_cast file_to_cast="$3" + set -x + # -bf 0 :: Disable b-frames because webrtc doesn't support h264 streams with b-frames. # -strict -2 :: Enable support for experimental codecs like opus. # -b:v 1M :: Target 1 megabit/s @@ -169,6 +248,30 @@ function software_vp8 { "rtsp://$USERNAME:$PASSWORD@172.16.16.251:8554/fetch" } +function preprocess_vp8 { + local file_to_cast file_to_save + file_to_cast="$1" + file_to_save="$2" + + set -x + + # -bf 0 :: Disable b-frames because webrtc doesn't support h264 streams with b-frames. + # -strict -2 :: Enable support for experimental codecs like opus. + # -b:v 1M :: Target 1 megabit/s + # -crf 10 :: Target a quality level and adjust bitrate accordingly. This should be preferred, but ideally both should be used. + exec ffmpeg \ + -i "$file_to_cast" \ + -c:v vp8 \ + -b:v 1M \ + -crf 10 \ + -bf 0 \ + -c:a opus \ + -b:a 320k \ + -ar 48000 \ + -strict -2 \ + "$file_to_save" +} + function webcam { # Uses on-webcam h264 encoding. @@ -176,6 +279,8 @@ function webcam { USERNAME="$1" PASSWORD="$2" + set -x + exec ffmpeg \ -re \ -input_format h264 \ @@ -195,6 +300,8 @@ function encode_webcam { USERNAME="$1" PASSWORD="$2" + set -x + exec ffmpeg \ -re \ -vaapi_device /dev/dri/renderD128 \