Syndication Publishing

Contact your account manager to activate Syndication Publishing.

In addition to streaming content directly to your consumers, you may also simultaneously distribute it to multiple social media and content distribution platforms with minimal effort.

Set up Syndication Publishing by performing the following steps:

  1. Create a publishing target for each desired social media or content distribution platform.
  2. Publish to the desired platform(s) by associating the desired publishing target(s) with your live channel or live event.

Publishing Target

Distribute your content to any social media or content distribution platform (e.g., YouTube, Twitch, and TikTok) that supports ingest through any of the following protocols:

RTMP | RTMPS | HLS | Zixi | SRT | RIST

You may use any of the above protocols to push a live stream to your social media or content distribution platform. Additionally, you may configure your social media or content distribution platform to pull a HLS live stream.

A publishing target configuration determines how your live stream will be published. Setup varies by platform.

Platform Description

AWS Elemental MediaConnect

Provide the following information:

  • A hostname or IP address that points to your AWS Elemental MediaConnect server.
  • The ID for the stream to which we will publish content.
  • Optional. A password that authorizes our service to publish to a password-protected stream.

Configure your AWS Elemental MediaConnect's output to use Zixi push.

Facebook

Configure our service to authenticate to Facebook using either of the following methods:

  • Integrated Authentication: Integrated authentication allows you to leverage credentials defined within a Clipping profile to automatically publish to a Facebook page.

    Learn more.

  • Stream Key: Provide a stream key. This stream key authorizes our service to publish to a specific Facebook page.

Pluto TV

Provide the following information:

  • A hostname or IP address that points to your Pluto TV account (Zixi push).
  • The ID for the stream to which we will publish content.
  • Optional. A password that authorizes our service to publish to a password-protected stream.

TikTok

Provide a stream key that authorizes our service to publish to a specific TikTok account.

Twitch

Provide a stream key that authorizes our service to publish to a specific Twitch channel.

YouTube

Configure our service to authenticate to YouTube using either of the following methods:

  • Integrated Authentication: Integrated authentication allows you to leverage credentials defined within a Clipping profile to automatically create a scheduled live stream within the YouTube Studio dashboard.

    Learn more.

  • Stream Key: Provide a stream key. This stream key authorizes our service to publish to a specific YouTube channel.

Custom

Publish to any social media or content distribution platform using the RTMP, RTMPS, HLS, Zixi, SRT, or RIST protocol.

RTMP or RTMPS - Push

Stream URL Syntax:

Base Stream URL/Stream Key

The desired social media or content distribution platform determines whether a stream key must be defined within your stream URL. Please refer to their documentation for more information.

HLS - Push

Stream URL Syntax:

Base Stream URL/

Sample stream URLs:

rtmp://platform.example.com/live/3u40-9rqs-502b-7zeq/

http://platform.example.com/live/

Please refer to the documentation provided by the desired social media or content distribution platform to find out where your stream URL(s) or stream key(s) can be found.

HLS - Pull

Our service generates a stream URL once you start publishing to this target. You will need to configure the desired social media or content distribution platform to pull the stream using this URL.

Zixi - Push

Publish a feed to a Zixi-enabled device or service via the Zixi protocol by identifying the destination server and a stream ID. You may also provide a password for password-protected streams.

SRT - Push

Stream URL Syntax:

RIST - Push

Stream URL Syntax:

You may only push an audio/video feed to an even port number. RIST reserves odd port numbers (Port+1) for error correction use.

To create a publishing target

Contact your account manager to activate Syndication Publishing.

Setting up a publishing target varies by social media or content distribution platform. Expand the section for the platform to which your content will be published.

To modify a publishing target

  1. Load the Publishing page by navigating to Settings | Publishing.
  2. Click on the desired publishing target.
  3. Modify the desired settings.
  4. Click Save.

To delete a publishing target

  1. Ensure that a live channel or a live event is not publishing to the desired publishing target(s).
  2. Load the Publishing page by navigating to Settings | Publishing.
  3. Mark each publishing target that will be deleted.
  4. Click Delete # Target(s).
  5. When prompted, confirm deletion by clicking Yes, Delete.

Publishing

Once you have created a publishing target configuration, you should add that target to your live channel or a live event, set the quality of the stream that will be published, and then publish it.

