After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 740744 - Caps negotiation between matroskademux and rtpopuspay fails
Caps negotiation between matroskademux and rtpopuspay fails
Product: GStreamer
Classification: Platform
Component: gst-plugins-bad
git master
Other All
: Normal normal
: 1.5.1
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Reported: 2014-11-26 12:20 UTC by mersad
Modified: 2014-12-24 09:24 UTC
See Also:
GNOME target: ---
GNOME version: ---

support OpusHead in codec private (6.36 KB, patch)
2014-12-17 18:24 UTC, Vincent Penquerc'h
committed Details | Review

Description mersad 2014-11-26 12:20:51 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.
Comment 1 Vincent Penquerc'h 2014-12-17 18:23:37 UTC
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.
Comment 2 Vincent Penquerc'h 2014-12-17 18:24:13 UTC
Created attachment 292918 [details] [review]
support OpusHead in codec private
Comment 3 Vincent Penquerc'h 2014-12-18 11:40:15 UTC
commit b7413279d9ff2956b04360f40a806557f3c18b9c
Author: Vincent Penquerc'h <>
Date:   Wed Dec 17 17:36:18 2014 +0000

    matroska: mux/demux the OpusHead header
    This is meant to be so ( - 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.
Comment 4 Vincent Penquerc'h 2014-12-18 11:41:53 UTC
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).