schema_version: 0.3
type: consumer
identifier: cbrts
title: CBR MPEG2-TS
version: 2
copyright: Copyright (C) 2010-2015 Broadcasting Center Europe S.A. http://www.bce.lu
license: GPLv2
language: en
creator: Dan Dennedy
tags:
  - Audio
  - Video
description: Constant bit-rate MPEG-2 Transport Stream
notes: |
  All properties, except some key operational properties such as real_time and
  terminate_on_pause, set on the this consumer are passed onto an encapsulated
  avformat consumer - no special prefix required. While some avformat
  properties can accept a "k" suffix, this consumer requires "muxrate" but does
  not understand the "k" suffix; so, specify the value in bytes per second.
  The stream is always output to STDOUT at this time.
  
  You can rewrite and insert table sections into the transport stream. If you
  choose to rewrite the PMT sections, then you need to know how libavformat
  sets the PIDs on the elementary streams. Currently, the video stream is 256
  (0x100) and audio streams start at 257, incrementing from there. There are
  conventions for property names to pass the .sec files to the consumer.

  The conventions are:
    si.<section>.file=<filename.sec>
    si.<section>.pid=<number>
    si.<section>.time=<milliseconds>
  <section> is really anything, but typically: pat, sdt, nit, eit, etc.
  "pat," "pmt," and "sdt" are special such that when supplied, they cause
  libavformat's corresponding sections to be filtered out and replaced with
  yours. You should always use PID 16 for NIT, 17 for SDT, and of course,
  0 for PAT; PMT may be anything, but libavformat uses 4095 (0xfff).
  The time property indicates the frequency to insert the section - every N milliseconds.

parameters:
  - identifier: muxrate
    type: integer
    unit: bytes/second

  - identifier: udp.rtprio
    title: Real-time priority
    description: >
      When set to a valid value, this makes the network output thread run with a
      real-time policy and priority where 1 is lowest and 99 is highest.
    type: integer
    minimum: 1
    maximum: 99

  - identifier: udp.address
    title: UDP address
    description: >
      If an IP address is provided, the stream is sent over UDP instead of STDOUT.
    type: string

  - identifier: udp.port
    title: UDP port
    type: integer
    minimum: 0
    default: 1234

  - identifier: udp.ttl
    title: Multicast TTL
    description: >
      The multicast time-to-live value controls how many routing hops the
      multicast will survive.
    type: integer
    minimum: 0
    maximum: 255

  - identifier: udp.reuse
    title: Reuse socket address
    description: >
      When not supplied, the socket is opened with the reuse address option. Set
      this to 0 to disable that.
    type: boolean
    default: 1

  - identifier: udp.sockbufsize
    title: Socket buffer size
    type: integer
    minimum: 1
    unit: bytes

  - identifier: udp.nb_tsp
    title: TS packets per UDP packet
    type: integer
    minimum: 0
    maximum: 7
    default: 7

  - identifier: udp.buffer
    title: Max buffer IP packets
    type: integer
    minimum: 100
    default: 1000

  - identifier: udp.rtp
    title: Use RTP
    type: boolean
    default: 1

  - identifier: udp.rtp_ssrc
    title: RTP synchronization source
    type: integer
    description: The default is a random number, but you can override it.

  - identifier: udp.interface
    title: Multicast interface name
    description: >
      Normally the multicast interface is selected by the IP routing table
      configured on the system, but this might be more convenient. It takes
      a name like "eth0".
    type: string
