GNOME Bugzilla – Bug 740744
Caps negotiation between matroskademux and rtpopuspay fails
Last modified: 2014-12-24 09:24:01 UTC
Run simple filesrc ! matroskademux ! rtpopuspay ! fakesink, it fails because of caps negotiation fails. Running the same file in filesrc ! matroskademux ! opusdec ! fakesink works fine. I did a simple test by removing multistream = (boolean) FALSE from sink-caps template in rtpopuspay.c and the first pipeline works fine.
The Opus RTP mapping can't do (or at least could not at the time) multistream, this is the reason for the restriction. Adding opusparse between matroskademux and rtpopuspay works, but only because, in the absence of external info (eg, ogg headers), it assumes non multistream. So this patch adds the ability for matroskamux/matroskademux to use the OpusHead header in codec private data. If present, this will allow matroskademux to signal multistream correctly.
Created attachment 292918 [details] [review] support OpusHead in codec private
commit b7413279d9ff2956b04360f40a806557f3c18b9c Author: Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> Date: Wed Dec 17 17:36:18 2014 +0000 matroska: mux/demux the OpusHead header This is meant to be so (https://wiki.xiph.org/MatroskaOpus - while it is marked as a draft, this part was confirmed to be correct on IRC), and allows one to determine whether a demuxed stream is multistream or not, and thus set the multistream caps field accordingly. In turn, this means downstream does not have to guess. https://bugzilla.gnome.org/show_bug.cgi?id=740744
Note that it will not work without opusparse if the matroska file does not include an OpusHead in codec private data (ie, files previously created by gstreamer without this patch).