[gst-devel] distorted video encoded with x264

Rob robert.swain at gmail.com
Thu Dec 16 10:53:38 CET 2010


On 15 December 2010 21:02, Rafael Sousa <rafael.lmsousa at gmail.com> wrote:
> I'm using the versions of gstreamer installed from ubuntu 10.10 apt-get.
> I've installed the gstreamer, gst-plugins-bad, gst-plugins-good,
> gst-plugins-ugly, gst-ffmpeg and I've installed the x264.
> The problem is that my pipeline gives as result a blurring video. My
> pipeline works to read a YUV file at the sender, encodes it in H.264, and
> sends it to receiver using RTP in encoding time. At the receiver, it
> receives the stream and stores it in YUV format again for posterior process.

Using a newer version of x264 without recompiling -ugly against that
newer version will not make use of that newer version of x264. In
fact, x264enc should fail to load unless you still have the x264
version against which it was linked.

> The pipeline is as follows:
> Sender:
> "gstrtpbin name=rtpbin filesrc location=paris_cif.yuv blocksize=152064
> ! video/x-raw-yuv, width=352, height=288, framerate=(fraction)15/1,
> format=(fourcc)I420 ! x264enc, key-int-max=30, key-int-min=15,
> intra-refresh=true ! rtph264pay
> ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! udpsink host=127.0.0.1
> port=5000 rtpbin.send_rtcp_src_0 ! udpsink host=5003 port=5001 sync=false
> async=false udpsrc port=5005 ! rtpbin.recv_rtcp_sink_0 "

Why don't you set a rate control method? The default is 1-pass ABR
2Mbps which should be overkill for 352x288 15fps.

> Receiver:
> "gstrtpbin name=rtpbin udpsrc
> caps=\"application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264" port=5000
> ! rtpbin.recv_rtp_sink_0 rtpbin. ! rtph264depay ! ffdec_h264 ! filesink
> location=example.yuv udpsrc port=5001 !
> rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0 ! udpsink port=5005
> sync=false async=false"
> I don't know why the video is blurring since I've tested it localhost,
> without loss rates. The command that I'm using to watch the result is:
> mplayer example.yuv -demuxer rawvideo -rawvideo cif
> I took a screenshot of the video, it is in annex. Please, anyone can help?

The screenshot looks like heavy over-quantisation and subsequent very
heavy in-loop deblocking. This normally means that, considering the
bit rate should be overkill for this resolution and frame rate,
x264enc is not configured correctly.

I strongly recommend you actually set a rate control method, even if
it means just choosing a bit rate appropriate for your content. Then I
would recommend making use of the presets and tunings. For your
purposes you probably want a faster preset (whatever your cpu can
handle though default of medium may be OK, if not, you could reduce
the preset until it consistently and reliably encodes in realtime on
your machine) and the zerolatency tuning.

If you're still having issues, you made need to build gst from git
against x264 from git to see if the issue persists with current
development code. If it does, please report back.

Regards,
Rob




More information about the gstreamer-devel mailing list