The stream targets feature in Wowza Streaming Engine™ media server software (version 4.2.0 and later) allows you to send live streams from Wowza Streaming Engine to widely distributed destinations over various protocols.
The easiest way to send live streams to distributed destinations is to use the stream targets user interface in Wowza Streaming Engine Manager. You can, however, also edit the PushPublishMap.txt map file to manually instruct Wowza Streaming Engine to send a source stream to a target destination.
This article provides sample map file entries and playback testing instructions for the target destinations supported by Wowza Streaming Engine software. This workflow is required for Wowza Streaming Engine versions 4.2 and earlier and can optionally be used with later versions of Wowza Streaming Engine. Version-specific changes are noted where applicable.
Wowza Streaming Engine
To send a stream to another server running Wowza Streaming Engine, use the rtmp profile. The UserName and Password items are only needed if RTMP authentication is enabled on the destination Wowza server.
Following is an example entry to send the stream myStream to a remote server that's running Wowza Streaming Engine at the domain name wowza.myserver.com, assuming RTMP authentication is enabled, and the following credentials are valid:
- Application: myApplication
- User Name: myUser
- Password: myPassword
Example map entry:
For adaptive bitrate delivery, the map entry is a bit more complicated to ensure that keyframes in the streams are properly aligned. For example, for the following three adaptive bitrate streams:
- myStream_480p: 500Kbps
- myStream_360p: 750Kbps
- myStream_720p: 1000Kbps
The map entries to properly send these streams to Wowza Streaming Engine and maintain alignment are:
myStream_360p={"profile":"rtmp", "streamName":"myStream_360p", "host":"wowza.myserver.com", "application":"myApplication", "userName":"myUser", "password":"myPassword", "adaptiveStreaming":"true"}
myStream_720p={"profile":"rtmp", "streamName":"myStream_720p", "host":"wowza.myserver.com", "application":"myApplication", "userName":"myUser", "password":"myPassword", "adaptiveStreaming":"true"}
You must create a Synchronized Multimedia Integration Language (SMIL) file in the [install-dir]/content folder on the remote server running Wowza Streaming Engine to properly playback the adaptive bitrate set of streams. For example, the SMIL file for the above set of streams might look like this:
<smil> <head> </head> <body> <switch> <video src="myStream_480p" video-bitrate=400000 audio-bitrate=96000 width=320 height=180> <param name="videoCodecId" value="avc1.66.12" valuetype="data"/> <param name="audioCodecId" value="mp4a.40.2" valuetype="data"/> </video> <video src="myStream_360p" video-bitrate=650000 audio-bitrate=96000 width=476 height=268> <param name="videoCodecId" value="avc1.66.21" valuetype="data"/> <param name="audioCodecId" value="mp4a.40.2" valuetype="data"/> </video> <video src="myStream_720p" video-bitrate=900000 audio-bitrate=96000 width=640 height=360> <param name="videoCodecId" value="avc1.66.31" valuetype="data"/> <param name="audioCodecId" value="mp4a.40.2" valuetype="data"/> </video> </switch> </body> </smil>
Wowza Video
No transcoding or transcoding with Wowza Streaming Engine
To send a stream to Wowza Video, use the wowza-cdn profile. This profile covers scenarios where you push a single stream without any transcoding, or you push an adaptive bitrate stream that's transcoded with Wowza Streaming Engine. Here's an example map entry:
Note:
- Sending a stream to Wowza Video requires Wowza Streaming Engine 4.1.2 or later.
- For instructions on sending a live stream from Wowza Streaming Engine to Wowza Video using stream targets, see Push streams to Wowza CDN from Wowza Streaming Engine.
- For instructions and examples related to sending CMAF HLS stream targets to Wowza Video using the wowza-cdn profile and the PushPublishMap.txt file, see Push a CMAF HLS stream to Wowza Video using a map file.
Transcoding with Wowza Video
To send a stream for transcoding in Wowza Video, use the wowza-video-transcoder profile. Here's an example map entry:
myIncomingStream={"entryName":"streamTargetName", "profile":"wowza-video-transcoder", "wowzaVideoTranscoder.width":"1280", "destinationName":"wowzavideocdn", "wowzaVideoTranscoder.region":"us_east_virginia", "wowzaVideoTranscoder.height":"720", "enabled":"false"}
For more information, see About map profiles and the wowza-video-transcoder profile parameters.
Note:
- Usage of the wowza-video-transcoder profile requires Wowza Streaming Engine 4.8.27 or later.
- For instructions on sending a live stream from Wowza Streaming Engine to Wowza Video for transcoding, see Send a stream from Wowza Streaming Engine for transcoding in Wowza Video.
- For instructions on sending a live stream from Wowza Streaming Engine to Wowza Video for transcoding using Wowza APIs, see Send a stream from Wowza Streaming Engine for transcoding in Wowza Video using Wowza APIs.
Adobe Media Server
To send a stream to Adobe Media Server, use the rtmp profile. The UserName and Password items are only needed if RTMP authentication is enabled on the destination Adobe Media Server.
Following is an example entry to send the stream myStream to a remote Adobe Media Server, assuming RTMP authentication is enabled and the following credentials are valid:
- User Name: myUser
- Password: myPassword
Example map entry:
Akamai HTTP (HLS and MPEG-DASH)
To send a stream to Akamai using HLS or MPEG-DASH use the cupertino-akamai or mpegdash-akamai profile, respectively. These profiles are configured to send streams to the Akamai HD Network. For proper operation, the Wowza Streaming Engine application must be set up as a live application and the cupertinolivestreampacketizer or mpegdashlivestreampacketizer must be enabled in the <Stream>/LiveStreamPacketizers container. If the appropriate packetizer isn't set, a warning message is logged when the live stream is sent to Akamai.
Streams sent to Akamai must be provisioned through the Luna Control Center. Be sure to use the appropriate configuration type for each stream. For example, Apple HLS streams must be configured as HD iPhone/iPad Live. You must also provision a stream with the following information:
- StreamId
- HostId
The StreamId is the number after the at sign (@) in the Stream Name and the HostId is in the Host Name / Status column. Entering a value for the HostId isn't required. If not specified, the HostId value will default to example-i. For this example, we'll use an Apple HLS stream that's already provisioned for testing, supplied with the following values:
- StreamId: 123456
- HostId: example-i
This is the only information that's required. The remaining map entry components only control the full playback URL.
Example cupertino-akamai map entry:
Example mpegdash-akamai map entry:
See About map profiles for the definitions of these fields.
About adaptive bitrate streaming to Akamai
You can create Akamai stream targets for adaptive bitrate streams using Wowza Streaming Engine Manager or by directly editing the PushPublishMap.txt file. For HLS and MPEG-DASH destinations, the most efficient way is to directly edit the PushPublishMap.txt file and create a single stream target with the group-manager profile. See About the group-manager profile for more information. Alternatively, you can create multiple stream targets from Wowza Streaming Engine Manager or add multiple map entries in the PushPublishMap.txt with adaptive groups. See About adaptive groups for more information.
Note: You can also use the Wowza Streaming Engine REST API to send adaptive bitrate streams to Akamai with a single stream target with the group-manager profile. See Send adaptive bitrate streams to Akamai using a single stream target for information.
About the group-manager profile
Using the group-manager profile in a map file entry, you can group multiple bitrate stream renditions and send the group to Akamai (HLS or MPEG-DASH) with a single map file entry, which creates a single stream target. The group contains the streams you specify and uses a unique, adaptive bitrate playback URL. Using the group-manager profile is the most efficient way to stream HLS or MPEG-DASH adaptive bitrate content to Akamai.
Note: Stream targets created using the group-manager profile do not appear in Wowza Streaming Engine Manager.
Stream renditions can be easily identified and grouped using several methods defined by the group.streamMatcher parameter in the entry, including a list of stream names (nameList), regular expressions (nameRegex), SMIL files (smil), and stream name groups created by Transcoder (ngrp). The group.name parameter you specify is used to identify the group in URLs.
See group-manager profile parameters for more information about creating a map file entry with the group-manager profile.
Example group-manager map entry for sending HLS streams to Akamai:
Example group-manager map entry for sending MPEG-DASH streams to Akamai:
About adaptive groups
Note: In Wowza Streaming Engine 4.7.5.02 and earlier, the adaptiveGroup parameter was called adaptiveGroups, and it supported a comma-separated list of group names which enabled you to create a single stream target for each rendition and specify as many adaptive groups as you wanted to include the rendition in. Due to changes in Akamai Media Services Live, however, the single rendition must now be pushed through multiple targets, one for each adaptive group the rendition is part of.
If you don't use the group-manager profile, you must create a stream target for each adaptive bitrate rendition using the adaptiveGroup parameter, which allows Wowza Streaming Engine to create an adaptive bitrate stream from a group of individual streams. The group contains the streams you specify and uses a unique, adaptive bitrate playback URL. See Akamai HTTP protocol playback URL formats to see how the URL formats are enumerated.
A stream can belong to multiple adaptive bitrate groups, but a separate target must be configured for each group the rendition is part of. All streams in an adaptive bitrate group must have the same akamai.streamId, akamai.hostId, akamai.eventName, and akamai.sendToBackupServer (if defined), but each stream must have a unique streamName. To ensure unique streamName values, we recommend including the bitrate or vertical resolution of the stream, such as myStream_720p. It's sufficient to set the streamName to the same value as the source stream name. The following example shows how three Apple HLS streams (myStream1, myStream2, and myStream3) are used in an adaptive bitrate group (group1 and group2):
myStream2={"profile":"cupertino-akamai", "streamName":"myStream2", "cupertino.renditions":"audiovideo", "akamai.streamId":"123456", "akamai.hostId":"example-i", "akamai.eventName":"test", "adaptiveGroup":"group1", "debugLog":"false"}
myStream3={"profile":"cupertino-akamai", "streamName":"myStream3", "cupertino.renditions":"audiovideo", "akamai.streamId":"123456", "akamai.hostId":"example-i", "akamai.eventName":"test", "adaptiveGroup":"group2", "debugLog":"false"}
In this example, group1 includes myStream1 and myStream2, and group2 includes myStream1 and myStream3.
You can also control how many items are maintained in a stream's playlist by using the http.playlistCount settings. By default, the value of http.playlistCount is set to 0, which maintains a sliding window live stream with three segments. Set the playlist count to a higher value to maintain a longer DVR playlist on Akamai for DVR functionality. You can also set http.playlistAcrossSessions to true to instruct Wowza Streaming Engine to try to maintain a playlist across streaming sessions. The http.playlistTimeout controls the time limit for how long non-running playlists are maintained.
Example cupertino-akamai map entry that uses many of the configuration options:
Akamai RTMP
To send a stream to Akamai using RTMP, use the rtmp-akamai profile. The rtmp-akamai profile is configured to send to the Akamai HD Network. When sending streams to Akamai, the following account information is required:
- StreamId
- User Name
- Password
Following is an example entry to send the stream myStream to Akamai, assuming these credentials:
- StreamId: 12345
- User Name: myUser
- Password: myPassword
Example map entry:
The stream is sent to the Akamai entry point p.ep[stream-id].i.akamaientrypoint.net/EntryPoint/ with a stream name of myStream_1_500@[stream-id]. For the example entry above, the entry point is p.ep12345.i.akamaientrypoint.net/EntryPoint/ and the stream name is myStream_1_500@12345. The optional akamai.sendToBackupServer parameter would change the entry point to b.ep12345.i.akamaientrypoint.net/EntryPoint/ if set to true.
To configure a backup/failover endpoint, add the optional akamai.sendToBackupServer:true parameter to the map entries on the backup Streaming Engine instance. This parameter is only required on the backup instance and will continue to send the stream to Akamai should the primary server running Wowza Streaming Engine fail.
Example map entry:
- The [name] value can be any string but must be identical for all of your event's streams, or else the Akamai HD Network will treat them as different events. The name value can't include an underscore (_) character.
- The [angle] value can be any string but is intended to be a string that identifies the camera angle.
- The [bitrate] value should be the total bitrate of the video in kilobits per second (kbps).
- The underscore (_) character is the only allowed field separator.
If sending streams to the original AMS network, set the akamai.hdNetwork parameter to false to allow simple stream names without the above syntax requirements.
For adaptive bitrate delivery, the map entry is a bit more complicated to ensure that the keyframes in the streams are properly aligned. For example, for the following three adaptive bitrate streams:
- myStream_480p: 500Kbps
- myStream_360p: 750Kbps
- myStream_720p: 1000Kbps
The map entries to properly send these streams to Akamai to maintain alignment are:
myStream_360p={"profile":"rtmp-akamai", "streamName":"myStream_1_750", "akamai.streamId":"12345", "userName":"myUser", "password":"myPassword", "adaptiveStreaming":"true", "sendOriginalTimecodes":"true", "originalTimecodeThreshold":"0x100000"}
myStream_720p={"profile":"rtmp-akamai", "streamName":"myStream_1_1000", "akamai.streamId":"12345", "userName":"myUser", "password":"myPassword", "adaptiveStreaming":"true", "sendOriginalTimecodes":"true", "originalTimecodeThreshold":"0x100000"}
To play the stream through the Akamai network via Apple HLS (HD network only), you can use any HLS player, such as the stock iOS media player or Safari. Create the stream URL from the streamID and the [name] and [angle] parts of the streamName in your map file, and from the hostname found in the Akamai configuration screens, in the following form:
http://<HostName>.akamaihd.net/i/[name]_[angle]@[streamID]/master.m3u8
See Stream to the Akamai HD network from Wowza Streaming Engine for instructions on how to send a live stream to Akamai.
BitGravity
To send streams to BitGravity, use the rtmp profile. First, use the BitGravity Dashboard to provision a live stream.
Following is an example entry to send the stream myStream to BitGravity, assuming the destination live stream has been provisioned through the dashboard:
- Server: rtmp://rtpdev1.iad1.bitgravity.com/rtmp/push
- Stream: test@test.com/71d73d4cfd1e2f2fed77238021a2cbbe/test/live/feed01
The Server URL breaks down to:
- Host: rtpdev1.iad1.bitgravity.com
- Application: rtmp
- AppInstance: push
Example map entry:
EdgeCast
To send a stream to EdgeCast, use the rtmp profile. The rtmp profile is configured to send to an RTMP CDN. When sending to EdgeCast, the following account information is required:
- Host
- ApplicationID
- StreamName
- Live Authentication Key
Following is an example entry to send the stream myStream to EdgeCast, assuming these credentials:
- Host: fso.lax.0001.edgecastcdn.net
- ApplicationID: 200001
- StreamName: myStream
- Live Authentication Key: 0123456
Example map entry:
Icecast 2 Server
To send to an Icecast 2 server, use the icecast2 profile. When sending to an Icecast 2 server , the following account information is required:
- Host
- Port
- Username
- Password
- StreamName
The following information is optional:
- Public
- URL
- Name
- Genre
- ICQ ID
- AIM ID
- IRC ID
Following is an example entry to send the stream myStream to a Icecast 2 server, assuming the following credentials:
- Host: 192.168.1.10
- Port: 8000
- Username: source
- Password: broadcast
- StreamName: mountpoint.aac
- Public: true
- URL: http://www.wowza.com
- Name: Wowza Server
- Genre: Wowza Music
- ICQ ID: icqme
- AIM ID: aimem
- IRC ID: ircme
Example map entry:
Level 3
To send to Level 3, use the rtmp profile. When sending to Level 3, the following account information is required:
- User Name
- Password
- Host
- Application
Following is an example entry to send the stream myStream to Level 3, assuming these credentials:
- User Name: myUser
- Password: myPassword
- Host: level3entry.com
- Application: myaccount
Example map entry:
Limelight
To send to Limelight, use the rtmp-limelight profile. The rtmp-limelight profile is configured to send to the Limelight CDN. When sending to Limelight, the following account information is required:
- User Name
- Password
Following is an example entry to send the stream myStream to Limelight, assuming these credentials:
- User Name: myUser
- Password: myPassword
Example map entry:
Livestream
To send to the original Livestream platform, use the rtmp profile and the following map file entry information:
- Host: publish.livestream.com
- Application: mogulus
- appInstance: myChannel/username=myUser/password=myPassword/isAutoLive=true
Example map entry:
To playback the stream, log in to your Livestream account and go to the Channel page.
MPEG-2 Transport Stream (MPEG-TS)
To send an MPEG-TS stream to the multicast address 239.1.1.1:10000, use the following map entry:
Real-time Transport Protocol (RTP), unicast or multicast
To send a native RTP stream to the multicast address 239.1.1.1, ports 10002-10005, use the following map entry:
- When you use native RTP to send a stream to a destination, the video and the audio each use a UDP port. Make sure that the VideoPort and AudioPort values are even numbers. This will allow room for the second port.
- When you use MPEG-TS or native RTP to send a live stream to a destination, an SDP file is automatically generated in the [install-dir]/applications/[application]/sdp folder. The name of the SDP file is the StreamName value that's specified in the map entry with a .sdp file name extension. Media players that support multicast playback can use this file to play the stream.
- When you use MPEG-TS or native RTP to send a live stream to a destination, both protocols use a similar configuration to send a stream to a unicast and multicast address. The only difference is that the Host item in the map configuration must point to the proper address range. Multicast address ranges are described in the following Wikipedia article Multicast address.
- When streaming multicast on a Linux computer that has multiple network interfaces, there may be issues under certain kernel versions where the multicast stream isn't available on both interfaces. For more information, see CentOS - Problems with Multicast.
- See Use RTP to distribute live streams from Wowza Streaming Engine for instructions on how to send a live stream to an RTP destination using stream targets in Wowza Streaming Engine 4.2.
Shoutcast 1 Server
To send to a Shoutcast 1 server, use the shoutcast1 profile. When sending to a Shoutcast 1 server, the following account information is required:
- Host
- Port
- Password
The following information is optional:
- Public
- URL
- Name
- Genre
- ICQ ID
- AIM ID
- IRC ID
Following is an example entry to send the stream myStream to a SHOUTcast 1 server, assuming the following credentials:
- Host: 192.168.1.10
- Port: 8000
- Password: broadcast
- Public: true
- URL: http://www.wowza.com
- Name: Wowza Server
- Genre: Wowza Music
- ICQ ID: icqme
- AIM ID: aimem
- IRC ID: ircme
Example map entry:
Shoutcast 2 Server
To send to a Shoutcast 2 server, use the shoutcast2 profile. When sending to a Shoutcast 2 server , the following account information is required:
- Host
- Port
- Username
- Password
- StreamName
The following information is optional:
- Public
- URL
- Name
- Genre
- ICQ ID
- AIM ID
- IRC ID
Following is an example entry to send the stream myStream to a SHOUTcast 2 server, assuming the following credentials:
- Host: 192.168.1.10
- Port: 8000
- Username: authenticationHash
- Password: broadcast
- StreamName: 1
- Public: true
- URL: http://www.wowza.com
- Name: Wowza Server
- Genre: Wowza Music
- ICQ ID: icqme
- AIM ID: aimem
- IRC ID: ircme
Example map entry:
Secure Reliable Transport (SRT)
To send to an SRT destination, the following information is required:
- sourceStreamName
- host
- port
The following information is optional:
- srtConnectTimeout
- srtFlightFlagSize
- srtInputBandwidth
- srtKeyAnnounce
- srtKeyLength
- srtKeyRefreshRate
- srtLatency
- srtMaximumBandwidth
- srtMaximumSegmentSize
- srtOverheadBandwidth
- srtPassPhrase
- srtStreamId
- srtTimesToPrintStats
- srtTooLatePacketDrop
Example map entry:
Note: See Use SRT to distribute live streams from Wowza Streaming Engine to send a live stream to an SRT destination using stream targets in Wowza Streaming Engine 4.7.3 and later.
UStream.tv
To send to UStream.tv, use the rtmp profile. On the UStream Dashboard for your channel, find the Remote tab and get the URL and Stream Key. They will look something like this:
- URL: rtmp://1.2345.fme.ustream.tv/ustreamVideo/67890
- StreamName: ExampleStringKeyKFMpfXrssJhbq
The streaming URL is broken into the following components in the map data:
- Host: 1.2345.fme.ustream.tv
- Application: ustreamVideo
- AppInstance: 67890
Example map entry:
To playback the stream, log in to your Ustream account and go to the Channel page. After an advertisement, the live video should start to play.
YouTube Live
To send to YouTube Live, use the rtmp profile. After your account is created, you'll receive a Stream Name and two URLs. They will look something like this:
- URL: rtmp://a.rtmp.youtube.com/live2
- Backup URL: rtmp://b.rtmp.youtube.com/live2?backup=1
- StreamName: myaccount.u8w0-z0pr-c4qx-7jt1
The streaming URLs are broken into the following components in the map data:
- Host: a.rtmp.youtube.com
- Application: live2
Example map entry: