feat: update video encoding to use nvautogpuh264enc for NVIDIA driver 590+ support. (#667)

This commit is contained in:
Miroslav Šedivý
2026-07-31 14:28:19 +02:00
committed by GitHub
parent baf6eee8a9
commit e6239d6a51
4 changed files with 33 additions and 8 deletions
+7 -1
View File
@@ -162,7 +162,13 @@ func NewVideoPipeline(rtpCodec codec.RTPCodec, display string, pipelineSrc strin
return "", err
}
pipelineStr = fmt.Sprintf(videoSrc+"video/x-raw,format=NV12 ! nvh264enc name=encoder preset=2 gop-size=25 spatial-aq=true temporal-aq=true bitrate=%d vbv-buffer-size=%d rc-mode=6 ! h264parse config-interval=-1 ! video/x-h264,stream-format=byte-stream,profile=constrained-baseline"+pipelineStr, display, fps, bitrate, vbvbuf)
// nvautogpuh264enc (GStreamer 1.22+) works better with NVIDIA drivers 590+; fall back to nvh264enc for older setups
nvencElem := "nvh264enc"
if err := gst.CheckElement("nvautogpuh264enc"); err == nil {
nvencElem = "nvautogpuh264enc"
}
pipelineStr = fmt.Sprintf(videoSrc+"video/x-raw,format=NV12 ! %s name=encoder preset=2 gop-size=25 spatial-aq=true temporal-aq=true bitrate=%d vbv-buffer-size=%d rc-mode=6 ! h264parse config-interval=-1 ! video/x-h264,stream-format=byte-stream,profile=constrained-baseline"+pipelineStr, display, fps, nvencElem, bitrate, vbvbuf)
default:
// https://gstreamer.freedesktop.org/documentation/openh264/openh264enc.html?gi-language=c#openh264enc
// gstreamer1.0-plugins-bad
+11
View File
@@ -199,6 +199,17 @@ func CheckPlugins(plugins []string) error {
return nil
}
func CheckElement(element string) error {
elementcstr := C.CString(element)
factory := C.gst_element_factory_find(elementcstr)
C.free(unsafe.Pointer(elementcstr))
if factory == nil {
return fmt.Errorf("required gstreamer element %s not found", element)
}
C.gst_object_unref(C.gpointer(factory))
return nil
}
//export goHandlePipelineBuffer
func goHandlePipelineBuffer(pipelineID C.int, buf C.gpointer, bufLen C.int, duration C.guint64, deltaUnit C.gboolean) {
defer C.g_free(buf)