Video stream transcoding will be enabled automatically in one of the following cases:
1. Streamer and player codecs do not match by name.
For example, streamer publishes H.264 stream and player tries to play VP8.
2. H.264 codecs are differ by packetization-mode parameter
For example, streamer publishes stream with packetization-mode=1 (default value) and player explicitly sets packetization-mode=0. The situation is quite rare, because almost all players support packetization-mode=1
3. Player resolution is explicitly set.
Example:
session.createStream({name:"stream1", constraints:{audio:true, video:{width:640,height:480}}}).play(); |
If the player explicitly sets the resolution desired, transcoding will be enabled even when the player resolution exactly matches the publisher one. This is done because WebRTC browser can change video resolution while publishing stream. To adapt the stream to the resolution that is specified by player, the stream should be transcoded.
4. Player bitrate is explicitly set.
Example
session.createStream({name:"stream1", constraints:{audio:true, video:{bitrate:300}}}).play(); |
In this case transcoder will be enabled to encode the stream to the bitrate specified.
Besides, transcoding can be forcibly enabled on server using this parameter in flashphoner.properties file
disable_streaming_proxy=true |
Transcoding dramatically increases the server resources consumption (CPU cores). Therefore, use it carefully! |
Transcoding may be fully disabled on server using this parameter in flashphoner.properties file
transcoding_disabled=true |
If trascoding is forcefully disabled, in all four cases described above the TRANSCODING_REQUIRED_BUT_DISABLED error will be returned to client.
Transcoding disabling does not affects stream mixer, transcoding will be enabled automatically when mixer is used.
REST query should be HTTP/HTTPS POST request as:
Where:
REST query | Request example | Response example | Response states | Description | ||
---|---|---|---|---|---|---|
/transcoder/startup |
| 409 - Conflict 500 - Internal error | Create transcoder with defined parameters for certain stream | |||
/transcoder/find |
|
| 200 – Transcoders found 404 – Transcoders not found | Find the transcoder by certain criteria | ||
/transcoder/find_all |
| 200 – Transcoders found 404 – Transcoders not found | Find all transcoders | |||
/transcoder/terminate |
| 200 - Transcoders is terminated 404 - Transcoder not found | Stop transcoder and its output stream |
Name | Description | Example |
---|---|---|
uri | Transcoder URL | transcoder://tcode1 |
localStreamName | Transcoder output stream name | testT |
remoteStreamName | Stream name to transcode | test |
localMediaSessionId | Transcoder media session Id | 42a92132-bcd1-4436-a96f-3fec36b32b37 |
status | Transcoder state | PROCESSED_LOCAL |
hasAudio | Output stream has audio | true |
hasVideo | Output stream has video | true |
record | Output stream is recorded | false |
Параметры кодирования | ||
width | Picture width | 640 |
height | Picture height | 480 |
keyFrameInterval | Key frame generation interval (GOP) | 30 |
fps | Frames per second | 30 |
bitrate | Bitrate, in kbps | 500 |
type | Codec | OPENH264 |
1. For test we use
2. Open Two Way Streaming application and publish stream named test
3. Open REST client and send REST query /transcoder/startup
4. Open Player application, set testT to Stream field and click Start
5. Open REST client adn send REST query /transcoder/terminate
6. Playback will be stopped due to transcoder stop