I am using 1. Raspberry Pi 4 Model B which has 2 HDMI ports. 2. Gstreamer-1.0
I have two videos saved in memory card. I want to drive two videos to two different HDMI port and play videos in two different Displays simultaneously. I would like to know the Gstreamer pipeline to access the HDMI-1 and HDMI-2 ports and also play two different videos in different displays simultaneously.
Here I am trying to drive video.mp4 to HDMI-2.
gst-launch-1.0 playbin3 videosink="mfw-v4lsink device=dev/video18" uri=file:///home/pi/Downloads/video.mp4
I even tried
gst-launch-1.0 playbin3 videosink="mfw-v4lsink device=HDMI-2" uri=file:///home/pi/Downloads/video.mp4
and also
gst-launch-1.0 playbin3 videosink="mfw-v4lsink device=dev/HDMI-2" uri=file:///home/pi/Downloads/video.mp4
I am not able to drive the video to HDMI-2 port. I expect the video to be played in HDMI-2, but the actual output is coming in HDMI-1 for all the above 3 given pipelines.
In downloads I have .mkv .mp4 and .avi files. I am trying to drive video to different HDMI port. I have connected two monitors to two hdmi port. I used the command modetest. I have only one plane-id. That is 28
I used the following pipeline
gst-launch-1.0 -vvv -e filesrc location=/home/pi/Downloads/count.mkv ! matroskademux ! h264parse ! v4l2h264dec ! kmssink plane-id=28
and I got the following error
Setting pipeline to PAUSED ... Pipeline is PREROLLING ... /GstPipeline:pipeline0/GstKMSSink:kmssink0: display-width = 1920 /GstPipeline:pipeline0/GstKMSSink:kmssink0: display-height = 1080 /GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:sink: caps = video/x-h264, level=(string)3, profile=(string)high, codec_data=(buffer)0164001effe1001c6764001eacd940b43dbff00080009100000303e90000ea600f162d9601000668ebe3cb22c0, stream-format=(string)avc, alignment=(string)au, width=(int)720, height=(int)480, pixel-aspect-ratio=(fraction)8/9, framerate=(fraction)30000/1001, interlace-mode=(string)mixed /GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:src: caps = video/x-h264, level=(string)3, profile=(string)high, stream-format=(string)byte-stream, alignment=(string)au, width=(int)720, height=(int)480, pixel-aspect-ratio=(fraction)8/9, framerate=(fraction)30000/1001, interlace-mode=(string)mixed, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true ERROR: from element /GstPipeline:pipeline0/v4l2h264dec:v4l2h264dec0: Device '/dev/video10' does not support interleaved interlacing Additional debug info: gstv4l2object.c(3817): gst_v4l2_object_set_format_full (): /GstPipeline:pipeline0/v4l2h264dec:v4l2h264dec0: Device wants progressive interlacing ERROR: pipeline doesn't want to preroll. Setting pipeline to NULL ... Freeing pipeline ...
If I use plane-id= 80, I get following error
Setting pipeline to PAUSED ... ERROR: Pipeline doesn't want to pause. ERROR: from element /GstPipeline:pipeline0/GstKMSSink:kmssink0: Could not find a plane for crtc Additional debug info: gstkmssink.c(755): gst_kms_sink_start (): /GstPipeline:pipeline0/GstKMSSink:kmssink0 Setting pipeline to NULL ...
I tried using fbdevsink
$ gst-launch-1.0 v4l2src ! jpegdec ! fbdevsink device=/dev/fb0gst-launch-1.0 -v videotestsrc ! fbdevsink device=/dev/fb0
I used this command and it is showing only one frame buffer
pi@raspberrypi:~ $ ls -l /dev/fb* crw-rw---- 1 root video 29, 0 Sep 13 11:10 /dev/fb0