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:
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 !
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user