Connect an SRT encoder to Wowza Video using the Wowza Video REST API

The Wowza Video™ service can connect to H.264 or H.265/HEVC encoders that support the Secure Reliable Transport (SRT) protocol. SRT is an open source video transport protocol that is designed to deliver secure, high-quality, low latency live streams over unpredictable network conditions.

You'll need to choose which workflow you'll use, live stream or transcoder, before you begin this task. See Decide between a live stream or transcoder workflow for more information about these workflows.

Notes:
  • Source authentication and closed captions aren't available for SRT.
  • Wowza Video supports SRT version 1.4.

Before you start


You should be familiar with the following concepts:

  • API authentication methods. We use JSON web tokens for API authentication. See Authentication for more information.
  • Environment variables. We use environment variables for the API version and your JWT in the cURL API request examples in this topic to make it easier for you to copy, paste, and run commands in your Terminal or Command Prompt window. If you don't set environment variables for these values, you'll need to manually enter the correct values in the code samples throughout this tutorial. See Tools for testing the API for instructions.

You should complete the following tasks:

  • Install the latest firmware for your encoder.
     

You should have access to the following items:

  • The encoder's user guide for details about how to operate the device or software and how to specify settings such as resolution, bitrate, and frame rate.

     

Live Stream Workflow

1. Create a live stream

Create a live stream that receives a SRT source, generates a player, and configures a hosted page by sending a POST request to the /live_streams endpoint.

You can use the following sample request, making sure to:

  • Set encoder to other_srt.
  • Set delivery_method to push. Wowza Video doesn't support pull or cdn connections for SRT.
  • Set broadcast_location to the region that's closest to your video source.
  • Change any values unique to your broadcast, using the API reference documentation as a resource. See the Endpoint Reference button below.

Sample request

Endpoint Reference

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${WV_JWT}" \
-d '{
   "live_stream": {
     "aspect_ratio_height": 720,
     "aspect_ratio_width": 1280,
     "billing_mode": "pay_as_you_go",
     "broadcast_location": "us_west_california",
     "delivery_method": "push",
     "encoder": "other_srt",
     "name": "MySRTStream",
     "transcoder_type": "transcoded"
   }
}' "${WV_HOST}/api/${WV_VERSION}/live_streams"

Sample response

The response includes:

  • An id for the live stream that you'll use in step 3.
  • source_connection_information you'll use in the next step to configure an SRT source encoder for the live stream.
    • primary_server, host_port, and stream_name
{
   "live_stream": {
     "id": "1234abcd",
     "name": "MySRTStream",
     ...
     "encoder": "other_srt",
     ...
     "source_connection_information": {
       "primary_server": "srt://[subdomain].entrypoint.video.wowza.com",
       "host_port": "10000",
       "stream_name": "54g2813p"
       "disable_authentication": "true"
     },
     ...
   }

}

2. Configure your video source


Use the source_connection_information from the live stream response to configure your SRT encoder. You'll need to refer to documentation for your specific encoder to determine where to input the source_connection_information settings, which include the stream and user credentials for authentication.

If you were configuring OBS as the encoder, you'd enter the following values in OBS:

  • URL is formatted as:
    srt://[primary_server]:[host_port]/[application]
    Where:
    • [primary_server] is the ingest location of the server
    • [host_port] is the port (by default 1935)
    • [application] is the application name for the stream assigned by Wowza Video. This will appear within the playback URLs, such as app-abc123d45.
  • Stream key is the stream_name value, such as b01bda67.
     

Authentication is disabled by default for SRT streams. Other encoders might use different names in their user interface, like Address instead of URL and Stream instead of Stream key. Make sure to refer to your encoder's documentation to determine the correct locations.

Note: When ingesting the stream, Wowza Video functions in SRT listener mode when establishing a handshake with a peer.

3. Test the connection


Now that you have configured your source, you can test your live stream. You'll need the [live_stream_id] returned in step 1.

  1. Start your live stream.

    Endpoint Reference

    curl -X PUT \
    -H "Authorization: Bearer ${WV_JWT}" \
    "${WV_HOST}/api/${WV_VERSION}/live_streams/[live_stream_id]/start"

     
  2. Check the state to make sure the live stream started.

    Endpoint Reference

    curl -X GET \
    -H "Authorization: Bearer ${WV_JWT}" \
    "${WV_HOST}/api/${WV_VERSION}/live_streams/[live_stream_id]/state"

     
  3. Start the stream in the SRT encoder. How you start the encoder varies by device.
  4. Fetch a URL to a thumbnail that you can enter into a browser and visually confirm the stream is playing.

    Endpoint Reference

    curl -X GET \
    -H "Authorization: Bearer ${WV_JWT}" \
    "${WV_HOST}/api/${WV_VERSION}/live_streams/[live_stream_id]/thumbnail_url"

     
  5. Stop the live stream.

    Endpoint Reference

    curl -X PUT \
    -H "Authorization: Bearer ${WV_JWT}" \
    "${WV_HOST}/api/${WV_VERSION}/live_streams/[live_stream_id]/stop"
  6. Stop the stream in the source camera or encoder.

