Recibir notificaciones cuando los videos están terminados

Este tema le muestra cómo recibir notificaciones cuando se completa su trabajo de Zencoder.

Resumen

Una vez finalizado un trabajo o un archivo de salida, puede averiguarlo de varias formas.

  • Podemos PUBLICAR una solicitud HTTP a su aplicación con los detalles.
  • Puede solicitar sus notificaciones utilizando una herramienta de terceros como ngrok. Esto es útil cuando está desarrollando localmente y Zencoder no puede acceder a su servidor de desarrollo.
  • Podemos enviar un correo electrónico.
  • Puede consultar el panel de Zencoder para ver el estado del trabajo.

Recibe notificaciones HTTP / por correo electrónico

Para recibir notificaciones HTTP o por correo electrónico, agregue Opciones de notificación a su solicitud de API, así:

{
  "api_key": "93h630j1dsyshjef620qlkavnmzui3",
  "input": "s3://bucket-name/file-name.avi",
  "notifications": [
  "http://user:password@example.com/zencoder",
  "admin@example.com"
  ],
  "outputs": [
  {
      "label": "web",
      "url": "s3://output-bucket/web.mp4",
      "size": "512x384",
      "notifications": [
      "http://user:password@example.com/zencoder",
      "admin@example.com"
      ]
  },
  {
      "label": "iphone",
      "url": "s3://output-bucket/iphone.m4v",
      "size": "480x320",
      "notifications": [
      {"format": "xml", "url": "http://user:password@example.com/zencoder1"},
      {"format": "json", "url": "http://user:password@example.com/zencoder2"},
      "http://example.com/zencoder3",
      "admin@example.com"
      ]
  }
  ]
}

En este ejemplo, cuando se completa el primer archivo de salida, se enviarán dos notificaciones:

  • Email para admin@example.com con información sobre la salida y la entrada / trabajo.
  • HTTP POST para http://user:password@example.com/zencoder con un encabezado Content-Type establecido en 'application / json' con información sobre la salida y la entrada / trabajo.

Cuando el segundo archivo de salida esté completo, se enviarán cuatro notificaciones más:

  • HTTP POST para http://example.com/zencoder1 con un encabezado Content-Type establecido en 'application / xml' con información sobre la salida y la entrada.
  • HTTP POST para http://example.com/zencoder2 con un encabezado Content-Type establecido en 'application / json' con información sobre la salida y la entrada / trabajo.
  • Email para admin@example.com con información sobre la salida y la entrada / trabajo.
  • HTTP POST para http://example.com/zencoder3 con un encabezado Content-Type establecido en 'application / json' con información sobre la salida y la entrada / trabajo.

Cuando se complete el trabajo, se enviarán dos notificaciones más:

  • Email para admin@example.com con información sobre la salida y la entrada.
  • HTTP POST para http://user:password@example.com/zencoder con un encabezado Content-Type establecido en 'application / json' con información sobre la salida y la entrada.

Nota: Si Zencoder no puede conectarse correctamente al servidor de destino al enviar una notificación, la notificación se pondrá en cola para volver a intentarlo. La notificación se intentará hasta 20 veces, y la demora entre intentos se duplicará cada vez.

Notificaciones HTTP

Las notificaciones contienen contenido enriquecido con mucha más información sobre el trabajo y los archivos de entrada y salida. El cuerpo de la notificación puede contener JSON o XML. Si las cargas fallan, las notificaciones también contendrán información sobre errores y servidores de respaldo utilizados.

Ejemplo de notificación de trabajo

