aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2022-09-19 16:19:41 +0200
committerdec05eba <dec05eba@protonmail.com>2022-09-19 16:19:41 +0200
commit85cd5a9d113de506c0722acaada68af56c9f9642 (patch)
treec9d3d78b1c4c335c0c48144a1d39c7ef1ae8ce1a
parent59b730a806c92acbf999a7fa35b8ece9fb7c3203 (diff)
Move scripts to script dir, add youtube-hls-stream script, fix twitch stream script
-rw-r--r--README.md2
-rwxr-xr-xscripts/interactive.sh (renamed from interactive.sh)2
-rwxr-xr-xscripts/list-sinks.sh (renamed from list-sinks.sh)0
-rwxr-xr-xscripts/replay.sh (renamed from replay.sh)2
-rwxr-xr-xscripts/toggle-recording-selected.sh (renamed from toggle-recording-selected.sh)0
-rwxr-xr-xscripts/twitch-stream-local-copy.sh (renamed from twitch-stream-local-copy.sh)2
-rwxr-xr-xscripts/twitch-stream.sh (renamed from twitch-stream.sh)2
-rwxr-xr-xscripts/youtube-hls-stream.sh11
-rw-r--r--src/main.cpp2
9 files changed, 18 insertions, 5 deletions
diff --git a/README.md b/README.md
index 6a796f8..08550ab 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ If you use a distro that isn't user friendly, such as fedora, then you can also
Recording monitors requires a gpu with NvFBC support (note: this is not required when recording a single window!). Normally only tesla and quadro gpus support this, but by using [nvidia-patch](https://github.com/keylase/nvidia-patch) or [nvlax](https://github.com/illnyang/nvlax) you can do this on all gpus that support nvenc as well (gpus as old as the nvidia 600 series), provided you are not using outdated gpu drivers.
# How to use
-Run `interactive.sh` or run gpu-screen-recorder directly, for example: `gpu-screen-recorder -w $(xdotool selectwindow) -c mp4 -f 60 -a "$(pactl get-default-sink).monitor" -o test_video.mp4`\
+Run `scripts/interactive.sh` or run gpu-screen-recorder directly, for example: `gpu-screen-recorder -w $(xdotool selectwindow) -c mp4 -f 60 -a "$(pactl get-default-sink).monitor" -o test_video.mp4`\
Then stop the screen recorder with Ctrl+C, which will also save the recording.\
Send signal SIGUSR1 (`killall -SIGUSR1 gpu-screen-recorder`) to gpu-screen-recorder when in replay mode to save the replay. The paths to the saved files is output to stdout after the recording is saved.\
You can find the default output audio device (headset, speakers) with the command `pactl get-default-sink`. Add `monitor` to the end of that to use that as an audio input in gpu-screen-recorder.\
diff --git a/interactive.sh b/scripts/interactive.sh
index c02e7e9..63b0eae 100755
--- a/interactive.sh
+++ b/scripts/interactive.sh
@@ -14,4 +14,4 @@ read output_file_name
output_dir=$(dirname "$output_file_name")
mkdir -p "$output_dir"
-./gpu-screen-recorder -w "$window_id" -c mp4 -f "$fps" -a "$selected_audio_input" -o "$output_file_name"
+gpu-screen-recorder -w "$window_id" -c mp4 -f "$fps" -a "$selected_audio_input" -o "$output_file_name"
diff --git a/list-sinks.sh b/scripts/list-sinks.sh
index e5fc44f..e5fc44f 100755
--- a/list-sinks.sh
+++ b/scripts/list-sinks.sh
diff --git a/replay.sh b/scripts/replay.sh
index 6bbbb54..cf6c494 100755
--- a/replay.sh
+++ b/scripts/replay.sh
@@ -3,4 +3,4 @@
[ "$#" -ne 4 ] && echo "usage: replay.sh <window_id> <fps> <replay_time_sec> <output_directory>" && exit 1
active_sink="$(pactl get-default-sink).monitor"
mkdir -p "$4"
-./gpu-screen-recorder -w "$1" -c mp4 -f "$2" -a "$active_sink" -r "$3" -o "$4"
+gpu-screen-recorder -w "$1" -c mp4 -f "$2" -a "$active_sink" -r "$3" -o "$4"
diff --git a/toggle-recording-selected.sh b/scripts/toggle-recording-selected.sh
index 663f360..663f360 100755
--- a/toggle-recording-selected.sh
+++ b/scripts/toggle-recording-selected.sh
diff --git a/twitch-stream-local-copy.sh b/scripts/twitch-stream-local-copy.sh
index 1128a5e..dba9d15 100755
--- a/twitch-stream-local-copy.sh
+++ b/scripts/twitch-stream-local-copy.sh
@@ -4,4 +4,4 @@
[ "$#" -ne 4 ] && echo "usage: twitch-stream-local-copy.sh <window_id> <fps> <livestream_key> <local_file>" && exit 1
active_sink="$(pactl get-default-sink).monitor"
-./gpu-screen-recorder -w "$1" -c flv -f "$2" -a "$active_sink" | tee -- "$4" | ffmpeg -i pipe:0 -c:v copy -f flv -- "rtmp://live.twitch.tv/app/$3"
+gpu-screen-recorder -w "$1" -c flv -f "$2" -a "$active_sink" | tee -- "$4" | ffmpeg -i pipe:0 -c copy -f flv -- "rtmp://live.twitch.tv/app/$3"
diff --git a/twitch-stream.sh b/scripts/twitch-stream.sh
index 12928c9..cd4737a 100755
--- a/twitch-stream.sh
+++ b/scripts/twitch-stream.sh
@@ -2,4 +2,4 @@
[ "$#" -ne 3 ] && echo "usage: twitch-stream.sh <window_id> <fps> <livestream_key>" && exit 1
active_sink="$(pactl get-default-sink).monitor"
-./gpu-screen-recorder -w "$1" -c flv -f "$2" -a "$active_sink" "rtmp://live.twitch.tv/app/$3"
+gpu-screen-recorder -w "$1" -c flv -f "$2" -a "$active_sink" -o "rtmp://live.twitch.tv/app/$3"
diff --git a/scripts/youtube-hls-stream.sh b/scripts/youtube-hls-stream.sh
new file mode 100755
index 0000000..21619af
--- /dev/null
+++ b/scripts/youtube-hls-stream.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+[ "$#" -ne 3 ] && echo "usage: youtube-hls-stream.sh <window_id> <fps> <livestream_key>" && exit 1
+mkdir "youtube_stream"
+cd "youtube_stream"
+active_sink="$(pactl get-default-sink).monitor"
+gpu-screen-recorder -w "$1" -c mpegts -f "$2" -a "$active_sink" | ffmpeg -i pipe:0 -c copy -f hls \
+ -hls_time 2 -hls_flags independent_segments -hls_flags delete_segments -hls_segment_type mpegts -hls_segment_filename stream%02d.ts -master_pl_name stream.m3u8 out1 &
+echo "Waiting until stream segments are created..."
+sleep 10
+ffmpeg -i stream.m3u8 -c copy -- "https://a.upload.youtube.com/http_upload_hls?cid=$3&copy=0&file=stream.m3u8"
diff --git a/src/main.cpp b/src/main.cpp
index 25b34d4..c1ab013 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -533,6 +533,8 @@ static AVCodecContext *create_video_codec_context(AVFormatContext *av_format_con
codec_context->max_b_frames = 0;
codec_context->pix_fmt = AV_PIX_FMT_CUDA;
codec_context->color_range = AVCOL_RANGE_JPEG;
+ if(use_hevc)
+ codec_context->codec_tag = MKTAG('h', 'v', 'c', '1');
switch(video_quality) {
case VideoQuality::MEDIUM:
codec_context->bit_rate = 10000000 + (codec_context->width * codec_context->height) / 2;