This commit is contained in:
2022-01-27 19:42:55 +08:00
commit d0e08f6985
4 changed files with 104 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
test/
scripts/nginx/nginx/
+3
View File
@@ -0,0 +1,3 @@
# stream-relay
> Collection of tools and scripts to help in restreaming content
+33
View File
@@ -0,0 +1,33 @@
#!/bin/bash
set -e
tmpdir="$(mktemp -d)"
prefix="$1"
if [ -z "$prefix" ]; then
prefix="$(pwd)/nginx"
fi
mkdir -p "$prefix"
echo "Downloading nginx to $tmpdir"
wget -qO- http://nginx.org/download/nginx-1.21.6.tar.gz | tar -xzv -C "$tmpdir"
pushd "$tmpdir/nginx-1.21.6"
echo "Configuring nginx"
./configure \
--prefix="$prefix" \
--with-http_ssl_module --with-threads --with-http_realip_module
echo "Compiling nginx"
make -j "$(nproc)"
echo "Installing nginx"
make install
popd # "$tmpdir/nginx-1.21.6"
echo "Cleaning up"
rm -rf "$tmpdir"
+66
View File
@@ -0,0 +1,66 @@
#!/bin/bash
hls_flags="-hls_time 1 -hls_list_size 30"
rtmp2hls() {
# Copy the RTMP stream to HLS
hls_flags=$(make_hls_flags "$1")
ffmpeg \
-re -f flv -listen 1 -i "$1" -c copy -bsf:a aac_adtstoasc \
-f hls $hls_flags -hls_segment_filename "$2/%d.ts" \
"$2/index.m3u8"
}
rtmp2hls_transcode() {
# Encode the stream into multiple resolutions
ffmpeg -re -f flv -listen 1 -i "$1" \
-map 0:v:0 -map 0:a:0 \
-map 0:v:0 -map 0:a:0 \
-map 0:v:0 -map 0:a:0 \
-map 0:v:0 -map 0:a:0 \
-c:v:0 copy -b:v:0 5600k -c:a:0 copy -b:a:0 128k \
-c:v:1 libx264 -crf 18 -c:a:1 aac -ar:1 48000 \
-c:v:2 libx264 -crf 18 -c:a:2 aac -ar:2 44100 \
-c:v:3 libx264 -crf 18 -c:a:3 aac -ar:3 44100 \
-filter:v:1 'scale=-2:720' -b:a:1 128k \
-filter:v:2 'scale=-2:480' -b:a:2 128k \
-filter:v:3 'scale=-2:360' -b:a:3 128k \
-f hls \
-var_stream_map \
'v:0,a:0,name:1080p v:1,a:1,name:720p v:2,a:2,name:480p v:3,a:3,name:360p' \
$hls_flags \
-hls_segment_filename "$2/%v-%04d.ts" \
-master_pl_name "index.m3u8" \
"$2/index-%v.m3u8"
}
streamlink2rtmp() {
streamlink \
"$1" best -O \
| ffmpeg -i - -c copy -bsf:a aac_adtstoasc \
-f flv "$2"
}
hls_prog_copy() {
input="$1"
progs="$2"
outpath="$3"
imap=; omap=; a=0;
for p in $progs; do
imap="$imap -map p:$p";
omap="$omap v:$a,a:$a";
a=$((a+1));
done;
echo "input:$imap";
echo "output:$omap";
rm -rf "$outpath";
mkdir "$outpath";
ffmpeg -re -i "$input" \
$imap -c copy -v warning -stats \
-f hls -var_stream_map "$omap" $hls_flags \
-hls_segment_filename "$outpath/%v-%08d.ts" \
"$outpath/index-%v.m3u8"
}