This section covers methods allowing to organize the playback of a Video On Demand (VOD) or Over The Top (OTT) stream. For production ingest and monitoring, see continuous streaming. For playback integration and analytics, use video api. Recommended product path: Ingest & route, Player & embed. For this workflow, Player & embed is the most direct fit., and scaling guide. For implementation details, continue with Create a Virtual Events Platform Setup CloudFront CDN for Live Events. Part I and Low latency streaming that actually works protocols, configs, and pitfalls.
The core idea of this module is to get a playlist and video segments of the required quality and length, regardless of what is the source stream. SRT, RTSP and all of the inputs declared in the technical specification are supported.
Creates a process that will play the stream from the specified input.
If necessary, the stream can be transcoded here without any additional calls to other modules.
Once successful connection to the incoming stream is established, it generates the address from where you can pick up the M3U8 or MPD playlist and its segments.
Publish RTSP stream:
ffmpeg -re -i "./videos/awesome-video.mp4" -f mpegts "rtsp://127.0.0.1/live.sdp"
Or publish SRT stream:
ffmpeg -re -i "./videos/awesome-video.mp4" -f mpegts "srt://127.0.0.1:1935/publisher/awesome-srt-server/srt-stream-01"
Play video on demand (as HLS):
ffplay -i "http://1.2.3.4/hls/622c93b366b14700326ff543/622c93b366b14700326ff543/index.m3u8"
Play video on demand (as MPEG-DASH) via HTTPS:
ffplay -i "https://1.2.3.4/hls/622c93b366b14700326ff543/622c93b366b14700326ff543/index.mpd"
Unique player name For playback integration and analytics, use video api. Recommended product path: Player & embed., and scaling guide. For this workflow, Ingest & route is the most direct fit. For this workflow, Calls & webinars is the most direct fit. For implementation details, continue with Create NDI® outputs from video call participant’s feed and How to multi-stream from Zoom to Twitch, Youtube and Facebook.
Accepts an object with specified input parameters.
Depending on the input type, different parameters are passed:
1. When input is SRT Servers module from the Callaba Engine: For production ingest and monitoring, see continuous streaming. For playback integration and analytics, use video api. Recommended product path: Ingest & route, Player & embed, Calls & webinars. For this workflow, Player & embed is the most direct fit., and scaling guide. For implementation details, continue with Restreaming. input and Recording. input. For implementation details, continue with How to generate Test Videos to test your setups and How to transform UDP feed from a CCTV camera into RTMP [Part 1]. Before full production rollout, run a Test and QA pass with streaming quality check and video preview. For this workflow, Paywall & access is the most direct fit.
{ input_type: "INPUT_TYPE_SRT_SOFTWARE", input_server_id: Objectid, input_stream_id: "publisher/srt-server-name/srt-stream-01" }
Note:
Use INPUT_TYPE_SRT_HARDWARE, if you plan to get your stream from a hardware encoder. This will perform additional optimization
inside Callaba Engine. If your senders are mobile devices or computers, use INPUT_TYPE_SRT_SOFTWARE Pricing path: validate with bitrate calculator, self hosted streaming solution, and AWS Marketplace listing.
2. When input is RTMP Servers module from Callaba Engine:
{ input_type: "INPUT_TYPE_RTMP_SOFTWARE" input_server_id: Objectid, input_stream_id: "publisher/srt-server-name/srt-stream-01" }
In this case, you pass in the ID of your RTMP server and the key of the stream you want to convert.
Note
Use INPUT_TYPE_RTMP_HARDWARE, if you plan get your stream from a hardware encoder. This will perform additional optimization inside Callaba Engine. If your senders are mobile devices or computers, use INPUT_TYPE_RTMP_SOFTWARE
In this case, you are passing in the id of your SRT server and the publisher's id of the stream you want to convert.
3. When input is received via port listening, without using other modules.
Possible input_type values:
INPUT_TYPE_SRT_LISTEN: listen on SRT port
INPUT_TYPE_RTMP_LISTEN: listen on RTMP port
INPUT_TYPE_RTSP_LISTEN: listen on RSTP port
INPUT_TYPE_UDP_LISTEN: listen on UDP port
INPUT_TYPE_HTTP_LISTEN: - listen on HTTP port
Example of the SRT listen request on port 2035 :{ input_type: "INPUT_TYPE_SRT_URL" , input_stream_listen_port: { port: 2035, transport: "UDP" } }
For this type of input, you must explicitly specify the port you are listening and the type of transport you are using.
Optionally, you can also pass module_name and module_type for more flexible organization of your application.
For example, if you use the method for receiving all the inputs, you'd be able to see which of the processes you've made earlier occupies the server port.
This type of input accepts the following transport values :
For SRT, WEBRTC, RTP the transport value is UDP.
For all of the rest transport value is TCP.
4. When input is a URL, from where the stream is picked up for further conversion.
Possible input_type values:
INPUT_TYPE_SRT_URL: listen SRT address
INPUT_TYPE_RTMP_URL: listen RTMP address
INPUT_TYPE_RTSP_URL: listen RTSP address
INPUT_TYPE_UDP_URL: listen UDP address
INPUT_TYPE_HTTP_URL: listen HTTP address
INPUT_TYPE_OTHER: listen any address
INPUT_TYPE_HLS_URL: listen HLS address
INPUT_TYPE_MPEG_DASH_URL: listen MPEG-DASH address
For this type of input, specify the address where you want to receive video.{ input_type: "INPUT_TYPE_SRT_URL", input_stream_url : "srt://1.2.3.4:8000" }
Additionally, you can control the protocol by adjusting its parameters.
For example:
{ input_stream_url : "srt://1.2.3.4:8000?rcvbuf=12036704" }
Controlling parameters is available for all protocols.
5. When you don't have video but need a test stream of video and audio{ input_type: "INPUT_TYPE_GENERATE_TEST_VIDEO" }
It generates a default test stream (1920 by 1080, 24, 6000Kbit/s) with a duration of 1 hour and 216 Hz sine wave audio.
If necessary, you can control the settings of the test video by passing parameters to the input object:
Example:
{ input_type: "INPUT_TYPE_GENERATE_TEST_VIDEO", test_video_bitrate: 2500 }
Acceptable values are from 1 to 65535.
Since HLS or MPEG-DASH uses TCP as a transport, after creating a player on the specified port, the corresponding TCP port will be used. For playback integration and analytics, use video api. Recommended product path: Player & embed., and scaling guide. For this workflow, Ingest & route is the most direct fit. For this workflow, Calls & webinars is the most direct fit. For implementation details, continue with How to set up CloudFront on AWS and optimize data transfer and Create, edit, start and delete SRT Server or Gateway using Callaba Cloud.
To find out if a port is free, use the /api/ports/getAll method from the /api/ports section
This parameter specifies how many HLS fragments must be loaded before playing. For good HLS experience we recommend loading 3 fragments.
, and scaling guide. For this workflow, teams usually combine Ingest & route, Paywall & access, and 24/7 streaming channels. For implementation details, continue with Vimeo Pro and Playback. hls_fragment_length. For implementation details, continue with Common live streaming problems and how to solve them and Rtmp.
Edge of live delay. If set to 3, playback will start from fragment N-3, N being the last fragment of the live playlist. Decreasing this value is likely to cause playback stalls. For good HLS experience we recommend using 4 fragments For implementation details, continue with Vimeo Pro and Common live streaming problems and how to solve them.
, and scaling guide. For this workflow, teams usually combine Ingest & route, Paywall & access, and 24/7 streaming channels.
HLS fragment size. For good HLS experience we recommend using 3 seconds fragments.
Please make sure you have key frames at least every 2 seconds in your input video stream (or a close value) in your HLS fragment settings. For production ingest and monitoring, see continuous streaming. For playback integration and analytics, use video api. Recommended product path: Ingest & route, Player & embed. For this workflow, Player & embed is the most direct fit., and scaling guide. For implementation details, continue with Playback. dash_fragment_size and Players. transcoding. For implementation details, continue with Creating a Test App to manage Callaba Engine on AWS using a RESTful API and Low latency streaming that actually works protocols, configs, and pitfalls. Before full production rollout, run a Test and QA pass with Generate test videos and streaming quality check and video preview. For this workflow, Paywall & access is the most direct fit.
Use the transcoding to change GOP value if you cannot change this parameter in your input video stream
HLS fragments playlist length. For good HLS experience we recommend using 60 seconds.
, and scaling guide. For this workflow, teams usually combine Ingest & route, Paywall & access, and 24/7 streaming channels. For implementation details, continue with Playback. dash_fragment_length and Playback. live_sync_duration_count. For implementation details, continue with Video Hosting and Free Cdn.
DASH fragment size. For good DASH experience we recommend using 3 seconds fragments.
Please make sure you have key frames at least every 2 seconds in your input video stream or value near your DASH fragment settings. For production ingest and monitoring, see continuous streaming. For playback integration and analytics, use video api. Recommended product path: Ingest & route, Player & embed. For this workflow, Player & embed is the most direct fit., and scaling guide. For implementation details, continue with Playback. hls_fragment_size and Creating a Test App to manage Callaba Engine on AWS using a RESTful API. For implementation details, continue with Low latency streaming that actually works protocols, configs, and pitfalls and Create a Virtual Events Platform Setup CloudFront CDN for Live Events. Part I. Before full production rollout, run a Test and QA pass with Generate test videos and streaming quality check and video preview. For this workflow, Paywall & access is the most direct fit.
Use the transcoding to change GOP value if you cannot change this parameter in your input video stream
DASH fragments playlist length. For good DASH experience we recommend using 60 seconds.
, and scaling guide. For this workflow, teams usually combine Ingest & route, Paywall & access, and 24/7 streaming channels. For implementation details, continue with Playback. hls_fragment_length and Vimeo Pro. For implementation details, continue with Video Hosting and Free Cdn.
bitrate: 4000 }"}" data-sheets-userformat="{"2":769,"3":{"1":0},"11":4,"12":0}">Takes an object with transform settings:
Example:
{ video_transcoding: "libx265", output_video_bitrate: 4000 } Recommended product path: Ingest & route, Player & embed. For this workflow, Player & embed is the most direct fit., and scaling guide. For implementation details, continue with Restreaming. transcoding and Vimeo Pro.
Properties:
codec type. Possible values: ibx264 - convert to H.264 libx265 - convert to H.265"}" data-sheets-userformat="{"2":769,"3":{"1":0},"11":4,"12":0}" data-sheets-textstyleruns="{"1":0,"2":{"5":1}}{"1":17}">video_transcoding - controls output codec type. Possible values:
output_video_bitrate - controls output bitrate. The value is specified in kilobits.
force_key_frames - use this parameter if you need to cut your stream into smaller HLS fragments. For good the streaming experience we recommend inserting a key frame every 2 seconds For production ingest and monitoring, see continuous streaming. For playback integration and analytics, use video api.
gop - Set this to 2x frame rate for a 2 second GOP
Frame width - For example, 1920
Frame height - For example, 1080
preset - controls codec preset settings. Possible values: Disabled, ultrafast, superfast, very fast, faster, fast, medium, slow, slower, veryslow
tune - controls the fine tuning of the codec, possible values: Disabled, film, animation, grain, stillimage, fastdecode, zerolatency.
crf - sets the constant video quality to be controlled. Possible values are from 0 to 51 where 0 is lossless and 51 is the worst possible.
pix_fmt - video pixel format. Possible values: Disable, yuv420p, yuvj420p, yuv422p, yuvj422p, yuv444p, yuvj444p, nv12, nv16, nv21, yuv420p10le, yuv444p10le, nv20le
filter_fps - allows you to change the number of frames per second, through a filter
after transcoding and before output.
audio_trancoding - allows to convert audio. Possible values: aac, mp3
output_audio_bitrate - sets the output bitrate, in kilobits, for example 320
sample_rate - sets the resampling rate, in hertz. For example 44100. We recommend using AAC, because some browsers still don't work well with MP3s
Additional settings for the graphics accelerator card:
Controls the state of the process. Possible values are true or false. The default value is true.
, and scaling guide. For this workflow, teams usually combine Ingest & route, 24/7 streaming channels, and Paywall & access. For implementation details, continue with Recording. active and Restream. active. For implementation details, continue with Create a Virtual Events Platform Setup CloudFront CDN for Live Events. Part I and Restream Io.
curl -X 'POST' \'http://1.2.3.4/api/vod/create' \-H 'accept: application/json' \-H 'x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyMGJlYjA2MTM3YmIzMDAyYzhmNjAwYSIsImlhdCI6MTY0Njc0Njk4MiwiZXhwIjoxNjQ5MzM4OTgyfQ.qRphsD6OD8KYnRL5fUX8XEckp1XNCmZAYldWWnZbAxE' \-H 'Content-Type: application/json' \-d '{"vod_name": "Awesome RTSP player","input": {"input_type": "INPUT_TYPE_RTSP_URL","input_stream_url": "rtsp://127.0.0.1/live.sdp"},"vod_port": 10001,"initial_live_manifest_size": 4,"live_sync_duration_count": 4,"hls_fragment_size": 3,"hls_fragment_length": 60,"dash_fragment_size": 3,"dash_fragment_length": 60,"active": true}'
A unique identifier of the playback process. Is an object and looks similar to the hashed string. For implementation details, continue with Recording response Create. id and Players response getById object. For implementation details, continue with Free Cdn and How to organize live media production.
For this workflow, teams usually combine Player & embed, Video platform API, and Calls & webinars. For this workflow, 24/7 streaming channels is the most direct fit.
Returns the creation date of the playback process For implementation details, continue with Best Event Management Software and How and why should you set up subtitles and closed captions (CC)?.
, and scaling guide. For this workflow, teams usually combine Ingest & route, 24/7 streaming channels, and Player & embed. For this workflow, Calls & webinars is the most direct fit.
{"id": "622c93b366b14700326ff543","created": "2022-03-12T12:36:03.890Z"}
Use this method to change the player.
This method can take the same parameters as /api/vod/create method
id - identifier of the playback process to be changed. For implementation details, continue with Content protection and DRM safeguarding content from piracy and unauthorized access and Create a Virtual Events Platform Setup CloudFront CDN for Live Events. Part I.
curl -X 'POST' \'http://1.2.3.4/api/vod/update' \-H 'accept: application/json' \-H 'x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyMGJlYjA2MTM3YmIzMDAyYzhmNjAwYSIsImlhdCI6MTY0Njc0Njk4MiwiZXhwIjoxNjQ5MzM4OTgyfQ.qRphsD6OD8KYnRL5fUX8XEckp1XNCmZAYldWWnZbAxE' \-H 'Content-Type: application/json' \-d '{"id": "622c93b366b14700326ff543","vod_name": "Awesome RTSP player on 10002 port","input": {"input_type": "INPUT_TYPE_RTSP_URL","input_stream_url": "rtsp://1.2.3.4/live.sdp"},"vod_port": 10002,"initial_live_manifest_size": 4,"live_sync_duration_count": 4,"hls_fragment_size": 3,"hls_fragment_length": 60,"dash_fragment_size": 3,"dash_fragment_length": 60,"active": true}'
A unique identifier of the process
For implementation details, continue with Content protection and DRM safeguarding content from piracy and unauthorized access and Players response Create. id.
For implementation details, continue with Recording response update id and restream response update id. For this workflow, teams usually start with Ingest & route and combine it with Paywall & access. For implementation details, continue with Video Platforms and Common live streaming problems and how to solve them. For this workflow, 24/7 streaming channels is the most direct fit.
Returns the date the process was last modified
, and scaling guide. For this workflow, teams usually combine Ingest & route, 24/7 streaming channels, and Paywall & access. For implementation details, continue with Recording response updated and RTMP servers response server_updated. For implementation details, continue with Common live streaming problems and how to solve them and Create a Virtual Events Platform Setup CloudFront CDN for Live Events. Part I.
Success result. Possible value: true or false.
, and scaling guide. For this workflow, teams usually combine Ingest & route, 24/7 streaming channels, and Paywall & access. For implementation details, continue with Players remove success and Players response start success. For implementation details, continue with Players response stop success and Recording remove success. For implementation details, continue with Restream Io and Video Hosting.
{"success": true}
Use this method to get a list of the VoD/OTT players.
curl -X 'POST' \'http://1.2.3.4/api/vod/getAll' \-H 'accept: application/json' \-H 'x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyMGJlYjA2MTM3YmIzMDAyYzhmNjAwYSIsImlhdCI6MTY0Njc0Njk4MiwiZXhwIjoxNjQ5MzM4OTgyfQ.qRphsD6OD8KYnRL5fUX8XEckp1XNCmZAYldWWnZbAxE' \-d ''
Returns an array of the playback processes For implementation details, continue with Create, edit, start and delete SRT Server or Gateway using Callaba Cloud and Creating a Test App to manage Callaba Engine on AWS using a RESTful API. For this workflow, teams usually combine Video platform API, Ingest & route, and Player & embed. Before full production rollout, run a Test and QA pass with Generate test videos and streaming quality check and video preview.
[{"id": "622c93b366b14700326ff543","vod_name": "Awesome RTSP player on 10002 port","vod_port": 10002,"initial_live_manifest_size": 4,"live_sync_duration_count": 4,"hls_fragment_size": 3,"hls_fragment_length": 60,"dash_fragment_size": 3,"dash_fragment_length": 60,"active": true,"user_id": "620beb06137bb3002c8f600a","created": "2022-03-12T12:36:03.890Z","modified": "2022-03-12T13:18:50.212Z"}]
Use this method to get information about the player
id - identifier of the playback process For implementation details, continue with Content protection and DRM safeguarding content from piracy and unauthorized access and Players change id. For implementation details, continue with What is DRM and how it works in Live Video Streaming and Create a Virtual Events Platform Setup CloudFront CDN for Live Events. Part I. For this workflow, teams usually combine Player & embed, Paywall & access, and 24/7 streaming channels.
curl -X 'POST' \'http://1.2.3.4/api/vod/getById' \-H 'accept: application/json' \-H 'x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyMGJlYjA2MTM3YmIzMDAyYzhmNjAwYSIsImlhdCI6MTY0Njc0Njk4MiwiZXhwIjoxNjQ5MzM4OTgyfQ.qRphsD6OD8KYnRL5fUX8XEckp1XNCmZAYldWWnZbAxE' \-H 'Content-Type: application/json' \-d '{"id": "622c93b366b14700326ff543"}'
Returns an object of the playback process For implementation details, continue with Players response Create. id and recording response getById object. For implementation details, continue with Drm Protected and Free Cdn.
For this workflow, teams usually combine Player & embed, Video platform API, and Calls & webinars. For this workflow, 24/7 streaming channels is the most direct fit.
{"id": "62275f1bccaa650032da2b53","restream_name": "Awesome restream. Updated","restream_type": "RESTREAM_TYPE_SRT_TO_RTMP","active": true,"created": "2022-03-08T13:50:19.650Z","modified": "2022-03-08T15:14:25.355Z"}
Use this method to start the playback
curl -X 'POST' \'http://1.2.3.4/api/servers/start' \-H 'accept: application/json' \-H 'x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyMGJlYjA2MTM3YmIzMDAyYzhmNjAwYSIsImlhdCI6MTY0Njc0Njk4MiwiZXhwIjoxNjQ5MzM4OTgyfQ.qRphsD6OD8KYnRL5fUX8XEckp1XNCmZAYldWWnZbAxE' \-H 'Content-Type: application/json' \-d '{"id": "622c93b366b14700326ff543"}'
Success result. Possible value: true or false.
, and scaling guide. For this workflow, teams usually combine Ingest & route, 24/7 streaming channels, and Paywall & access. For implementation details, continue with Players remove success and Players response change success. For implementation details, continue with Players response stop success and Recording remove success. For implementation details, continue with Restream Io and Video Hosting.
{"success": true}
Use this method to stop the playback
curl -X 'POST' \'http://1.2.3.4/api/servers/stop' \-H 'accept: application/json' \-H 'x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyMGJlYjA2MTM3YmIzMDAyYzhmNjAwYSIsImlhdCI6MTY0Njc0Njk4MiwiZXhwIjoxNjQ5MzM4OTgyfQ.qRphsD6OD8KYnRL5fUX8XEckp1XNCmZAYldWWnZbAxE' \-H 'Content-Type: application/json' \-d '{"id": "622c93b366b14700326ff543"}'
Success result. Possible value: true or false.
, and scaling guide. For this workflow, teams usually combine Ingest & route, 24/7 streaming channels, and Paywall & access. For implementation details, continue with Players remove success and Players response change success. For implementation details, continue with Players response start success and Recording remove success. For implementation details, continue with Restream Io and Video Hosting.
{"success": true}
Use this method to get the statistics of the playback processes
curl -X 'POST' \'http://1.2.3.4/api/vod/getStat' \-H 'accept: application/json' \-H 'x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyMGJlYjA2MTM3YmIzMDAyYzhmNjAwYSIsImlhdCI6MTY0Njc0Njk4MiwiZXhwIjoxNjQ5MzM4OTgyfQ.qRphsD6OD8KYnRL5fUX8XEckp1XNCmZAYldWWnZbAxE' \-H 'Content-Type: application/json' \-d ''
Current bitrate (kilobits)
For this workflow, teams usually combine Video platform API, Calls & webinars, and Player & embed. For this workflow, 24/7 streaming channels is the most direct fit. For implementation details, continue with Recording response getStat bitrate and restream response getStat bitrate. For this workflow, Ingest & route is the most direct fit. For implementation details, continue with Video Stream and What Is Obs.
[{id: ObjectId,bitrate: 6500}]
Use this method to remove the player.
curl -X 'DELETE' \'http://1.2.3.4/api/vod/remove' \-H 'accept: application/json' \-H 'x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyMGJlYjA2MTM3YmIzMDAyYzhmNjAwYSIsImlhdCI6MTY0Njc0Njk4MiwiZXhwIjoxNjQ5MzM4OTgyfQ.qRphsD6OD8KYnRL5fUX8XEckp1XNCmZAYldWWnZbAxE' \-H 'Content-Type: application/json' \-d '{"id": "62275f1bccaa650032da2b53"}'
Success result. Possible value: true or false.
, and scaling guide. For this workflow, teams usually combine Ingest & route, 24/7 streaming channels, and Paywall & access. For implementation details, continue with Players response change success and Players response start success. For implementation details, continue with Players response stop success and Recording remove success. For implementation details, continue with Recording response change success and Recording response removeFile success. For implementation details, continue with Restream Io and Video Hosting.
{"success": true}