mpegtsmux

mpegtsmux muxes different streams into an MPEG Transport stream

SI sections can be specified through a custom event:

#include <gst/gst.h>
#include <gst/mpegts/mpegts.h>

#define PIPELINE_STR "videotestsrc num-buffers=100 ! x264enc ! queue ! mpegtsmux name=mux ! fakesink"

static void
_on_bus_message (GstBus * bus, GstMessage * message, GMainLoop * mainloop)
{
  switch (GST_MESSAGE_TYPE (message)) {
    case GST_MESSAGE_ERROR:
    case GST_MESSAGE_EOS:
      g_main_loop_quit (mainloop);
      break;
    default:
      break;
  }
}

static void
advertise_service (GstElement * mux)
{
  GstMpegtsSDTService *service;
  GstMpegtsSDT *sdt;
  GstMpegtsDescriptor *desc;
  GstMpegtsSection *section;

  sdt = gst_mpegts_sdt_new ();

  sdt->actual_ts = TRUE;
  sdt->transport_stream_id = 42;

  service = gst_mpegts_sdt_service_new ();
  service->service_id = 42;
  service->running_status =
      GST_MPEGTS_RUNNING_STATUS_RUNNING + service->service_id;
  service->EIT_schedule_flag = FALSE;
  service->EIT_present_following_flag = FALSE;
  service->free_CA_mode = FALSE;

  desc = gst_mpegts_descriptor_from_dvb_service
      (GST_DVB_SERVICE_DIGITAL_TELEVISION, "some-service", NULL);

  g_ptr_array_add (service->descriptors, desc);
  g_ptr_array_add (sdt->services, service);

  section = gst_mpegts_section_from_sdt (sdt);
  gst_mpegts_section_send_event (section, mux);
  gst_mpegts_section_unref (section);
}

int
main (int argc, char **argv)
{
  GstElement *pipeline = NULL;
  GError *error = NULL;
  GstBus *bus;
  GMainLoop *mainloop;
  GstElement *mux;

  gst_init (&argc, &argv);

  pipeline = gst_parse_launch (PIPELINE_STR, &error);
  if (error) {
    g_print ("pipeline could not be constructed: %s\n", error->message);
    g_clear_error (&error);
    return 1;
  }

  mainloop = g_main_loop_new (NULL, FALSE);

  mux = gst_bin_get_by_name (GST_BIN (pipeline), "mux");
  advertise_service (mux);
  gst_object_unref (mux);

  /* Put a bus handler */
  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
  gst_bus_add_signal_watch (bus);
  g_signal_connect (bus, "message", (GCallback) _on_bus_message, mainloop);

  /* Start pipeline */
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
  g_main_loop_run (mainloop);

  gst_element_set_state (pipeline, GST_STATE_NULL);

  gst_object_unref (pipeline);
  gst_object_unref (bus);

  return 0;
}

Hierarchy

GObject
    ╰──GInitiallyUnowned
        ╰──GstObject
            ╰──GstElement
                ╰──GstAggregator
                    ╰──GstBaseTsMux
                        ╰──mpegtsmux

Factory details

Authors: – Fluendo

Classification:Codec/Muxer

Rank – primary

Plugin – mpegtsmux

Package – GStreamer Bad Plug-ins

Pad Templates

sink_%d

video/mpeg:
         parsed: true
    mpegversion: { (int)1, (int)2, (int)4 }
   systemstream: false
video/x-dirac:
image/x-jpc:
video/x-h264:
  stream-format: byte-stream
      alignment: { (string)au, (string)nal }
video/x-h265:
  stream-format: byte-stream
      alignment: { (string)au, (string)nal }
audio/mpeg:
         parsed: true
    mpegversion: 1
audio/mpeg:
         framed: true
    mpegversion: { (int)2, (int)4 }
  stream-format: { (string)adts, (string)raw }
audio/x-lpcm:
          width: { (int)16, (int)20, (int)24 }
           rate: { (int)48000, (int)96000 }
       channels: [ 1, 8 ]
  dynamic_range: [ 0, 255 ]
       emphasis: { (boolean)false, (boolean)true }
           mute: { (boolean)false, (boolean)true }
audio/x-ac3:
         framed: true
audio/x-dts:
         framed: true
audio/x-opus:
       channels: [ 1, 8 ]
channel-mapping-family: { (int)0, (int)1 }
subpicture/x-dvb:
application/x-teletext:
meta/x-klv:
         parsed: true
image/x-jpc:
        profile: [ 0, 49151 ]

Presencerequest

Directionsink

Object typeGstBaseTsMuxPad


src

video/mpegts:
   systemstream: true
     packetsize: { (int)188, (int)192 }

Presencealways

Directionsrc

Object typeGstAggregatorPad


Properties

m2ts-mode

“m2ts-mode” gboolean

Set to TRUE to output Blu-Ray disc format with 192 byte packets. FALSE for standard TS format with 188 byte packets.

Flags : Read / Write

Default value : false


The results of the search are