Key information:

To publish your content to a platform

  1. Create a publishing target. Repeat this step as needed.

  2. HLS (Push/Pull)

    Start slicing content to the desired live channel or live event.

  3. Add a publishing target configuration to your live channel or live event. Repeat this step as needed.

    1. Navigate to the Publish tab for the desired live channel or live event. ClosedHow?Navigate to Live Channels or Live Events. Click the desired live channel or live event. Click the Publish tab.

    2. Click Add Target.
    3. Select a publishing target created in step 1.
    4. Determine the quality of the published stream.

    5. HLS (Push/Pull) or Zixi

      Optional. Toggle the SCTE-35 Marker Transmission option to enable the insertion of SCTE-35 markers within the published stream.

    6. Optional. From the Output Location option, determine where your stream will be converted to a feed that may be ingested by the social media or content distribution platform identified by the publishing target.

      The recommended configuration is Default which allows our system to determine the optimal location according to availability and your publishing target's social media or content distribution platform. You should only set it a specific location under specific circumstances (e.g., locale-specific publishing).

    7. YouTube (Integrated Authentication) Only

      Perform the following steps:

      1. From the YouTube Title option, set the video's title.
      2. From the YouTube Description option, set the video's description.
      3. From the YouTube Privacy option, set the video's privacy level to either Public, Private, or Unlisted.
      4. From the Audience - is this video made for kids? option, choose whether content to be published was "made for kids."

        Learn how to determine whether your content is "made for kids."

    8. Facebook (Integrated Authentication) Only

      Perform the following steps:

      1. From the Facebook Title option, set the video's title.
      2. From the Facebook Description option, set the video's description.
    9. Optional. Define the set of query string parameters that will be added to the playback URLs defined within the manifest file.

      1. Verify that the Key-Value Parameters option is enabled.
      2. Define a query string parameter by setting a key and a value.
      3. Click Add.
      4. Repeat steps ii and iii as needed.

      Remove a query string parameter by clicking Remove.

    10. Optional. Click Test to verify that our service may connect to the social media or content distribution platform identified by the publishing target.
    11. Click Done.
    12. Click Add.
    13. Click Publish to start publishing your stream to the desired platform.
  4. HLS Pull Only

    Configure each desired social media or content distribution platform to pull the HLS stream published in the previous step. Perform the following steps to copy a publishing target's HLS URL.

    1. Once the publishing target is in Active status, click on it to open it.
    2. Find the HLS Master URL option and then click copy to copy the URL from which you can pull the HLS stream published by our service.
  5. Perform one of the following procedures:

    • Facebook or YouTube (Integrated Authentication)

      Upon detecting a stream, we will automatically submit a "go live" request for that live stream to Facebook or YouTube.

    • All Other Platforms

      From within each social media or content distribution platform, start your live stream.

      If you are using a stream key to publish to Facebook or YouTube, you are required to manually start your live stream.

To stop publishing

  1. Navigate to the Publish tab for the desired live channel or live event. ClosedHow?Navigate to Live Channels or Live Events. Click the desired live channel or live event. Click the Publish tab.

  2. Click the next to the desired publishing target.
  3. Repeat the previous step as needed.

To modify publishing stream quality

  1. Navigate to the Publish tab for the desired live channel or live event. ClosedHow?Navigate to Live Channels or Live Events. Click the desired live channel or live event. Click the Publish tab.

  2. Click on the desired publishing target.
  3. If your content is being published to that target, click Stop Publishing. Once the target's status indicates that it has been stopped, click on the desired publishing target.
  4. From the Video Quality option, select the quality of the stream to be published.
  5. If you are ready to start publishing, click Publish. Otherwise, click Done to save your changes.

To remove a publishing target from a live channel or live event

  1. Navigate to the Publish tab for the desired live channel or live event. ClosedHow?Navigate to Live Channels or Live Events. Click the desired live channel or live event. Click the Publish tab.

  2. Mark each desired publishing target.
  3. Click .

Publishing Jobs

Adding a publishing target to a live channel or live event creates a publishing job in the stopped state. This publishing job identities:

Key information:

Publishing Job Event Notifications

