I checked your pipelines and they indeed will not work:
You sender pipeline:
gst-launch-1.0 --gst-debug=*:2 -v uridecodebin uri=file:/mnt/ssd/Serenity_Trailer.mp4 caps="video/x-h264" ! h264parse ! video/x-h264,stream-format=byte-stream ! rtph264pay ! fdsink fd=1 | ./talker eth0 1024
is missing a demultiplexer element, e.g. qtdemux:
gst-launch-1.0 --gst-debug=*:2 -vm uridecodebin uri=file:/mnt/ssd/Serenity_Trailer.mp4 ! qtdemux ! h264parse ! video/x-h264,stream-format=byte-stream ! rtph264pay ! fdsink fd=1 | ./talker eth0 1024
When running this pipeline, as said before, you will find the correct application/x-rtp caps shown at stdout. You have to copy these caps over to the receiver pipeline. Otherwise, the receiver pipeline has no means to figure out what it is receiving.
./listener eth3 1024 | gst-launch-1.0 --gst-debug=*:2 -v fdsrc fd=0 ! capsfilter caps="application/x-rtp, ....." ! rtpjitterbuffer latency=200 ! rtph264depay ! decodebin ! videoconvert ! autovideosink
Btw, you could have used gst-inspect-1.0 fdsrc to see that fdsrc does not have a caps property.
Example of rtp h264 caps:
"application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)42c01e, sprop-parameter-sets=(string)"Z0LAHtwLQ9sBEAAAAwAQAAADAyhA\,aM48gA\=\=", payload=(int)96, ssrc=(uint)2323517954, timestamp-offset=(uint)2162767804, seqnum-offset=(uint)16555, a-framerate=(string)25"