# Deliver real-time streams with the Wowza Video REST API Wowza Video™ Real-Time Streaming at Scale provides half-second latency to all your viewers, no matter where they are. Real-time streaming is perfect for interactive use cases like video chats, auctions, e-sports, fitness, e-commerce, gambling, and more. If your audience is fewer than 300 viewers or you want to stream in near real-time alongside other delivery protocols, you may choose to [use our standard WebRTC solution](/docs/wowza-video/guides/video-source/encoder-camera/deliver-webrtc-streams-to-viewers). Info Real-Time Streaming at Scale is available only through the 1.7 version of the Wowza Video REST API or later. Streaming using Real-Time Streaming at Scale requires that you provision the stream. The stream can be supplied from Wowza Video using the UI or API. This article has instructions on how to use the Wowza Video UI to create a Real-Time stream. We have three options for configuring your streaming publish and playback clients: the Javascript SDK for Real-Time Streaming, OBS fo Real-Time Streaming at Scale, and RTMP. You need to create and host a viewer page using HMTL and Javascript to use Real-Time Streaming at Scale with any configuration. You must use the Javascript SDK to stream playback. ## Before you start You should be familiar with the following concepts: - **API authentication** **methods**. We use JSON web tokens for API authentication. See [Authentication](/docs/wowza-video/about-the-rest-api/authentication) for more information. - **Environment variables**. We use environment variables for the API version `${WV_VERSION}` and your JWT `${WV_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](/docs/wowza-video/about-the-rest-api/api-overview#tools-for-testing-the-api) for instructions. - **Real-time streaming workflows**. See [About real-time streaming](/docs/wowza-video/reference/sdks/real-time-streaming-at-scale-js-sdk) for more information. - **HTML and Javascript**. You should have access to the following items: - A **RTS@S license**. Contact us for more information. To enable and purchase capacity for Real-Time Streaming at Scale for your account and access the `/real_time` operations, schedule a call. ## 1. Create a real-time stream Create a real-time stream by sending a `POST` request to the `/real_time` endpoint. You can use the following sample request, making sure to: - Set `name` to a descriptive name for your real-time stream. - Set `enable_secure_viewer` to `true` and set an `expires_on` date if you would like to add a security token that must be passed by viewers for playback. - Change any values unique to your broadcast, using the API reference documentation as a resource. See the **Endpoint Reference** button below for a full list of options. Some examples: - You might set `recording` to `true` so you'll have an MP4 of the stream you can download later. See [Record a real-time stream with the Wowza Video REST API](/docs/wowza-video/guides/record-streams/mp4/record-a-real-time-stream) for more information. - If your broadcast location is closest to Europe, Middle East, or Africa, set `region` to `amsterdam` for the best stream performance possible. The default is `phoenix`. - If your broadcast location is closest to East Asia, South Asia, Southeast Asia, or Oceania, set `region` to `singapore` or `bangalore`. The default is `phoenix`. - See the Javascript SDK reference for additional configuration options. #### Sample request Endpoint Reference ``` curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${WV_JWT}" \ -d '{ "real_time_stream": { "name": "MyRealTimeStream", "enable_secure_viewer": false } }' "${WV_HOST}/api/${WV_VERSION}/real_time" ``` #### Sample response The response includes: - An ID that you can use to perform other actions on the stream, like getting the details or deleting it. This is also used to configure the viewer page. - The `stream_name` generated by Wowza Video. This is used to configure the viewer page. ``` { "real_time_stream": { "id": "2adffc17", "name": "MyRealTimeStream", "stream_name": "8d304b93f1684320a54f2798666eeca7", "token": "97e52731bc21ef66e4c05a8ee1e28b64bf5f9db728573d94e690277cea9215bc", "subscribe_token": "50e161bfa42fbd581a0dfe5f632596b86c2c577a56bd439b38f8c904aabad04d", "rtmp_url": "rtmp://[primary_server]:[host_port]/[sub-domain]/[stream_name]?[token]", "enable_secure_viewer": true, "state": "active", "recording": false, "disable_vod_encoder": false, "created_at": "2021-06-30T18:02:20.00Z", "updated_at": "2021-06-30T20:03:16.00Z", "region": "phoenix" } } ``` Wowza Video creates a real-time stream and provides a `token` property for publishing security, a `subscribe_token` property for viewing security, and `stream_name` you will need to configure your source. ## 2. Configure your video source Now that you have created your stream, you have three options for configuring input to your real-time stream: - **Javascript SDK for Real-Time streaming** – Embeds your browser-based capture into a web page. - **OBS for Real-Time Streaming at Scale – Wowza WebRTC** – Gives you the flexibility to use multiple inputs, transitions, and other production tools traditionally provided by OBS. - **RTMP** – Supports all professional devices. This protocol is not optimized for low latency, so it is likely to increase the streaming delay by approximately 1 second. details summary Javascript SDK for Real-Time Streaming ### JavaScript SDK for Real-Time Streaming The Javascript SDK lets you build your own custom publication page. We provide sample code to get you started. Info You can also use NPM to build your publication and viewer pages. See the Javascript SDK reference for more information. Use the publisher page sample code, making sure to: - Set 'my-stream-name' to the `stream_name` generated by Wowza for your real-time stream, for example: *8d304b93f1684320a54f2798666eeca7* - Set 'my-publish-token' to the `token` generated by Wowza for your real-time stream, for example: *97e52731bc21ef66e4c05a8ee1e28b64bf5f9db728573d94e690277cea9215bc* - See the Javascript SDK reference for additional configuration options. ```