Obtenir des notifications lorsque les vidéos sont terminées

Cette rubrique vous montre comment obtenir des notifications lorsque votre travail Zencoder est terminé.

Aperçu

Une fois qu'un travail ou un fichier de sortie est terminé, vous pouvez en savoir plus de plusieurs manières.

  • Nous pouvons POSTER une requête HTTP à votre application avec les détails.
  • Vous pouvez demander vos notifications à l'aide d'un outil tiers tel que ngrok. Ceci est utile lorsque vous développez localement et que Zencoder ne peut pas atteindre votre serveur de développement.
  • Nous pouvons envoyer un e-mail.
  • Vous pouvez consulter le tableau de bord Zencoder pour connaître l'état de la tâche.

Recevez des notifications HTTP / e-mail

Pour recevoir des notifications HTTP ou par e-mail, ajoutez des options de notification à votre demande d'API, comme ceci :

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

Dans cet exemple, lorsque le premier fichier de sortie est terminé, deux notifications sont envoyées :

  • Envoyer un e-mail à admin@example.com avec des informations sur la sortie et l'entrée/tâche.
  • HTTP POST vers http://user:password@example.com/zencoder avec un en-tête Content-Type défini sur 'application / json' avec des informations sur la sortie et l'entrée / le travail.

Lorsque le deuxième fichier de sortie est terminé, quatre autres notifications seront envoyées :

  • HTTP POST vers http://example.com/zencoder1 avec un en-tête Content-Type défini sur 'application / xml' avec des informations sur la sortie et l'entrée.
  • HTTP POST vers http://example.com/zencoder2 avec un en-tête Content-Type défini sur 'application / json' avec des informations sur la sortie et l'entrée / le travail.
  • Envoyer un e-mail à admin@example.com avec des informations sur la sortie et l'entrée/tâche.
  • HTTP POST vers http://example.com/zencoder3 avec un en-tête Content-Type défini sur 'application / json' avec des informations sur la sortie et l'entrée / le travail.

Une fois la tâche terminée, deux autres notifications seront envoyées :

  • Envoyer à admin@example.com avec des informations sur la sortie et l'entrée.
  • HTTP POST vers http://user:password@example.com/zencoder avec un en-tête Content-Type défini sur 'application / json' avec des informations sur la sortie et l'entrée.

Remarque : Si Zencoder ne parvient pas à se connecter avec succès au serveur cible lors de l'envoi d'une notification, la notification sera mise en file d'attente pour réessayer. La notification sera tentée jusqu'à 20 fois, le délai entre les tentatives doublant à chaque fois.

Notifications HTTP

Les notifications contiennent un contenu riche avec beaucoup plus d'informations sur le travail et les fichiers d'entrée et de sortie. Le corps de la notification peut contenir du JSON ou du XML. Si les téléchargements échouent, les notifications contiendront également des informations sur erreurs et serveurs de sauvegarde utilisés.

Exemple de notification de travail

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

Exemple de notification de sortie

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

Exemple de gestionnaire de notification

Vous trouverez ci-dessous une application PHP simple pour gérer les notifications.

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";
  ?>