playbin in Gstreamer is not able to play 4k video on TX2 board

Hi, I’m trying to play multiple 4k video successively using Gstreamer on tx2, therefore, my first step is to make sure playing one 4k video works, so I try this line from the gstreamer manual:

gst-launch-1.0 filesrc location=rhino-4k.mp4 ! qtdemux name=demux demux. ! queue ! h264parse ! omxh264dec ! nveglglessink

and it works like a charm!

However, I’m not able to play the 4k video using playbin:

gst-launch-1.0 playbin uri=file:///home/nvidia/workspace/gstreamer-try/rhino-4k.mp4

. It shows nothing but all the red stuff on the monitor and the log is like this:

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
NvMMLiteOpen : Block : BlockType = 261 
TVMR: NvMMLiteTVMRDecBlockOpen: 7907: NvMMLiteBlockOpen 
NvMMLiteBlockCreate : Block : BlockType = 261 
TVMR: cbBeginSequence: 1223: BeginSequence  3840x2160, bVPR = 0
TVMR: LowCorner Frequency = 345000 
TVMR: cbBeginSequence: 1622: DecodeBuffers = 3, pnvsi->eCodec = 4, codec = 0 
TVMR: cbBeginSequence: 1693: Display Resolution : (3840x2160) 
TVMR: cbBeginSequence: 1694: Display Aspect Ratio : (3840x2160) 
TVMR: cbBeginSequence: 1762: ColorFormat : 5 
TVMR: cbBeginSequence:1773 ColorSpace = NvColorSpace_YCbCr709
TVMR: cbBeginSequence: 1904: SurfaceLayout = 3
TVMR: cbBeginSequence: 2005: NumOfSurfaces = 10, InteraceStream = 0, InterlaceEnabled = 0, bSecure = 0, MVC = 0 Semiplanar = 1, bReinit = 1, BitDepthForSurface = 8 LumaBitDepth = 8, ChromaBitDepth = 8, ChromaFormat = 5
TVMR: cbBeginSequence: 2007: BeginSequence  ColorPrimaries = 1, TransferCharacteristics = 1, MatrixCoefficients = 1
Allocating new output: 3840x2160 (x 10), ThumbnailMode = 0
OPENMAX: HandleNewStreamFormat: 3464: Send OMX_EventPortSettingsChanged : nFrameWidth = 3840, nFrameHeight = 2160 

(gst-launch-1.0:3595): GStreamer-CRITICAL **: Registering meta implementation 'GstVideoMeta' without init function
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
TVMR: FrameRate = 30 
TVMR: NVDEC LowCorner Freq = (345000 * 1024) 
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:00.903358148
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Caught SIGSEGV
#0  syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1  0x0000007f932d3094 in g_cond_wait_until ()
#2  0x0000007f906b9be4 in ?? ()
#3  0x0000007f906c4468 in ?? ()
#4  0x0000007f906c5e48 in ?? ()
#5  0x0000007f934054e8 in gst_element_change_state (
#6  0x0000007f93405c80 in gst_element_set_state_func (element=0x7f7c041da0, 
#7  0x0000007f933dfa94 in gst_bin_element_set_state (next=GST_STATE_READY, 
#8  gst_bin_change_state_func (element=0x626190, transition=<optimized out>)
#9  0x0000007f92c480e8 in ?? ()
#10 0x000000000000001a in ?? ()
Spinning.  Please run 'gdb gst-launch-1.0 3595' to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core.

And then I try to use playbin to play a 2k video, which works (playing the video smoothly) but still has segfault message like this:

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
NvMMLiteOpen : Block : BlockType = 261 
TVMR: NvMMLiteTVMRDecBlockOpen: 7907: NvMMLiteBlockOpen 
NvMMLiteBlockCreate : Block : BlockType = 261 
TVMR: cbBeginSequence: 1223: BeginSequence  2560x1440, bVPR = 0
TVMR: LowCorner Frequency = 345000 
TVMR: cbBeginSequence: 1622: DecodeBuffers = 3, pnvsi->eCodec = 4, codec = 0 
TVMR: cbBeginSequence: 1693: Display Resolution : (2560x1440) 
TVMR: cbBeginSequence: 1694: Display Aspect Ratio : (2560x1440) 
TVMR: cbBeginSequence: 1762: ColorFormat : 5 
TVMR: cbBeginSequence:1773 ColorSpace = NvColorSpace_YCbCr709
TVMR: cbBeginSequence: 1904: SurfaceLayout = 3
TVMR: cbBeginSequence: 2005: NumOfSurfaces = 10, InteraceStream = 0, InterlaceEnabled = 0, bSecure = 0, MVC = 0 Semiplanar = 1, bReinit = 1, BitDepthForSurface = 8 LumaBitDepth = 8, ChromaBitDepth = 8, ChromaFormat = 5
TVMR: cbBeginSequence: 2007: BeginSequence  ColorPrimaries = 1, TransferCharacteristics = 1, MatrixCoefficients = 1
Allocating new output: 2560x1440 (x 10), ThumbnailMode = 0
OPENMAX: HandleNewStreamFormat: 3464: Send OMX_EventPortSettingsChanged : nFrameWidth = 2560, nFrameHeight = 1440 

(gst-launch-1.0:4118): GStreamer-CRITICAL **: Registering meta implementation 'GstVideoMeta' without init function
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
TVMR: FrameRate = 30 
TVMR: NVDEC LowCorner Freq = (345000 * 1024) 

^Chandling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:03.263713307
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Caught SIGSEGV
#0  syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1  0x0000007f92f46094 in g_cond_wait_until ()
#2  0x0000007f9036ebe4 in ?? ()
#3  0x0000007f90379468 in ?? ()
#4  0x0000007f9037ae48 in ?? ()
#5  0x0000007f930784e8 in gst_element_change_state (
#6  0x0000007f93078c80 in gst_element_set_state_func (element=0x7f7c041da0, 
#7  0x0000007f93052a94 in gst_bin_element_set_state (next=GST_STATE_READY, 
#8  gst_bin_change_state_func (element=0x626190, transition=<optimized out>)
#9  0x0000007f928bb0e8 in ?? ()
#10 0x000000000000001a in ?? ()
Spinning.  Please run 'gdb gst-launch-1.0 4118' to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core.

My video is downloaded using youtube-dl on youtube: https://www.youtube.com/watch?v=7IWp875pCxQ

using this command for 4k video:

youtube-dl -f 266 <the url>

and downloading 2k via:

youtube-dl -f 264 <the url>

The reason I’m trying to use the playbin plugin is because I want to use the “about-to-finish” signal to play multiple videos gaplessly. So it’s also great if anyone can give me a hint on how to implement this feature via customized pipeline. My pipeline code could be found here: https://gist.github.com/chichunchen/6b06130e10b32df04f461729038634e7

Thanks!

Hi chichunchen844,

We can reproduce the same error by following yours steps, we tried both JetPack-3.2 (r28.2) and JetPack-3,2,1 (r28.2.1) got the same error, issue is under investigating if able to be improved it.

Thanks

Please try

$ gst-launch-1.0 playbin uri=file:///home/nvidia/4k.mp4 <b>video-sink=nveglglessink</b>

This works like a charm, thanks for the help!