ffmpegh.264rtplive-streamingpoint-to-point

ffmpeg is really slow at decoding h264 stream over RTP


I need some help getting ffplay to receive and decode a Real Time stream encoded in h264.

I'm trying to make a point-to-point stream between computer A receiving video frames from a Kinect and computer B running ffplay to show the livestream.

These are the commands I'm running on both computers.

Computer A (RPI 3)

ffmpeg -f rawvideo -vcodec rawvideo -pix_fmt rgb24 -s 640x480 -i - -threads 4 -preset ultrafast -codec:v libx2 64 -an -f rtp rtp://192.168.0.100:2000

This is what ffmpeg outputs:

fps= 14 q=12.0 size=856kB time=00:00:05.56 bitrate=1261.4kbits/s speed=0.54x

The out stream runs in between 10-20 frames. It's not good, but I can work with that.

Computer B

ffplay -protocol_whitelist "file,udp,rtp" -probesize 32 -sync ext -i streaming.sdp

streaming.sdp

v=0
0=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.0.100
t=0 0
a=tool:libavformat 57.56.100
m=video 2000 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1

I'm getting the stream, but at about 0.0001fps which is clearly bad. My guess is I'm missing something on the ffplay command, since ffmpeg shows a more stable and fast stream, but I can't seem to find what I'm missing.


Solution

  • The problem wasn't on ffmpeg, but on the code I wrote that was grabbing the data from the device. I was receiving the same frame multiple times, and blocking the thread capturing data, making most of the frames a duplicate of the first one.