Mehrsprachiges Audio mit der Live-API

Dieses Thema erklärt, wie man einen Live-Auftrag mit mehreren Audiospuren in verschiedenen Sprachen erstellt.

Einleitung

Mit dieser Funktion können mehrere Audiosprachen, beschreibende oder Umgebungs-Audioerlebnisspuren für die Live-Wiedergabe aufgenommen werden. Sie können die Schritte hier nachvollziehen, indem Sie die Live-API verwenden. Sie können auch Video Cloud Studio verwenden. Einzelheiten finden Sie unter Mehrsprachiges Audio mit dem Live-Modul dokumentieren.

Voraussetzungen

Für mehrsprachige Audiospuren gibt es einige Voraussetzungen.

Aktivieren Sie Ihr Konto

  • Wenden Sie sich an den Kundensupport, um die Live-API mit der mehrsprachigen Audiofunktion zu aktivieren
  • Vergewissern Sie sich, dass Sie einen API-Schlüssel für die Live-API haben (den Sie bei der Einrichtung des Kontos erhalten)

Einrichten des Drehgebers

  • Verwenden Sie einen Encoder, der das RTP-Protokoll unterstützt. Mehrsprachige Audiounterstützung ist beschränkt auf rtp oder srt Protokoll.
  • Holen Sie sich die folgenden Werte von Ihrem Messgerät: Einzelheiten finden Sie in der Dokumentation zu Ihrem Messgerät.
    • Definieren Sie den PID (Packet Identifier) für jede Audiospur in Ihrem Encoder
    • Definieren Sie die dem Video zugeordnete Video-PID in Ihrem Encoder

    Wenn Sie die PID-Werte Ihres Encoders nicht kennen, lesen Sie den Abschnitt Konfiguration Ihres Encoders.

Erstellen Sie Ihren Live-Job

Um Ihrem Job mehrere Audiotracks hinzuzufügen, muss beim Erstellen eines Live-Jobs eine Liste von Audiotracks im Anfragetext bereitgestellt werden:

{
  "live_stream": true,
  "region": "us-west-2",
  "protocol": "rtp",
  "cidr_whitelist": [ /* omitted… */ ],
  "outputs": [ /* omitted… */ ],
  "alternate_audio": {
    "tracks": [ { Track Details } ]
  }
}

Unterstützte Felder für die Track Objekt

Die folgende Tabelle enthält eine vollständige Beschreibung der unterstützten Felder im track Objekt.

Track-Felder
Feld Typ Erforderlich Beschreibung
language Schnur Ja

Der Code für die zu verwendende Sprache; derzeit ist dieser flexibel und kann in jedem der verschiedenen Sprachformate vorliegen, die in den Spezifikationen erforderlich/unterstützt werden, insbesondere in RFC5456/BCP47, das gemäß den Anforderungen auch ISO-639 abdeckt

HLS > LANGUAGE Gebiet

DASH > AdaptationSet:lang Gebiet

video_pid ganze Zahl Ja Der Packet Identifier (PID) aus dem MPEG-TS-Eingangsstrom für die Videospur
pid ganze Zahl Ja Der Packet Identifier (PID) aus dem MPEG-TS-Eingangsstrom für eine bestimmte Tonspur
default boolescher Wert Ja (für die Standardspur) Die als DEFAULT in der markierte Audiospur EXT-X-MEDIA sowie die Spur, die in den Videostream gemischt werden soll

Ist dies nicht der Fall, ist der erste Titel der Standard.

Wenn mehrere Wiedergabelisten mit unterschiedlichen Standardeinstellungen definiert sind, ist die oberste Standardspur die gemixte.

label Schnur Eine für den Track zu verwendende Textbeschreibung, die nach Möglichkeit vom Spieler verwendet werden sollte; verwendet in: HLS > NAME Gebiet

Standard: das language mit einer ID für jeden Track, z. B. en-0 wenn nicht angegeben

variant Aufzähung Entspricht den Werten des DASH-Rollenschemas:
  • main
  • alternate
  • commentary
  • supplementary
  • dub

HLS > MERKMALE

DASH > Rolle urn:mpeg:dash:role:2011.

Standard: main

streams[] Reihe

Dies ahmt das streams Feld des Playlist-Ausgabetyps nach; Beispiel: { “source”: “720p” }- entspricht der Bezeichnung der Ausgabequelle

Wenn nicht vorhanden, werden die Standard-Audioeinstellungen verwendet.

HLS > GROUP-ID. (Objekt)

Beispiel

Dieser Beispieltext erstellt einen Job mit 2 Audiospuren.

Anfrage

POST https://api.bcovlive.io/v1/jobs
  Content-Type: application/json
  X-API-KEY: your_API_key

Anfragetext

{
  "live_stream": true,
  "region": "us-west-2",
  "protocol": "rtp",
  "cidr_whitelist": [
    "0.0.0.0/0"
  ],
  "outputs": [
    {
      "label": "hls720p",
      "live_stream": true,
      "height": 720,
      "video_bitrate": 2400,
      "segment_seconds": 6,
      "keyframe_interval": 90
    },
    {
      "label": "hls540p",
      "live_stream": true,
      "height": 540,
      "video_bitrate": 1200,
      "segment_seconds": 6,
      "keyframe_interval": 90
    }
  ],
  "alternate_audio": {
    "tracks": [
      {
        "label": "English",
        "language": "en",
        "variant": "main",
        "video_pid": 256,
        "pid": 257,
        "default": true
      },
      {
        "label": "Spanish",
        "language": "es",
        "variant": "main",
        "video_pid": 256,
        "pid": 258
      }
    ]
  }
}

