The Wowza Video™ service can connect to any H.264 encoder that supports the RTSP network protocol. This article describes how to use the Wowza Video REST API to create a live stream or transcoder and configure an RTSP-based encoder as the video source.
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.
You should choose between the following two workflows:
Decide between the live stream or transcoder workflow.
See Decide between a live stream or transcoder workflow for more information about these workflows.
Live stream workflow
Create a live stream that receives a RTSP 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
encodertoother_rtsp. - Set
broadcast_locationto 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.
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_rtsp",
"name": "MyLiveStream",
"transcoder_type": "transcoded"
}
}' "${WV_HOST}/api/${WV_VERSION}/live_streams"The response includes:
- An
idfor the live stream that you'll use in step 3. source_connection_informationyou'll use in the next step to configure an RTSP source encoder for the live stream.primary_server,host_port,stream_name,username, andpassword.
{
"live_stream": {
"id": "1234abcd",
"name": "MyLiveStream",
...
"encoder": "other_rtsp",
...
"source_connection_information": {
"primary_server": "rtsp://[subdomain].entrypoint.video.wowza.com/app-6D7PK278",
"host_port": 1935,
"stream_name": "32a5814b",
"disable_authentication": false,
"username": "client2",
"password": "1234abcd"
},
...
}
}Use the source_connection_information from the live stream response to configure your RTSP 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.
- 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.
- Stream key is the
stream_namevalue, such as b01bda67. - Username and Password are the
usernameandpasswordvalues.
Different 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.
This topic uses the push delivery method. If you use the pull delivery method, configure the source by determining and providing the source_url value when creating the live stream. The source_url must be an RTSP URL with a publicly accessible hostname or IP address.
Now that you have configured your source, you can test your live stream. You'll need the [live_stream_id] returned in step 1.
Start your live stream.
curl -X PUT \ -H "Authorization: Bearer ${WV_JWT}" \ "${WV_HOST}/api/${WV_VERSION}/live_streams/[live_stream_id]/start"Check the state to make sure the live stream started.
curl -X GET \ -H "Authorization: Bearer ${WV_JWT}" \ "${WV_HOST}/api/${WV_VERSION}/live_streams/[live_stream_id]/state"Start the stream in the RTSP encoder. How you start the encoder varies by device.
Fetch a URL to a thumbnail that you can enter into a browser and visually confirm the stream is playing.
curl -X GET \ -H "Authorization: Bearer ${WV_JWT}" \ "${WV_HOST}/api/${WV_VERSION}/live_streams/[live_stream_id]/thumbnail_url"Stop the live stream.
curl -X PUT \ -H "Authorization: Bearer ${WV_JWT}" \ "${WV_HOST}/api/${WV_VERSION}/live_streams/[live_stream_id]/stop"Stop the stream in the source camera or encoder.
- GET/live_streams — View all live streams for an account.
- GET/live_streams/ID — View the details of a live stream, including the player embed code and hosted page URL.
- PATCH/live_streams/ID — Update a live stream's configuration.
Transcoder workflow
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 RTSP source by sending a POST request to the /transcoders endpoint.
You can use the following sample request, making sure to:
- Set
protocoltortsp. - Set
broadcast_locationto 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.
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": "MyTranscoder",
"protocol": "rtsp",
"transcoder_type": "transcoded"
}
}' "${WV_HOST}/api/${WV_VERSION}/transcoders"Sample response
The response includes:
- An
idfor the transcoder that you'll use throughout the rest of this task. - Source connection information you'll use in step 3 to configure an RTSP source for the stream.
domain_name,source_port,application_name,stream_name,usernameandpassword.
{
"transcoder": {
"id": "tmd8ybp2",
"name": "MyTranscoder",
"transcoder_type": "transcoded",
"billing_mode": "pay_as_you_go",
"broadcast_location": "us_west_california",
...
"protocol": "rtsp",
"delivery_method": "push",
"source_port": 1935,
"domain_name": "[wowzasubdomain].entrypoint.video.wowza.com",
"application_name": "app-B8P6K226",
"stream_name": "b40618d9",
...
"disable_authentication": false,
"username": "user123",
"password": "abcPassword",
...
"outputs": []
}
}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:
You'll need the transcoder ID from step 1.
- Adaptive bitrate transcoder — Create an ABR stream and send it to a target with the Wowza Video REST API
- Passthrough transcoder — Pass a stream through the transcoder to a target with the Wowza Video REST API
Use the the domain_name , source_port, application_name, stream_name, username and password values returned when you created the transcoder to configure your RTSP 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.
- 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
- Stream key is the
stream_namevalue, such as b01bda67. - Username and Password are the
usernameandpasswordvalues.
Different 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.
This topic uses the push delivery method. If you use the pull delivery method, configure the source by determining and providing the source_url value when creating the transcoder. The source_url must be an RTSP URL with a publicly accessible hostname or IP address.
Configuring other ports
Wowza Video accepts streams over RTSPS on port 443 using TCP only. This port must be manually specified and not all players will play RTSPS. Testing in advance is recommended.
Examples of RTSPS over TCP with and without credentials:
With credentials:
rtsps://username:password@4b6419.entrypoint.cloud.wowza.com:443/app-t2g7RJCq/5972fb4d
Without credentials:
rtsps://12345.entrypoint.cloud.wowza.com:443/app-name/stream_name
Now that you have configured your source, you can test your transcoder. You'll need the [transcoder_id] returned in step 1.
Start the transcoder.
curl -X PUT \ -H "Authorization: Bearer ${WV_JWT}" \ "${WV_HOST}/api/${WV_VERSION}/transcoders/[transcoder_id]/start"Check the state to make sure the transcoder started.
curl -X GET \ -H "Authorization: Bearer ${WV_JWT}" \ "${WV_HOST}/api/${WV_VERSION}/transcoders/[transcoder_id]/state"Start the stream in the RTSP encoder. How you start the encoder varies by device.
Fetch a thumbnail that shows a frame of the playing stream to visually confirm the stream is playing.
curl -X GET \ -H "Authorization: Bearer ${WV_JWT}" \ "${WV_HOST}/api/${WV_VERSION}/transcoders/[transcoder_id]/thumbnail_url"Stop the transcoder:
curl -X PUT \ -H "Authorization: Bearer ${WV_JWT}" \ "${WV_HOST}/api/${WV_VERSION}/transcoders/[transcoder_id]/stop"Stop the stream in the source camera or encoder.
- GET/transcoders — View all transcoders for an account.
- GET/transcoders/ID — View the details of a transcoder.
- PATCH/transcoders/ID — Update a transcoder's configuration.