gstreamergst-launchgst-launch-1.0

How do you figure out gstreamer profile strings


Trying to use encodebin and its profiles. The documentations here: https://gstreamer.freedesktop.org/documentation/pbutils/encoding-profile.html?gi-language=c#defining-a-gstencodingprofile-as-a-string and there: https://gstreamer.freedesktop.org/data/doc/gstreamer/1.9/gst-plugins-base-libs/html/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile list examples, but they don't really explain how I actually construct those strings.

It names the generic muxer_source_caps:video_encoder_source_caps:audio_encoder_source_caps format, but where do I get muxer_source_caps from. application/ogg:audio/x-vorbis from the examples works totally fine.

For instance, how would I proceed to figure out the needed profile to encode to aac in an mp4 container.

Making wild guesses to use mime types from https://github.com/GStreamer/gstreamer/blob/cc55b304ef4ab1cd95f6348d33f268ccebaab8e8/docs/random/mimetypes also won't work.

all attempts are failing with WARNING: erroneous pipeline: could not set property "profile" in element "enc" or some longer errors when only using audio/x-m4a without a muxer_source_cap

thanks


Solution

  • at least for ogg, though it doesn't work that way for the other formats I tried.

    by using gst-inspect-1.0 | grep ogg -i oggmux can be found

    gst-inspect-1.0 oggmux yields, among other things:

      SINK template: 'audio_%u'
        Availability: On request
        Capabilities:
          audio/x-vorbis
    
      SRC template: 'src'
        Availability: Always
        Capabilities:
          application/ogg
    

    muxer_source_caps is SRC template, which is application/ogg

    audio_encoder_source_caps is SINK template, which is audio/x-vorbis

    makes application/ogg:audio/x-vorbis

    sometimes there are variables, like layer in xingmux. Those are added like:

    audio/mpeg,mpegversion=1,layer=3