Livestream-Einstellungen konfigurieren

Auf dieser Seite wird beschrieben, wie Sie während der Erstellung von Eingabeendpunkten oder Kanälen Einstellungen für Livestreamfunktionen wie mehrere Audiotracks, Untertitel und Sprite Sheets konfigurieren.

Durch Erstellen von Eingabeendpunkten konfigurieren

Sie können beim Erstellen des Eingabeendpunkts Konfigurationen für die folgenden Features 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 Ressource Input:

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

Kanalerstellung konfigurieren

Beim Erstellen des Kanals kannst du Konfigurationen für die folgenden Funktionen festlegen:

Streams mit mehreren Bitraten

Sie können erweiterte Kanalkonfigurationen erstellen, die mehrere Bitraten, Auflösungen und Framerates 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 weitere bei 720p mit einer Framerate von 60 fps (mux_video_720p60). Diese Konfiguration unterstützt auch mehrere Audiobitraten. Weitere Informationen finden Sie unter Empfohlene Bitraten.

{
  "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 mehr als einen Audiotrack enthält, verwende das AudioMapping-Objekt, um den Track für jeden AudioStream auszuwählen.

{
  "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",
      ]
    }
  ]
}

Beachte, dass der Shaka Player die folgenden Funktionen für HLS-Streams mit mehreren Audiotracks nicht unterstützt:

  • Alternative Audiotrack-Wiedergabe mit TS-Segmenten

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

Passthrough-Untertitel gemäß CEA 608/708

Wenn die Eingabestreams CEA 608/708-Untertitel enthalten, können Sie die Untertitel an die Ausgabestreams weiterleiten. Fügen Sie dem elementaryStreams das folgende textStream hinzu, wenn Sie eine Channel erstellen. Diese textStream bettet die CEA 608/708-Untertitel in alle Ausgabevideostreams und -wiedergaben ein.

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

Sprite Sheets

Konfigurieren Sie zum Generieren eines Sprite Sheets das Feld spriteSheets in der Ressource Channel.

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