Stream targets in Wowza Streaming Engine™ media server software allow you to send live streams to widely distributed destinations.
This article explains how to create a Fastly stream target with a push connection to distribute your live streams using Wowza CDN. You need an Amazon AWS account and a Wowza Streaming Cloud account for this workflow.
Alternatively, you may configure your connection for a pull-based workflow where the destination pulls the stream data from the server.
Unless there is a specific need for a push-based workflow, it's strongly recommended to use a pull-based workflow instead. See Scaling Wowza Streaming Engine with Wowza CDN to learn more about the advantages and disadvantages of the push and pull workflows.
To configure your stream target using a pull connection, see Send a stream from Wowza Streaming Engine to a Wowza CDN HLS target using Wowza REST APIs.
Before you start
Before you start, we recommend that you review and have access to the following items:
- A valid Wowza Streaming Engine license and a Wowza CDN subscription through Wowza Video. Contact our sales team for more information.
- An Amazon Web Service account with create, read, and write access to S3 storage using access key security credentials. See AWS Free Tier to create a free account.
- Create a live application in Wowza Streaming Engine Manager.
1. Create a bucket in AWS S3
See Creating a bucket for instructions on how to create a bucket in AWS. You must configure some settings to allow streams to be played back from your S3 bucket.
- For your S3 bucket, enable ACLs. For best results, the Object Ownership should be set to Object Writer.
- Enable Public Access for objects in the bucket.
- For testing direct playback from the bucket, you may need to enable cross-origin resource sharing (CORS). After the bucket is created, select the Permissions tab for the bucket and add the following CORS configuration.
Note: CORS is only required for direct playback from the bucket. It's not required for playback via the Wowza CDN stream target.
[ { "AllowedHeaders": [], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [] } ]
- AWS bucket name: For example, my-s3-bucket.
- AWS bucket region: For example, us-west-1.
- AWS bucket URL: This is used with the Wowza CDN stream target in Wowza Video. The format for the AWS bucket URL is:
https://[bucket-name].s3.[region].amazonaws.com/ OR
https://my-s3-bucket.s3.us-west-1.amazonaws.com/
Note: For buckets in the us-east-1 region, AWS doesn't require the region in the URL (https://[bucket-name].s3.amazonasw.com/). This is a legacy format AWS URL. It won't work with Wowza CDN stream targets. Instead, you need to use the regionalised S3 URL for us-east-1, which is https://[bucket-name].s3.us-east-1.amazonaws.com.
- Record your IAM credentials. These are set per user in AWS. See Create an IAM admin and user group in AWS for more information. Record the following:
- AWS Access ID: For example, AKIAI6234VXXREN3KWJQ.
- AWS Secret Access Key: For example, y1PFFPOEwSrUfvvvdalA1qs9sFDM7+QzQTMHoqP7.
2. Enable the Wowza Streaming Engine stream target
Before you push a stream, you must enable stream targets for your live Wowza Streaming Engine application.
- Go to the contents panel of your live application and click Stream Targets.
- On the Stream Targets page, click Enable Stream Targets.

When stream targets are enabled, a checkmark appears next to the Stream Targets text in the contents panel. The Stream Targets page shows the status as Enabled.