Beispielantwort

{
  "id": "76f814fbcd7840e99ebf0e335c933730",
  "outputs": [
      {
          "id": "0-76f814fbcd7840e99ebf0e335c933730",
          "playback_url": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_0/chunklist.m3u8",
          "playback_url_dvr": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_0/chunklist_dvr.m3u8",
          "playback_url_vod": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_0/chunklist_vod.m3u8",
          "playback_added_cdns": [],
          "label": "hls720p"
      },
      {
          "id": "1-76f814fbcd7840e99ebf0e335c933730",
          "playback_url": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_1/chunklist.m3u8",
          "playback_url_dvr": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_1/chunklist_dvr.m3u8",
          "playback_url_vod": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_1/chunklist_vod.m3u8",
          "playback_added_cdns": [],
          "label": "hls540p"
      },
      {
          "id": "2-76f814fbcd7840e99ebf0e335c933730",
          "playlist_type": "defaultS3",
          "type": "playlist",
          "alternate_audio": {
              "tracks": [
                  {
                      "label": "English",
                      "language": "en",
                      "name": "Alt0",
                      
                      "pid": 257,
                      "playlistDefault": true,
                      "default": true,
                      "variant": "main",
                      "profile_sources": [
                          "profile_0"
                      ]
                  },
                  {
                      "label": "Spanish",
                      "language": "es",
                      "name": "Alt1",
                      
                      "pid": 258,
                      "playlistDefault": false,
                      "default": false,
                      "variant": "main",
                      "profile_sources": [
                          "profile_0"
                      ]
                  }
              ]
          },
          "filename": "playlist.m3u8",
          "dvr_filename": "playlist_dvr.m3u8",
          "playback_url": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/playlist.m3u8",
          "playback_url_dvr": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/playlist_dvr.m3u8",
          "playback_added_cdns": []
      }
  ],
  "stream_url": "rtp://ep3-usw2.a-live.io:11780",
  "stream_name": "76f814fbcd7840e99ebf0e335c933730.stream",
  "static": false,
  "alternate_audio": {
      "tracks": [
          {
              "label": "English",
              "language": "en",
              "pid": 257,
              "default": true,
              "variant": "main",
              "name": "Alt0"
          },
          {
              "label": "Spanish",
              "language": "es",
              "pid": 258,
              "default": false,
              "variant": "main",
              "name": "Alt1"
          }
      ]
  },
  "event_length": 93600,
  "encryption": {},
  "playback_url": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/playlist.m3u8",
  "playback_url_dvr": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/playlist_dvr.m3u8",
  "playback_added_cdns": []
}

Konfigurieren Sie Ihren Encoder

Konfigurieren Sie Ihren Encoder so, dass er MPEG-TS über RTP an die stream_url aus der Create-Antwort liefert. Stellen Sie sicher, dass die im Anfragetext bereitgestellten Audiospuren mit der richtigen PID in Ihrem Encoder konfiguriert sind.

Beispiel mit ffprobe

Wenn Sie die PIDs Ihres Encoders nicht kennen, können Sie ein Tool wie ffprobe (in ffmpeg enthalten) verwenden, um die PIDs im Stream zu überprüfen.

ffprobe /tmp/ma.ts
ffprobe version 5.0.1 Copyright (c) 2007-2022 the FFmpeg developers
  built with Apple clang version 13.0.0 (clang-1300.0.29.3)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/5.0.1-with-options_1 --enable-shared --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libaom --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-demuxer=dash --enable-opencl --enable-audiotoolbox --enable-videotoolbox --disable-htmlpages --enable-libvmaf --enable-version3
  libavutil      57. 17.100 / 57. 17.100
  libavcodec     59. 18.100 / 59. 18.100
  libavformat    59. 16.100 / 59. 16.100
  libavdevice    59.  4.100 / 59.  4.100
  libavfilter     8. 24.100 /  8. 24.100
  libswscale      6.  4.100 /  6.  4.100
  libswresample   4.  3.100 /  4.  3.100
  libpostproc    56.  3.100 / 56.  3.100
Input #0, mpegts, from '/tmp/ma.ts':
  Duration: 00:00:04.86, start: 1.400000, bitrate: 502 kb/s
  Program 1
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
  Stream #0:0[0xff]: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p(progressive), 360x240 [SAR 1:1 DAR 3:2], 30 fps, 30 tbr, 90k tbn
  Stream #0:1[0x100]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, mono, fltp, 98 kb/s
  Stream #0:2[0x102]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, mono, fltp, 98 kb/s

Die Hexadezimalzahl hinter dem Stream gibt die PID an. Zum Beispiel:

  • 0xff == 255
  • 0x100 == 256
  • 0x101 == 257

Testwiedergabe

Laden Sie die play_url in die Brightcove-Player oder Safari, um die Wiedergabe zu bestätigen.

DRM_Wiedergabe

Derzeit wird DRM nur über den Catch-up-Dienst (Timeshift) unterstützt. Fügen Sie diese Felder zu Ihrem Anfragetext für Job erstellen hinzu:

{
  "drm": {
    "modes": [
      "all"
    ]
  },
  "timeshift": {
    "type": "single",
    "startover_duration": 36000,
    "skip_live_output": true
  }
}

Die Antwort umfasst DRM-Ausgaben und a timeshift_url für die Wiedergabe zu verwenden.