New CDN 2.1 implementation includes additional features comparing with CDN 2.0:
Servers in a CDN can be grouped together by geographical (location), technical (GPU using for transcoding) and anoter basis. CDN group can be assigned to the server with the following parameter in flashphoner.properties file
cdn_groups=group1 |
The same server can belong to several groups. For example, server located in Europe and used for transcoding on GPU:
cdn_groups=EU,GPU |
CDN groups are used to choose a route for stream playback.
All the servers not assigned to any group are considered to belong to the same group.
In order not to load the servers used for publishing and watching videos in a CDN with transcoding tasks, it is advisable to allocate server with increased computing perfomance for these tasks. For such nodes, in addition to Origin and Edge roles, Transcoder role is added.
cdn_role=transcoder |
Transcoder node cannot be used to publish or play streams. This node interacts with Origin and Edge as follows:
1. Stream is published to Origin server
2. Transcoder pulls the stream from Origin server by Edge server request.
3. Transcoder performs stream transcoding by transcoding profile set by Edge server.
4. Edge server pulls the transcoded stream from Transcoder server to play it to subscriber.
The specific node for transcoding is selected when choosing a route for stream playback
To set up transcoding parameters, special profiles are used on Edge server. Transcoding profiles file cdn_profiles.yml
should be placed in /usr/local/FlashphonerWebCallServer/conf
folder:
profiles: -webrtc-144: audio: type : AudioStreamProfile codec : opus rate : 48000 channels : 2 #this part forces transcoding video: type : VideoStreamProfile width : 256 height : 144 codecImpl : OPENH264 |
When stream playback is requested, transcoding profile name shoould be added to stream name to transcode this stream, for example
test-webrtc-144 |
It is recommended to set hyphenated profile names for convinuence.
Parameter | Values available | Description |
---|---|---|
Audio parameters | ||
type | AudioStreamProfile | Profile type |
codec | opus mpeg4-generic speex | Audio codec used |
rate | 8000 11025 12000 16000 22050 24000 32000 44100 48000 | Audio sample rate, kHz |
channels | 1 2 | Channels quantity: mono or stereo |
Параметры видео | ||
type | VideoStreamProfile | Profile type |
width | Depends on quality required and bandwith available | Picture width |
height | Depends on quality required and bandwith available | Picture height |
codeImpl | FF OPENH264 | Video codec used: based on FFmpeg or OpenH.264 |
gop | Depends on quality required and bandwith available | Key frames frequency (GOP) |
fps | Depends on quality required and bandwith available | Frames frequency per second |
Stream will be transcoded on Edge under the following conditions:
1. If server video codec priority is higher than profile video codec priority. For example, if the following profile is used
-opus-vp8: audio: type : AudioStreamProfile codec : opus rate : 48000 channels : 2 video: type : VideoStreamProfile width : 320 height : 240 gop : 60 fps : 30 codec : vp8 codecImpl : FF |
and the following codec priority is set in server properties
codecs=opus,...,h264,vp8,flv,mpv |
then VP8 stream will be transcoded to H264 because this codec has a higher priority.
2. If there is no audio codec or sample rate from profile in subscribers' SDP, audio track will be transcoded to one of formats supported by subscriber.
CDN routes are based on the following periodic data sendings between CDN nodes:
A route for stream playback on Edge server is chosen as follows:
1. If transcoding profile is set on Edge server:
1.1. If there is the stream with such name on Transcoder node in the same group with Edge:
1.1.1. If the strea, is already transcoded by this profile, Edge pulls the stream from Transcoder
1.1.2. If the stream is transcoded by another profile:
1.1.2.1. Stream will be transcoded by profile set
1.1.2.2. Edge will pull the stream from Transcoder
1.2. If Transcoder that belongs to the same group with Edge can pull the stream with such name from Origin:
1.2.1. Transcoder will pull the stream from Origin
1.2.2. The stream will be transcoded by the profile set.
1.2.3. Edge will pull the stteam from Transcoder
1.3. In other cases, Edge pulls the strea, from Origin
2. If transcoding profile is not set on Edge server, Edge pulls the stream Origin
Where
To get an information about CDN stream routes REST API query /cdn/stream/show_routes is used
REST query should be HTTP/HTTPS POST request as follows:
Where:
REST query | REST query body example | REST response example | Response states | Description | ||
---|---|---|---|---|---|---|
/cdn/stream/show_routes |
|
| 200 – OK 500 – Internal Server Error | Show CDN stream routes |
Description | Example |
---|---|
Stream name (including transcoding profile if necessary) | test-webrtc-144 |
Transcoder stream parameters | |
Transcoding profiles used by Transcoder parameters | 1-PROFILE-192.168.1.220 |
Stream pulled from Origin by Transcoder parameters | 2-STREAM-192.168.1.220 |
Audio parameters | AudioStreamProfile{bitrate=0, codec='opus', rate=48000, channels=2} |
Video parameters (according to transcoding profiles used) | VideoStreamProfile{width=320, height=180, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='FF', quality=null} |
Stream parameters that Transcoder can pull from Origin | 3-NEW-TRANSCODER-192.168.1.220 |
Origin stream parameters | |
Stream published to Origin parameters | 4-PROXY-192.168.1.219 |
Audio parameters | AudioStreamProfile{bitrate=0, codec='opus', rate=48000, channels=2} |
Video parameters | VideoStreamProfile{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='', quality=null} |