{
  "outputs":[
  {
      "height":120,
      "audio_sample_rate":8000,
      "frame_rate":8.0,
      "channels":"1",
      "duration_in_ms":1920,
      "video_bitrate_in_kbps":70,
      "video_codec":"h264",
      "format":"mpeg4",
      "audio_codec":"aac",
      "label":null,
      "file_size_in_bytes":17938,
      "width":160,
      "audio_bitrate_in_kbps":9,
      "id":235314,
      "total_bitrate_in_kbps":79,
      "state":"finished",
      "url":"ftp://example.com/file.mp4",
      "md5_checksum":"7f106918e02a69466afa0ee014172496",
      "thumbnails": [
      {
          "label":"poster",
          "images":
          [
          {
              "url": "ftp://example.com/images/123.png",
              "format": "PNG",
              "file_size_bytes": 1273573,
              "dimensions": "1280x720"
          }
          ]
      }
      ]
  },
  {
      "height":120,
      "audio_sample_rate":8000,
      "frame_rate":8.0,
      "channels":"1",
      "duration_in_ms":1920,
      "video_bitrate_in_kbps":70,
      "video_codec":"h264",
      "format":"mpeg4",
      "audio_codec":"aac",
      "label":null,
      "file_size_in_bytes":17938,
      "width":160,
      "audio_bitrate_in_kbps":9,
      "id":235314,
      "total_bitrate_in_kbps":79,
      "state":"finished",
      "url":"ftp://example.com/file.mp4",
      "md5_checksum":"7f106918e02a69466afa0ee014172496",
      "thumbnails": [
      {
          "label":"poster",
          "images":
          [
          {
              "url": "ftp://example.com/images/123.png",
              "format": "PNG",
              "file_size_bytes": 1273573,
              "dimensions": "1280x720"
          }
          ]
      }
      ]
  }
  ],
  "job":{
      "created_at":"2011-09-27T04:20:10Z",
      "pass_through":null,
      "updated_at":"2011-09-27T04:21:18Z",
      "submitted_at":"2011-09-27T04:20:10Z",
      "id":172151,
      "state":"finished"
  },
  "input":{
      "height":120,
      "audio_sample_rate":8000,
      "frame_rate":8.0,
      "channels":"1",
      "duration_in_ms":1552,
      "video_bitrate_in_kbps":32,
      "video_codec":"mpeg4",
      "format":"mpeg4",
      "audio_codec":"aac",
      "file_size_in_bytes":13960,
      "width":160,
      "audio_bitrate_in_kbps":9,
      "id":172149,
      "state":"finished",
      "total_bitrate_in_kbps":41,
      "md5_checksum":"7f106918e02a69466afa0ee014174143"
  }
}

Ejemplo de notificación de salida

{
  "output":{
      "height":120,
      "audio_sample_rate":8000,
      "frame_rate":8.0,
      "channels":"1",
      "duration_in_ms":1920,
      "video_bitrate_in_kbps":70,
      "video_codec":"h264",
      "format":"mpeg4",
      "audio_codec":"aac",
      "label":null,
      "file_size_in_bytes":17938,
      "width":160,
      "audio_bitrate_in_kbps":9,
      "id":235314,
      "total_bitrate_in_kbps":79,
      "state":"finished",
      "url":"ftp://example.com/file.mp4",
      "md5_checksum":"7f106918e02a69466afa0ee014172496",
      "thumbnails":
      [
      {
          "label":"poster",
          "images":
          [
          {
              "url": "ftp://example.com/images/123.png",
              "format": "PNG",
              "file_size_bytes": 1273573,
              "dimensions": "1280x720"
          }
          ]
      }
      ]
  },
  "job":{
      "created_at":"2011-09-27T04:20:10Z",
      "pass_through":null,
      "updated_at":"2011-09-27T04:21:18Z",
      "submitted_at":"2011-09-27T04:20:10Z",
      "id":172151,
      "state":"finished"
  },
  "input":{
      "height":120,
      "audio_sample_rate":8000,
      "frame_rate":8.0,
      "channels":"1",
      "duration_in_ms":1552,
      "video_bitrate_in_kbps":32,
      "video_codec":"mpeg4",
      "format":"mpeg4",
      "audio_codec":"aac",
      "file_size_in_bytes":13960,
      "width":160,
      "audio_bitrate_in_kbps":9,
      "id":172149,
      "state":"finished",
      "total_bitrate_in_kbps":41,
      "md5_checksum":"7f106918e02a69466afa0ee014174143"
  }
}

Manejador de notificaciones de muestra

A continuación se muestra una aplicación PHP simple para manejar notificaciones.

getMessage();
      $notification = $json;
  }

  $logEntry = $notification."\n \n";

  // Tell PHP where it can find the log file and tell PHP to open it
  // and add the string we created earlier to it.
      $logFileLocation = "live-log.txt";
      $fileHandle      = fopen($logFileLocation, 'a') or die("-1");
      fwrite($fileHandle, $logEntry);
      fclose($fileHandle);

  // line below is displayed when you browse the app directly
  echo "Zencoder callback app is running";
  ?>