- Restart the application for changes to take effect.
3. Create a Wowza Streaming Engine stream target
Once you've created your AWS S3 bucket and recorded your credentials, you can create a stream target in Wowza Streaming Engine to send your stream to AWS S3. The AWS S3 bucket is used as a storage location and works as an origin with Wowza Video.
- Send the following POST request using the Wowza Streaming Engine REST API:
/v2/servers/{serverName}/vhosts/{vhostName}/applications/{appName)/pushpublish/mapentries/{entryName}
In the sample request, make sure to:
- Set http.relativePlaylists to true. It is set to false by default.
- Set streamName to match the incoming stream name or transcoder rendition for each stream target.
- Set entryName to a unique name for your stream target.
- For adaptive bitrate entries, set profile to group-manager and group.name to a unique name for your stream target.
- Set cloudstorage.bucketName to your AWS bucket name.
- Set cloudstorage.region to your AWS bucket region.
- Set cloudstorage.accessID to your AWS access ID.
- Set cloudstorage.secretAccessKey to your AWS secret access key.
- Be sure to include the extraOptions object in the post request, as shown below.
- Change any additional values to be unique to your stream target.
- Before saving the file, use a JSON validator to validate the map entries. Copy the complete text after the = sign into the validator to check the syntax.
Note: For more information on map entries, see Use CDNs and services to distribute live streams from Wowza Streaming Engine.
Sample code — Single bitrate map entries
curl -X POST \ -H 'Accept:application/json; charset=utf-8' \ -H 'Content-Type:application/json; charset=utf-8' \ http://localhost:8087/v2/servers/(serverName)/vhosts/{vhostName}/applications/{appName}/pushpublish/mapentries/{entryName} \ -d ' { "entryName": "entryName", "sourceStreamName": "stream_name", "streamName": "stream_name", "profile": "cupertino-cloudstorage", "debugLog": false, "extraOptions": { "cloudstorage.provider": "S3", "cloudstorage.bucketName": "my-s3-bucket", "cloudstorage.region": "us-west-1", "cloudstorage.accessID": "AKIAI6IO5VXX-EXAMPLE", "cloudstorage.secretAccessKey": "y1PFFPOEwSrUfWyhalA1qs9sFDM7+QzQ-example", "cloudstorage.transportDebug": false, "http.relativePlaylists": true } }
Sample code — Adaptive bitrate map entries
curl --location --request POST 'http://127.0.0.1:8087/v2/servers/{serverName}/vhosts/{vhostName}/applications/{appName}/pushpublish/mapentries/{entryName} \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data-raw '{ "profile": "group-manager", "childProfile": "cupertino-cloudstorage", "sourceStreamName": "stream_name", "group.streamMatcher": "namePrefix", "group.name": "stream_name_ABR", "debugLog": false, "extraOptions": { "cloudstorage.provider": "S3", "cloudstorage.bucketName": "my-s3-bucket", "cloudstorage.region": "us-west-1", "cloudstorage.accessID": "AKIAI6IO5VXX-EXAMPLE", "cloudstorage.secretAccessKey": "y1PFFPOEwSrUfWyhalA1qs9sFDM7+QzQ-example", "cloudstorage.transportDebug": false, "http.relativePlaylists": true } } '
Sample Response
{ "success": true, "message": "Entry (entryName) saved successfully", "data": null }
- Copy the URL for the playlist from your S3 bucket, for example:
https://my-s3-bucket.s3-us-west-1.amazonaws.com/myStream/playlist.m3u8
Note: For buckets in the us-east-1 region, this URL will be the legacy format and needs to be changed to include the region.
-
Test the playback using the URL for your playlist in your player.
Note: Some players will require CORS headers to be enabled for direct playback from the bucket.
4. Create a Wowza CDN stream target in Wowza Video
After sending your content to your AWS S3 bucket, continue with these steps to use that storage location as an origin with Wowza Video. Setting up a Wowza CDN stream target allows you to manage traffic to your S3 bucket more efficiently while reducing costs when pulling content from that location.
Note: Only one Wowza CDN stream target needs to be created for each S3 bucket.
You can use the following sample request, making sure to:
- Set the custom_origin_region to your AWS bucket region.
Valid values:Note: custom_origin_region is available in version 1.6 and later of the REST API.
- us - United States
- eu - Europe
- asia - Asia
- sa - South America
- india - India
- Set custom_origin_url to your AWS bucket URL.
- Change any values unique to your broadcast, using the API reference documentation as a resource. See the Endpoint Reference button below.
Sample request
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${WV_JWT}" \ -d '{ "stream_target_wowza_cdn": { "name": "My Wowza CDN target", "custom_origin_region": "us", "custom_origin_url": "https://my-s3-bucket.s3.us-west-1.amazonaws.com/" } }' "${WV_HOST}/api/${WV_VERSION}/stream_targets/wowza_cdn"
Sample response
The response includes a custom_origin_url you'll use for playback. For example:
https://cdn3.wowza.com/5/YVRyc3pjNnV5OEtr/
{ "stream_target_wowza_cdn": { "id": "xvmjckfk", "name": "My Wowza CDN target", "state": "activated", "stream_name": "K2R3dEhW", "delivery_protocols": [ "hls" ], "playback_urls": { "hls": [ { "name": "default", "url": "https://cdn3.wowza.com/5/YVRyc3pjNnV5OEtr/[application-name]/[stream-name]" } ] }, "force_ssl_playback": false, "use_legacy_tls": false, "token_auth_enabled": false, "token_auth_playlist_only": false, "geoblock_enabled": false, "referer_enabled": false, "custom_origin_url": "https://my-s3-bucket.s3.us-west-1.amazonaws.com/", "custom_origin_region": "us", "created_at": "2025-01-29T21:43:17.000Z", "updated_at": "2025-01-29T21:43:17.000Z" } }
5. Test playback
As the root for your playback URL, you can use the custom_origin_url or the playback URL from the sample response in the last section. To test playback, append the path to the specific file inside the S3 bucket. For more, see the following examples.
Single bitrate with stream name in the URL
Wowza CDN URL: https://cdn3.wowza.com/5/YVRyc3pjNnV5OEtr/myStream/playlist.m3u8
S3 URL - https://my-s3-bucket.s3.us-west-1.amazonaws.com/myStream/playlist.m3u8
Adaptive bitrate with group name in the URL
Wowza CDN URL - https://cdn3.wowza.com/5/YVRyc3pjNnV5OEtr/myStream-ABR/playlist.m3u8
S3 URL - https://my-s3-bucket.s3.us-west-1.amazonaws.com/myStream-ABR/playlist.m3u8