Publish key publishing job events through the following workflow:

  1. Syndication Publishing pushes data to Amazon SNS for any of the following events:

    Severity Event

    Info

    A user starts a publishing job.

    Info

    A user stops a publishing job.

    Warning

    Syndication Publishing restarts a publishing job. This typically occurs when the initial attempt to start a publishing job fails.

    Warning

    Syndication Publishing was unable to communicate with the social media or content distribution platform.

    Critical

    Syndication Publishing could not start or restart a publishing job. This event only occurs after multiple attempts to start or restart the publishing job have failed.

    Critical

    Syndication Publishing was forced to stop the publishing job.

  2. Amazon SNS broadcasts data to one or more destination(s) (e.g., mobile device, web server, or Slack).

Get started with Amazon SNS for free through its SNS free tier.
Learn more.

Syndication Publishing formats data using JSON. This data may then be filtered via custom code. This article explains how to strip out additional data generated by Amazon SNS via a custom function in Amazon Lambda.

Getting Started with Publishing Job Notifications

Perform the following steps to set up Syndication Publishing notifications:

  1. Set up an Amazon SNS topic.
  2. Configure communication between Syndication Publishing and Amazon SNS.
  3. Configure Amazon SNS to broadcast notifications to the desired destination(s).

    Learn how to set up Amazon SNS and Lambda to broadcast notifications to a Slack channel.

Setting up an Amazon SNS Topic

Amazon SNS communicates with publishers and subscribers through a "topic." For this purpose of this article, Syndication Publishing will assume the role of a publisher, while a Slack channel will assume the role of the subscriber.

Amazon SNS may be configured to broadcast data to multiple types of subscribers (e.g., web server, mobile device, email, etc.).

Perform the following steps to create a topic:

  1. Sign in to the Amazon AWS Management console. If you don't have an AWS account, then sign up for one.
  2. Open the Amazon SNS console.
  3. Click Get started.

    Amazon SNS may require Amazon SES (i.e., Amazon Simple Email Service). Please sign up for the Amazon SES service if an error message appears within the SNS dashboard.

  4. From the upper-right hand corner, change your location to:

    US West (Oregon) us-west-2
  5. Click Topics from the side navigation pane.
  6. Click Create topic.
  7. Click Standard.

    Our service does not support pushing notifications to a First-In-First-Out (FIFO) topic.

  8. In the Name option, assign a unique name (e.g., syndication-publishing) to the topic.
  9. Optional. If notifications will be sent over SMS notifications, then set the Display name option to the desired name.
  10. Expand the Access policy section.
  11. From the Define who can publish messages to the topic option, select Only the specified AWS accounts.

    Set the Only these AWS users option to our AWS account ID:

    545191325524
  12. Click Create topic.
  13. Copy the topic's ARN.

Configuring Communication with Amazon SNS

Syndication Publishing requires an ARN topic before it will push data to Amazon SNS. Perform the following steps:

  1. Navigate to the SNS tab of the Syndication Publishing page. ClosedHow?From the main menu, navigate to Settings. From the side navigation pane, click Publishing. Click on the SNS tab.

  2. In the SNS Topic ARN setting, paste the ARN for the topic created above.
  3. Click Save.

Integrating Slack with Amazon SNS

Amazon SNS can broadcast notifications to different subscribers (e.g., mobile devices) using a variety of delivery methods (e.g., HTTP, email, AWS Lambda, etc.).

The configuration that has been performed up to this point allows the Syndication Publishing to send notifications to Amazon SNS. This section explains how to push those notifications from Amazon SNS to a Slack channel. Integrating Amazon SNS involves the following steps:

  1. Set up a Slack webhook.
  2. Create an Amazon Lambda function that subscribes to the Amazon SNS topic.
Setting up a Slack Webhook

Slack requires that a webhook be created before it will post messages from external sources (e.g., Amazon SNS).

Learn how to create a Slack webhook.

Subscribing to a SNS Topic via Amazon Lambda

Amazon SNS needs to be informed of the above webhook before it can send data to a Slack channel. This task may be performed via Amazon Lambda. Amazon Lambda is a compute service that runs code in response to events (e.g., when data is pushed from a Syndication Publishing to Amazon SNS).

View Amazon Lambda's documentation.

