diff --git a/ansible/roles/media/files/cast_file_vaapi b/ansible/roles/media/files/cast_file_vaapi index 7414046..2c2c655 100644 --- a/ansible/roles/media/files/cast_file_vaapi +++ b/ansible/roles/media/files/cast_file_vaapi @@ -16,6 +16,8 @@ function main { h264 "${@}" elif [ "$cmd" = "software_h264" ]; then software_h264 "${@}" + elif [ "$cmd" = "software_vp8" ]; then + software_vp8 "${@}" elif [ "$cmd" = "preprocess_h264" ]; then preprocess_h264 "${@}" elif [ "$cmd" = "preprocess_vp8" ]; then @@ -138,6 +140,35 @@ function preprocess_vp8 { "$file_to_save" } +function software_vp8 { + local USERNAME PASSWORD + USERNAME="$1" + PASSWORD="$2" + + local file_to_cast + file_to_cast="$3" + + # -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 \ + -re \ + -stream_loop -1 \ + -i "$file_to_cast" \ + -c:v vp8 \ + -b:v 1M \ + -crf 10 \ + -bf 0 \ + -c:a opus \ + -b:a 320k \ + -ar 48000 \ + -strict -2 \ + -f rtsp \ + -rtsp_transport udp \ + "rtsp://$USERNAME:$PASSWORD@172.16.16.251:8554/fetch" +} + function webcam { # Uses on-webcam h264 encoding.