Hi there,
I tested the following Gstreamer pipeline to handle 4k H.264 video stream, it is not so bad to use autovideosink as receiver, the video data’s bitrate is around 5000Kbps.
gst-launch-1.0 -v udpsrc ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264delay ! h264parse ! omxh264dec ! autovideosink false=true
and it is just a test pipeline, since I am using openGL to handle video data, and the openGL texture format is in “RGBA” format right now, so “nvvidcov”(NV12->RGBA) is used after “omxh264dec” to push the final raw video data using “appsink”, we finally dump video buffer from “appsink” to our custom openGL’s texture, we test this method using “filesrc” to read a local file, and it seems not bad, the file data is at 4096x1716@24fps.
gst-launch-1.0 -v filesrc location=*.mp4 ! qtdemux ! queue ! h264parse ! omxh264dec ! nvvidconv ! "video/x-raw,format=(string)RGBA" ! appsink
the problem is when I move the source of above pipeline to “udpsrc” to handle “3840x2160@30fps”, the omxh264dec’s decoding frame rate drop to around 17fps, I am sure that “omxh264dec” can handle 4k@30 from my first test pipeline, and “nvvidconv” can also handle “4096x1716@24fps” without any problem from my second pipeline, do any one have the same problem or any good solution to my problem, thanks in advance, I also post my final pipeline with debug information below.
gst-launch-1.0 -v udpsrc ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264delay ! h264parse ! omxh264dec ! nvvidconv ! "video/x-raw,format=(string)RGBA" ! appsink
Inside NvxLiteH264DecoderLowLatencyInitNvxLiteH264DecoderLowLatencyInit set DPB and MjstreamingInside NvxLiteH265DecoderLowLatencyInitNvxLiteH265DecoderLowLatencyInit set DPB and MjstreamingNvMMLiteOpen : Block : BlockType = 261
TVMR: NvMMLiteTVMRDecBlockOpen: 6736: NvMMLiteBlockOpen
NvMMLiteBlockCreate : Block : BlockType = 261
NvMMLiteTVMRDecSetAttribute:: Error status reporting set to 1
TVMR: cbBeginSequence: 803: BeginSequence 3840x2160, bVPR = 0
TVMR: cbBeginSequence: 1147: DecodeBuffers = 6, pnvsi->eCodec = 4, codec = 0
TVMR: cbBeginSequence: 1206: Display Resolution : (3840x2160)
TVMR: cbBeginSequence: 1207: Display Aspect Ratio : (3840x2160)
TVMR: cbBeginSequence: 1247: ColorFormat : 5
TVMR: cbBeginSequence:1261 ColorSpace = NvColorSpace_YCbCr601
TVMR: cbBeginSequence: 1429: SurfaceLayout = 3
TVMR: cbBeginSequence: 1474: NumOfSurfaces = 10, InteraceStream = 0, InterlaceEnabled = 0, bSecure = 0, MVC = 0 Semiplanar = 1, bReinit = 1, BitDepthForSurface = 8
Allocating new output: 3840x2160 (x 12), ThumbnailMode = 0
TVMR: FrameRate = 1890
TVMR: NVDEC LowCorner Freq = (576000 * 1024)
---> TVMR: Video-conferencing detected !!!!!!!!!
TVMR: FrameRate = 18.425402
TVMR: FrameRate = 17.721981
TVMR: FrameRate = 17.178087
TVMR: FrameRate = 17.182632
TVMR: FrameRate = 19.416684
TVMR: FrameRate = 17.247594