This article creates a Lambda function in Python that performs the following tasks:

Add custom code to this function to tailor how messages are posted to a Slack channel (e.g., filter notifications by Syndication Publishing).

Perform the following steps to create a Lambda function:

  1. Open the Amazon Lambda console.
  2. Click Get Started Now.
  3. Click Blank Function.
  4. Click the dashed box and then select "SNS" as the trigger for this function.

  5. Verify that the SNS topic created earlier in this article is selected in the SNS topic option.
  6. Mark the Enable trigger option.
  7. Click Next.
  8. Configure the Lambda function as follows:

    1. Name: Set the Name option to the name of the function (e.g., forward_to_slack).
    2. Description: Set the Description option to a brief description for the purpose of the function (e.g., Send Syndication Publishing information to a Slack channel.).
    3. Runtime: Set the Runtime option to "Python 2.7."
    4. Code: Set the Lambda function code option to the following code:

      import json
      import urllib2
      
      def forward_to_slack (event, context):
          # The URL for your Slack Channel's webhook
          url = "https://hooks.slack.com/services/ABCDE1234/FGHIJ5678/KLMNOPQRSTUV901234567890"
      
          # Format the message 
          try:
              # Try to navigate to the Message that was sent via SNS and strip out the
              #  rest of the delivery information
              slack_data = {"text":str(event['Records'][0]['Sns']['Message'])}
          except:
              slack_data = {"text":str(event)}
      
          # Dump the json to prepare it for sending
          data = json.dumps(slack_data)
      
          # Create the request
          req = urllib2.Request(url, data)
      
          # Send request
          urllib2.urlopen(req)

      Update the webhook URL defined in the code to point to the one copied in the Setting up a Slack Webhook section.

    5. Handler: Set the Handler option to "lambda_function." and then append the name of the function defined in the Name option (e.g., lambda_function.forward_to_slack).

    6. Role: Set the Role option to "Create new role from template(s)."

    7. Role name: Set the Role name option to the name that will be assigned to the new role (e.g., lambda_basic_execution).

    8. Click Next.

  9. Amazon Lambda will now allow you to review the function that will be created. Verify that the correct SNS topic has been selected and that the Lambda function configuration looks similar to the following illustration:

  10. Click Create function.

Amazon Lambda will now automatically post data to a Slack channel as it is provided by Syndication Publishing.

Key Publishing Job Notification Fields

Syndication Publishing sends information that describes a key publishing job event in JSON format. Key parameters in this notification are described below.

Field Description

Subject

Provides a simple description of the publishing job event that triggered this notification.

Syntax:

Example:

"Syndication Notification - Info - Job started by user - 2021-12-10_21:15:55",

Message

Provides detailed information about the publishing job event. Key parameters are described below.

  • Date_Time: Indicates when the notification was triggered.
  • Severity: Indicates whether it is an Info, Critical, or Warning notification.
  • Message: Describes the type of notification.
  • Description: Provides additional event information. For example, this parameter may indicate the reason why a publishing job could not be started.
  • Schedule_Id: Indicates the publishing job's system-defined ID.
  • Target_Name: Indicates the publishing target's name.
  • Protocol: Indicates the publishing target's protocol.
  • Platform: Indicates the publishing target's social media or content distribution platform.
  • Content_Name: Indicates the name of the live channel or live event associated with the publishing job.
  • Content_Id: Indicates the system-defined ID of the live channel or live event associated with the publishing job.
  • Content_Type: Identifies whether this publishing job is associated with a live channel or live event. Valid values are:

    • c: Live channel
    • e: Live event

Example:

"{\"Service\": \"syndication\", \"Sender\": \"syndication\", \"Date_Time\": \"2021-12-10_21:15:55\", \"Severity\": \"Info\", \"Message\": \"Job started by user\", \"Description\": \"\", \"Schedule_Id\": \"23f1ed53db5e4538b6a0b31183fad807\", \"Target_Name\": \"YouTubePT\", \"Protocol\": \"rtmp\", \"Platform\": \"YouTube\", \"Content_Name\": \"Entertainment\", \"Content_Id\": \"c8929b67f1354607877b319edb0c01af\", \"Content_Type\": \"c\"}"