[Bug 697672] New: VP8 passed through rtpbin decodes a single frame and then fails to decode until a key frame passed through
GStreamer (bugzilla.gnome.org)
bugzilla at gnome.org
Tue Apr 9 15:42:15 PDT 2013
https://bugzilla.gnome.org/show_bug.cgi?id=697672
GStreamer | gst-plugins-bad | 1.0.5
Summary: VP8 passed through rtpbin decodes a single frame and
then fails to decode until a key frame passed through
Classification: Platform
Product: GStreamer
Version: 1.0.5
OS/Version: Mac OS
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: gst-plugins-bad
AssignedTo: gstreamer-bugs at lists.freedesktop.org
ReportedBy: tcdgreenwood at hotmail.com
QAContact: gstreamer-bugs at lists.freedesktop.org
GNOME version: ---
When decoding VP8 through rtpbin you get a single frame or a short section of
video decoded and then vp8dec fails to decode until a keyframe. The issue is
caused by caps renegotiation happening after the first frame - which causes an
issue in rtpvp8depay and vp8enc. rtpvp8depay detects caps being set and marks
the current buffer as having a discontinuity, vp8enc in gst_vp8_dec_set_format
destroys the codec.
I have been able to get streams working nearly correctly by commenting out the
destroy of the vp8 codec from gst_vp8_dec_set_format. Though I am not sure
it's really correct.
Been reproduced on Mac and Ubuntu.
I can reproduce the issue using the following commands:
gst-launch-1.0 -v rtpbin name=rtpvp8 videotestsrc pattern=ball ! textoverlay
text="VP8" ! 'video/x-raw,width=320,height=240,framerate=15/1' ! vp8enc
cpu-used=15 keyframe-max-dist=10000 ! rtpvp8pay ! rtpvp8.send_rtp_sink_0
rtpvp8.send_rtp_src_0 ! udpsink async=false port=5000 host=::FFFF:7F00:0001
name=vrtpsink rtpvp8.send_rtcp_src_0 ! udpsink port=5001 host=::FFFF:7F00:0001
sync=false async=false name=vrtcpsink udpsrc name=receiver_rtcp_in port=5003
caps = "application/x-rtcp" ! rtpvp8.recv_rtcp_sink_0 udpsrc name=vp8recv
port=5002 caps="application/x-rtp, clock-rate=(int)90000,
encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96, media=(string)video"
! rtpvp8.recv_rtp_sink_0 rtpvp8. ! rtpvp8depay ! vp8dec ! videoconvert !
osxvideosink
gst-launch-1.0 -v rtpbin name=rtpvp8 videotestsrc pattern=ball ! textoverlay
text="VP8" ! 'video/x-raw,width=320,height=240,framerate=15/1' ! vp8enc
cpu-used=15 keyframe-max-dist=10000 ! rtpvp8pay ! rtpvp8.send_rtp_sink_0
rtpvp8.send_rtp_src_0 ! udpsink async=false port=5002 host=::FFFF:7F00:0001
name=vrtpsink rtpvp8.send_rtcp_src_0 ! udpsink port=5003 host=::FFFF:7F00:0001
sync=false async=false name=vrtcpsink udpsrc name=receiver_rtcp_in port=5001
caps = "application/x-rtcp" ! rtpvp8.recv_rtcp_sink_0 udpsrc name=vp8recv
port=5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000,
encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96" !
rtpvp8.recv_rtp_sink_0 rtpvp8. ! rtpvp8depay ! vp8dec ! videoconvert !
osxvideosink
The pipeline you run first will get a single static image of the ball. Running
this pipeline with export
GST_DEBUG=*:2,vp8dec:2,libav:4,avdec_h264:4,rtpvp8depay:6,rtpbasedepayload:6,GST_EVENT:4
shows relevant information. Excerpt from the output:
...
0:00:00.505060000 98869 0x7f9afa037190 DEBUG rtpbasedepayload
gstrtpbasedepayload.c:191:gst_rtp_base_depayload_setcaps:<rtpvp8depay0> Set
caps
0:00:00.505071000 98869 0x7f9afa037190 DEBUG rtpbasedepayload
gstrtpbasedepayload.c:201:gst_rtp_base_depayload_setcaps:<rtpvp8depay0> NPT
start 0
0:00:00.505080000 98869 0x7f9afa037190 DEBUG rtpbasedepayload
gstrtpbasedepayload.c:209:gst_rtp_base_depayload_setcaps:<rtpvp8depay0> NPT
stop 18446744073709551615
0:00:00.505097000 98869 0x7f9afa037190 INFO GST_EVENT
gstevent.c:628:gst_event_new_caps: creating caps event 0x7f9af9911990
/GstPipeline:pipeline0/GstRtpVP8Depay:rtpvp8depay0.GstPad:src: caps =
video/x-vp8, framerate=(fraction)0/1
/GstPipeline:pipeline0/GstVP8Dec:vp8dec0.GstPad:sink: caps = video/x-vp8,
framerate=(fraction)0/1
/GstPipeline:pipeline0/GstRtpVP8Depay:rtpvp8depay0.GstPad:sink: caps =
application/x-rtp, clock-rate=(int)90000,
encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96, media=(string)video,
ssrc=(uint)1283409451
/GstPipeline:pipeline0/GstRtpBin:rtpvp8.GstGhostPad:recv_rtp_src_0_1283409451_96.GstProxyPad:proxypad5:
caps = application/x-rtp, clock-rate=(int)90000,
encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96, media=(string)video,
ssrc=(uint)1283409451
0:00:00.505290000 98869 0x7f9afa037190 LOG rtpbasedepayload
gstrtpbasedepayload.c:284:gst_rtp_base_depayload_chain:<rtpvp8depay0> discont
1, seqnum 1322, rtptime 2231324518, pts 0:00:00.050053000, dts
0:00:00.050053000
0:00:00.505304000 98869 0x7f9afa037190 WARN rtpvp8depay
gstrtpvp8depay.c:118:gst_rtp_vp8_depay_process:<rtpvp8depay0> Discontinuity,
flushing adapter
0:00:00.505337000 98869 0x7f9afa037190 LOG rtpvp8depay
gstrtpvp8depay.c:176:gst_rtp_vp8_depay_process:<rtpvp8depay0> Pushing buffer
end of frame - seq 1322
0:00:00.505349000 98869 0x7f9afa037190 LOG rtpbasedepayload
gstrtpbasedepayload.c:520:set_headers:<rtpvp8depay0> Marking DISCONT on output
buffer
0:00:00.505357000 98869 0x7f9afa037190 INFO GST_EVENT
gstevent.c:709:gst_event_new_segment: creating segment event 0x110fd6ee8
0:00:00.505374000 98869 0x7f9afa037190 DEBUG rtpbasedepayload
gstrtpbasedepayload.c:559:gst_rtp_base_depayload_prepare_push:<rtpvp8depay0>
Pushed newsegment event on this first buffer
0:00:00.505400000 98869 0x7f9afa037190 WARN vp8dec
gstvp8dec.c:418:open_codec:<vp8dec0> VPX preprocessing error: unsupported
bitstream
0:00:00.505433000 98869 0x7f9afa037190 ERROR videodecoder
gstvideodecoder.c:2257:gst_video_decoder_prepare_finish_frame:<vp8dec0> No
buffer to output !
0:00:00.505456000 98869 0x7f9afa037190 LOG rtpbasedepayload
gstrtpbasedepayload.c:284:gst_rtp_base_depayload_chain:<rtpvp8depay0> discont
0, seqnum 1323, rtptime 2231330517, pts 0:00:00.116708511, dts
0:00:00.116708511
0:00:00.505470000 98869 0x7f9afa037190 LOG rtpvp8depay
gstrtpvp8depay.c:176:gst_rtp_vp8_depay_process:<rtpvp8depay0> Pushing buffer
end of frame - seq 1323
0:00:00.505483000 98869 0x7f9afa037190 WARN vp8dec
gstvp8dec.c:418:open_codec:<vp8dec0> VPX preprocessing error: unsupported
bitstream
0:00:00.505492000 98869 0x7f9afa037190 ERROR videodecoder
gstvideodecoder.c:2257:gst_video_decoder_prepare_finish_frame:<vp8dec0> No
buffer to output !
...
The errors repeat until a keyframe is received.
--
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list