Livestream-Einstellungen konfigurieren

Auf dieser Seite wird beschrieben, wie du beim Erstellen eines Eingabeendpunkts oder Kanals Einstellungen für Live-Streams wie mehrere Audiotracks, Untertitel und Spritesheets konfigurierst.

Über die Erstellung eines Eingabeendpunkts konfigurieren

Beim Erstellen des Eingabeendpunkts können Sie Konfigurationen für die folgenden Funktionen angeben:

IP-Zulassungsliste

Du kannst den Zugriff auf Eingabeendpunkte einschränken, indem du IP-Bereiche angibst, aus denen der Eingabestream stammen soll, z. B. die IP-Adresse des Encoders. Die Videopipeline akzeptiert nur Traffic von IP-Adressen in diesen Bereichen. Die IP-Bereiche müssen im CIDR-Blockformat angegeben werden.

Konfigurieren Sie das Feld securityRules in der Input-Ressource:

{
  "type": "RTMP_PUSH",
  "securityRules": {
    "ipRanges": ["1.2.3.4/32"]
  }
}

Über die Kanalerstellung konfigurieren

Beim Erstellen eines Kanals kannst du Konfigurationen für die folgenden Funktionen angeben:

Streams mit mehreren Bitraten

Du kannst erweiterte Kanalkonfigurationen erstellen, die mehrere Bitrate, Auflösungen und Frameraten unterstützen. Die folgende Konfiguration enthält zwei muxStreams in der Ausgabe, eine bei 360p mit einer Framerate von 30 fps (mux_video_360p30) und eine bei 720p mit einer Framerate von 60 fps (mux_video_720p60). Diese Konfiguration unterstützt auch mehrere Audiobitraten. Weitere Informationen finden Sie unter Empfohlene Bitrate.

{
  "inputAttachments":[
    {
      "key":"input-primary",
      "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
    }
  ],
  "output":{
    "uri": "gs://BUCKET_NAME"
  },
  "elementaryStreams": [
    {
      "key": "es_video_720p60",
      "videoStream": {
        "h264": {
          "profile": "high",
          "heightPixels": 720,
          "widthPixels": 1280,
          "bitrateBps": 5500000,
          "frameRate": 60
        }
      }
    },
    {
      "key": "es_video_360p30",
      "videoStream": {
        "h264": {
          "profile": "high",
          "heightPixels": 360,
          "widthPixels": 640,
          "bitrateBps": 400000,
          "frameRate": 30
        }
      }
    },
    {
      "key": "es_audio_160k",
      "audioStream": {
        "codec": "aac",
        "channelCount": 2,
        "bitrateBps": 160000
      }
    },
    {
      "key": "es_audio_64k",
      "audioStream": {
        "codec": "aac",
        "channelCount": 2,
        "bitrateBps": 64000
      }
    }
  ],
  "muxStreams": [
    {
      "key": "mux_video_720p60",
      "elementaryStreams": [
        "es_video_720p60"
      ],
      "segmentSettings": {
        "segmentDuration": "2s"
      }
    },
    {
      "key": "mux_video_360p30",
      "elementaryStreams": [
        "es_video_360p30"
      ],
      "segmentSettings": {
        "segmentDuration": "2s"
      }
    },
    {
      "key": "mux_audio_160k",
      "elementaryStreams": [
        "es_audio_160k"
      ],
      "segmentSettings": {
        "segmentDuration": "2s"
      }
    },
    {
      "key": "mux_audio_64k",
      "elementaryStreams": [
        "es_audio_64k"
      ],
      "segmentSettings": {
        "segmentDuration": "2s"
      }
    }
  ],
  "manifests": [
    {
      "key": "manifest_dash",
      "fileName": "main.mpd",
      "type": "DASH",
      "muxStreams": [
        "mux_video_720p60",
        "mux_video_360p30",
        "mux_audio_160k",
        "mux_audio_64k"
      ],
      "maxSegmentCount": 5
    },
    {
      "key": "manifest_hls",
      "fileName": "main.m3u8",
      "type": "HLS",
      "muxStreams": [
        "mux_video_720p60",
        "mux_video_360p30",
        "mux_audio_160k",
        "mux_audio_64k"
      ],
      "maxSegmentCount": 5
    }
  ]
}

Mehrere Audiotracks

Wenn der Eingabestream mehrere Audiotracks enthält, wähle mit dem Objekt AudioMapping den Track für jede AudioStream aus.

{
  "inputAttachments": [
    {
      "key": "MY-INPUT",
      "input": "/projects/PROJECT-ID/locations/LOCATION/inputs/MY-INPUT",
    }
  ],
  "output": {
    "uri": "gs://BUCKET_NAME/outputs/"
  },
  "elementaryStreams": [
    {
      "key": "es_video",
      "videoStream": {
        "h264": {
          "heightPixels": 720,
          "widthPixels": 1280,
          "bitrateBps": 3000000,
          "frameRate": 30
        }
      }
    },
    {
      "key": "es_first_audio",
      "audioStream": {
        "codec": "aac",
        "bitrateBps": 160000,
        "mapping": [
          {
            "inputKey": "MY-INPUT",
            "inputTrack": 1
          }
        ]
      }
    },
    {
      "key": "es_second_audio",
      "audioStream": {
        "codec": "aac",
        "bitrateBps": 160000,
        "mapping": [
          {
            "inputKey": "MY-INPUT",
            "inputTrack": 2
          }
        ]
      }
    }
  ],
  "muxStreams": [
    {
      "key": "mux_video",
      "elementaryStreams": ["es_video"],
    },
    {
      "key": "mux_first_audio",
      "elementaryStreams": ["es_first_audio"],
    },
    {
      "key": "mux_second_audio",
      "elementaryStreams": ["es_second_audio"],
    }
  ],
  "manifests": [
    {
      "key": "manifest_dash",
      "type": "DASH",
      "muxStreams": [
        "mux_video",
        "mux_first_audio",
        "mux_second_audio",
      ]
    }
  ]
}

Hinweis: Der Shaka Player unterstützt die folgenden Funktionen für HLS-Streams mit mehreren Audiotracks nicht:

  • Die Wiedergabe von Audiotracks mit TS-Segmenten abwechseln

  • Auswahl sekundärer und alternativer Audiotracks mit fMP4-Segmenten

CEA 608/708-Untertitel durchreichen

Wenn die Eingabestreams CEA 608/708-Untertitel enthalten, kannst du die Untertitel an die Ausgabestreams weiterleiten. Fügen Sie beim Erstellen einer Channel die folgende textStream zum elementaryStreams hinzu. Mit diesem textStream werden die CEA 608/708-Untertitel in alle Ausgabevideostreams und -wiedergaben eingebettet.

{
  "key": "captions",
  "textStream": {
    "codec": "cea608"
  }
}

Sprite Sheets

Konfigurieren Sie das Feld spriteSheets in der Ressource Channel, um ein Sprite Sheet zu generieren.

{
  "spriteSheets": [
    {
      "format": "jpeg",
      "filePrefix": "sprite",
      "interval": "2s",
      "spriteWidthPixels": 320,
      "spriteHeightPixels": 240,
      "columnCount": 3,
      "rowCount": 3,
      "quality": 80
    }
  ]
}