1
0
mirror of https://github.com/BELABOX/belacoder.git synced 2026-07-04 12:06:41 +00:00

Fix negative audio-video delay, update docs

This commit is contained in:
rationalsa
2021-06-19 02:03:55 +01:00
parent 131a50ec30
commit 2004d5e47c
32 changed files with 103 additions and 72 deletions
+4 -2
View File
@@ -35,7 +35,9 @@ Usage
Syntax: belacoder PIPELINE_FILE ADDR PORT [options]
Options:
-d <delay> Audio delay in milliseconds
-d <delay> Audio-video delay in milliseconds
-s <streamid> SRT stream ID
-l <latency> SRT latency in milliseconds
-b <bitrate file> Bitrate settings file, see below
Bitrate settings file syntax:
@@ -75,5 +77,5 @@ Please check the supplied pipelines for examples. Here are a few unorganised tip
* belacoder will work with arbitrary gstreamer pipelines as long as they're valid, however for dynamic bitrate control the video encoder **must** have `name=venc_bps` or `name=venc_kbps` and it must have a `bitrate` property changeable in the running state; the sink **must** be `appsink name=appsink`, which will stream to the SRT IP and port specified as command line arguments
* If a `textoverlay` element with `name=overlay` is specificed, then it will be dynamically updated to show the current bitrate
* An `identity name=delay signal-handoffs=TRUE` element can be used to adjust the PTS (presentation timestamp) of a stream by `DELAY` milliseconds. Use it to synchronise the audio and video if needed (e.g. DELAY of around 900 for a Gopro Hero7 with stabilisation enabled)
* `identity name=a_delay signal-handoffs=TRUE` and `identity name=v_delay signal-handoffs=TRUE` elements can be used to adjust the PTS (presentation timestamp) of the audio and video streams respectively by `DELAY` milliseconds. Use them to synchronise the audio and video if needed (e.g. audio delay of around 900 for a Gopro Hero7 with stabilisation enabled)
* The Jetson Nano hardware encoders seem biased towards allocating most of the bitrate budget to I-frames, while heavily compressing P-frames, especially on lower bitrates. This can heavily affect image quality when most of the image is moving and this is why we limit the quantization range in our pipelines using `qp-range`. This range makes a big improvement over the defaults, however in some cases results can probably be further improved with different parameters.
+9 -9
View File
@@ -45,7 +45,7 @@
// BITRATE_DECR_MIN + cur_bitrate/BITRATE_DECR_SCALE
// settings ranges
#define MAX_SOUND_DELAY 10000
#define MAX_AV_DELAY 10000
#define MIN_SRT_LATENCY 100
#define MAX_SRT_LATENCY 10000
#define DEF_SRT_LATENCY 2000
@@ -68,7 +68,7 @@ SRTSOCKET sock;
int enc_bitrate_div = 1;
int sound_delay = 0;
int av_delay = 0;
int min_bitrate = MIN_BITRATE;
int max_bitrate = DEF_BITRATE;
@@ -349,7 +349,7 @@ int init_srt(char *host, char *port, char *stream_id) {
void exit_syntax() {
fprintf(stderr, "Syntax: belacoder PIPELINE_FILE ADDR PORT [options]\n\n");
fprintf(stderr, "Options:\n");
fprintf(stderr, " -d <delay> Audio delay in milliseconds\n");
fprintf(stderr, " -d <delay> Audio-video delay in milliseconds\n");
fprintf(stderr, " -s <streamid> SRT stream ID\n");
fprintf(stderr, " -l <latency> SRT latency in milliseconds\n");
fprintf(stderr, " -b <bitrate file> Bitrate settings file, see below\n\n");
@@ -365,7 +365,7 @@ void exit_syntax() {
static void cb_delay (GstElement *identity, GstBuffer *buffer, gpointer data) {
buffer = gst_buffer_make_writable(buffer);
GST_BUFFER_PTS (buffer) += GST_SECOND * sound_delay / 1000;
GST_BUFFER_PTS (buffer) += GST_SECOND * abs(av_delay) / 1000;
}
void cb_pipeline (GstBus *bus, GstMessage *message, gpointer user_data) {
@@ -395,9 +395,9 @@ int main(int argc, char** argv) {
bitrate_filename = optarg;
break;
case 'd':
sound_delay = strtol(optarg, NULL, 10);
if (sound_delay < -MAX_SOUND_DELAY || sound_delay > MAX_SOUND_DELAY) {
fprintf(stderr, "Maximum sound delay +/- %d\n\n", MAX_SOUND_DELAY);
av_delay = strtol(optarg, NULL, 10);
if (av_delay < -MAX_AV_DELAY || av_delay > MAX_AV_DELAY) {
fprintf(stderr, "Maximum sound delay +/- %d\n\n", MAX_AV_DELAY);
exit_syntax();
}
break;
@@ -496,8 +496,8 @@ int main(int argc, char** argv) {
// Optional sound delay via an identity element
fprintf(stderr, "Sound delay: %d ms\n", sound_delay);
GstElement *identity_elem = gst_bin_get_by_name(GST_BIN(gst_pipeline), "delay");
fprintf(stderr, "A-V delay: %d ms\n", av_delay);
GstElement *identity_elem = gst_bin_get_by_name(GST_BIN(gst_pipeline), av_delay >= 0 ? "a_delay" : "v_delay");
if (GST_IS_ELEMENT(identity_elem)) {
g_object_set(G_OBJECT(identity_elem), "signal-handoffs", TRUE, NULL);
g_signal_connect(identity_elem, "handoff", G_CALLBACK(cb_delay), NULL);
+3 -2
View File
@@ -1,9 +1,10 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
videoconvert !
x264enc speed-preset=2 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1920,height=1080 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
videoconvert !
x264enc speed-preset=2 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1920,height=1080,framerate=30/1 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
videoconvert !
x264enc speed-preset=2 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1280,height=720 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
videoconvert !
x264enc speed-preset=2 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1280,height=720,framerate=30/1 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
videoconvert !
x264enc speed-preset=2 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,9 +1,10 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
videoconvert !
x264enc speed-preset=3 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1920,height=1080 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
videoconvert !
x264enc speed-preset=3 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1920,height=1080,framerate=30/1 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
videoconvert !
x264enc speed-preset=3 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1280,height=720 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
videoconvert !
x264enc speed-preset=3 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1280,height=720,framerate=30/1 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
videoconvert !
x264enc speed-preset=3 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,9 +1,10 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,9 +1,10 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=1920,height=1080 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
videorate ! video/x-raw,framerate=7013/234 !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=1920,height=1080 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
videorate ! video/x-raw,framerate=30/1 !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=1920,height=1080 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,9 +1,10 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=2560,height=1440 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
videorate ! video/x-raw,framerate=7013/234 !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=2560,height=1440 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
videorate ! video/x-raw,framerate=30/1 !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=2560,height=1440 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,9 +1,10 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=3840,height=2160 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=2 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,9 +1,10 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=1280,height=720 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
videorate ! video/x-raw,framerate=7013/234 !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=1280,height=720 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
videorate ! video/x-raw,framerate=30/1 !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=1280,height=720 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,13 +1,13 @@
rtmpsrc location=rtmp://127.0.0.1/publish/live !
flvdemux name=demux
demux.video ! h264parse ! nvv4l2decoder ! nvvidconv !
demux.video ! identity name=v_delay signal-handoffs=TRUE ! h264parse ! nvv4l2decoder ! nvvidconv !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
demux.audio ! aacparse ! avdec_aac ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
demux.audio ! aacparse ! avdec_aac ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1920,height=1080 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1920,height=1080,framerate=30/1 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
image/jpeg,width=1280,height=720 ! jpegparse ! jpegdec !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
image/jpeg,width=1280,height=720,framerate=30/1 ! jpegparse ! jpegdec !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 !
nvv4l2h265enc control-rate=1 qp-range="28,50:0,38:0,50" iframeinterval=60 preset-level=4 maxperf-enable=true EnableTwopassCBR=true insert-sps-pps=true name=venc_bps !
h265parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h265parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
+3 -2
View File
@@ -1,10 +1,11 @@
v4l2src !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=1280,height=720 !
nvvidconv !
x264enc speed-preset=2 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,11 +1,12 @@
v4l2src !
videorate ! video/x-raw,framerate=7013/234 !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=1280,height=720 !
nvvidconv !
x264enc speed-preset=2 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink
@@ -1,11 +1,12 @@
v4l2src !
videorate ! video/x-raw,framerate=30/1 !
identity name=v_delay signal-handoffs=TRUE !
textoverlay text='' valignment=top halignment=right font-desc="Sans, 10" name=overlay !
nvvidconv interpolation-method=5 ! video/x-raw(memory:NVMM),width=1280,height=720 !
nvvidconv !
x264enc speed-preset=2 key-int-max=60 name=venc_kbps !
h264parse config-interval=-1 ! queue ! mux.
alsasrc device=hw:2 ! identity name=delay signal-handoffs=TRUE ! volume volume=1.0 !
h264parse config-interval=-1 ! queue max-size-time=10000000000 max-size-buffers=1000 max-size-bytes=41943040 ! mux.
alsasrc device=hw:2 ! identity name=a_delay signal-handoffs=TRUE ! volume volume=1.0 !
audioconvert ! avenc_aac bitrate=131072 ! aacparse ! queue max-size-time=10000000000 max-size-buffers=1000 ! mux.
mpegtsmux name=mux !
appsink name=appsink