Add more streaming commands.

This commit is contained in:
Tom Alexander 2024-07-18 23:29:07 -04:00
parent 31bf399b51
commit 1e47ff3f64
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
2 changed files with 117 additions and 9 deletions

View File

@ -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"

View File

@ -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 \