Related live stream API requests

Transcoder Workflow

1. Create a transcoder

In the transcoder workflow, you'll manually configure the transcoder, output renditions, and stream targets to fit your specific streaming solution.

Create a transcoder that receives a SRT source by sending a POST request to the /transcoders endpoint.

You can use the following sample request, making sure to:

  • Set protocol to srt.
  • Set delivery_method to push. Wowza Video doesn't support pull or cdn connections for SRT.
  • Set broadcast_location to the region that's closest to your video source.
  • Change any values unique to your broadcast, using the API reference documentation as a resource. See the Endpoint Reference button below.

Sample request

Endpoint Reference

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${WV_JWT}" \
-d '{    
  "transcoder": { 
    "billing_mode": "pay_as_you_go",      
    "broadcast_location": "us_west_california",      
    "delivery_method": "push",      
    "name": "MySRTTranscoder",      
    "protocol": "srt",      
    "transcoder_type": "transcoded"
  } 
}' "${WV_HOST}/api/${WV_VERSION}/transcoders"

Sample response

The response includes:

  • An id for the transcoder that you'll use throughout the rest of this task
  • source_connection_information you'll use in step 3 to configure an SRT source for the stream
    • domain_name, source_port, and playback_stream_name
{ 
  "transcoder": { 
    "id": "tmd8ybp2", 
    "name": "MySRTTranscoder", 
    "transcoder_type": "transcoded", 
    "billing_mode": "pay_as_you_go", 
    "broadcast_location": "us_west_california", 
    ... 
    "protocol": "srt", 
    "delivery_method": "push", 
    "source_port": 10000, 
    "domain_name": "[hostname].entrypoint.video.wowza.com",
    "playback_stream_name": "b01bda67",
    ...
    "outputs": []
  } 
} 

2. Add output renditions and stream targets

Complete the transcoder by adding output renditions and stream targets. For instructions, see one of the following articles, depending on whether you're creating an adaptive bitrate or passthrough transcoder:

Note: You'll need the transcoder ID from step 1.

3. Configure the source of your transcoder


Use the the domain_name, source_port, and stream_name values returned when you created the transcoder to configure your SRT encoder. You'll need to refer to documentation for your specific encoder to determine where to input the stream settings and user credentials for authentication.

If you were configuring OBS as the encoder, you'd enter the following values in OBS:

  • URL is formatted as:
    srt://[domain_name]:[source_port]/[application_name]
    Where:
    • [domain_name] is the ingest location of the server
    • [source_port] is the port (by default 1935)
    • [application_name] is the application name for the stream assigned by Wowza Video. This will appear within the playback URLs, such as app-abc123d45.
       
  • Stream key is the playback_stream_name value, such as b01bda67.

Authentication is disabled by default for SRT streams. Other encoders might use different names in their user interface, like Address instead of URL and Stream instead of Stream key. Make sure to refer to your encoder's documentation to determine the correct locations.

Note: When ingesting the stream, Wowza Video functions in SRT listener mode when establishing a handshake with a peer.

4. Test the transcoder connection


Now that you have configured your source, you can test your transcoder. You'll need the [transcoder_id] returned in step 1.

  1. Start the transcoder.

    Endpoint Reference

    curl -X PUT \
    -H "Authorization: Bearer ${WV_JWT}" \
    "${WV_HOST}/api/${WV_VERSION}/transcoders/[transcoder_id]/start"
    
    

     
  2. Check the state to make sure the transcoder started.

    Endpoint Reference

    curl -X GET \
    -H "Authorization: Bearer ${WV_JWT}" \
    "${WV_HOST}/api/${WV_VERSION}/transcoders/[transcoder_id]/state"

     
  3. Start the stream in the SRT encoder. How you start the encoder varies by device.
     
  4. Fetch a thumbnail that shows a frame of the playing stream to visually confirm the stream is playing.

    Endpoint Reference

    curl -X GET \
    -H "Authorization: Bearer ${WV_JWT}" \
    "${WV_HOST}/api/${WV_VERSION}/transcoders/[transcoder_id]/thumbnail_url"

     
  5. Stop the transcoder.

    Endpoint Reference

    curl -X PUT \
    -H "Authorization: Bearer ${WV_JWT}" \
    "${WV_HOST}/api/${WV_VERSION}/transcoders/[transcoder_id]/stop"
  6. Stop the stream in the source camera or encoder.

Related transcoder API requests