Red5 Pro Release 6.0 – 200 Milliseconds of Latency!

SHARE

New Year, new release. We are very excited to introduce Red5 Pro version 6.0! With updates to the server, HTML5 SDK, and both iOS and Android SDKs this was a big one. It’s a great way to start off the year. Version 6.0 introduces even lower latency of 200 milliseconds over our WebRTC delivery, DigitalOcean… Continue reading Red5 Pro Release 6.0 – 200 Milliseconds of Latency!


New Year, new release. We are very excited to introduce Red5 Pro version 6.0! With updates to the server, HTML5 SDK, and both iOS and Android SDKs this was a big one. It’s a great way to start off the year.

Version 6.0 introduces even lower latency of 200 milliseconds over our WebRTC delivery, DigitalOcean autoscaling support, ABR support for native mobile apps and more friendly UI for mobile browsers.

Even though further dropping our latency is quite an achievement in and of itself, we are quite indebted to our team for all the hard work they continue to put into the Red5 Pro software, adding new features and further optimizations. Read below for even more improvements.

Red5 Pro Server

Release 6.0.0 – January 31st, 2020

  • Improved sub-second latency over WebRTC (testing showed as low as 200 ms)
  • New – BETA – Added support for ABR over mobile SDK. Note: requires minimum SDK version 6.0.0 and Growth Pro for Transcoding via autoscaling
  • New – Added support for decoupled shared objects via mobile SDK Note: requires minimum SDK version 6.0.0
  • New – Mobile-friendly UI with server distribution
  • New – For a standalone server, the cluster plugin can be disabled by modifying the cluster.xml file – see enabling or disabling clustering for details.
  • New – Autoscaling support added for Digital Ocean (using Terraform). Documentation here
  • New – Cloudstorage support for Digital Ocean Spaces
  • Updated – For better performance, VP8 is disabled by default. To enable VP8, modify {red5pro}/conf/webrtc-plugin.properties, changing rtc.video.codecs=H264_PMODE1 to rtc.video.codecs=H264_PMODE1,VP8 (server needs to be restarted after making this change)
  • Fixed – Memory leaks with WebRTC publishing and subscribing
  • Fixed – Autoscaling – issues in scaling relay and transcoder nodes
  • Fixed – Autoscaling – issues in nodegroups with multiple transcoders
  • Fixed – Autoscaling – multiple nodegroups not being utilized correctly
  • Fixed – Autoscaling – Fix transcoder issues with rtc publishers and nacks
  • Fixed – Autoscaling – Stream Manager may throw out of memory error if it receives too many “bad cookies”
  • Fixed – Added handling for nalu type 12, h264 padded packets, being sent from some RTMP hardware encoders
  • Fixed – Some iOS devices not able to broadcast higher than 720p with WebRTC
  • Fixed – Recordings via iOS SDK started from landscape right front camera and swapped to back camera were dropping the landscape right front portion of the recording in MP4 post-processing
  • Fixed – Duplicate Messages occasionally displayed in Shared Objects examples
  • Fixed – Problems with Multiple Cameras and Safari (Mac and iOS)
  • Fixed – Safari and Firefox do not show resolution in our stats display


Release 6.0.0 Server Performance Metrics

Tests were run against an AWS c5.large instance (2 CPUs with 4GB memory, 2GB allocated to java_heap). We used our RTMP Bee, RTSP Bee, and RTC Bee clients to do load testing. Note – connections are added over the course of several minutes.

SUBSCRIBER TESTS

Publishing a 240p (426×240, 200 kbps) stream via RTMP, we were able to achieve the following while still maintaining quality of stream:

  • 500 WebRTC subscribers
  • 2,000 RTSP (mobile SDK) subscribers
  • 1,200 RTMP subscribers

Publishing a 480p (854×480, 500kbps) stream via RTMP, we were able to achieve the following while still maintaining quality of stream:

  • 500 WebRTC subscribers
  • 1,200 RTSP subscribers
  • 800 RTMP subscribers

Publishing a 720p (1280×720 1,500kbps) stream via RTMP, we were able to achieve the following while still maintaining quality of stream:

  • 220 WebRTC subscribers
  • 880 RTSP subscribers
  • 600 RTMP subscribers

Publishing a 1080p (1920×1080 4,500kbps) stream via RTMP, we were able to achieve the following while still maintaining quality of stream:

  • 130 WebRTC subscribers
  • 920 RTSP subscribers
  • 300 RTMP subscribers

PUBLISHER TESTS

The same server type (2 CPUs with 4GB memory, 2GB allocated to java_heap) can support approximately 30-40 240p RTC publishers (tested using the RTCBee Publisher test) OR 50-60 240p RTMP publishers (tested using the RTMP Bee Publisher test).

The same server type (2 CPUs with 4GB memory, 2GB allocated to java_heap) can support approximately 29 720p RTC publishers (tested using the RTCBee Publisher test) OR 50 720p RTMP publishers (tested using the RTMP Bee Publisher test).


SDK

Release 6.0.0 – January 31st, 2020

iOS SDK

  • New – Option to use Hardware Acceleration for subscribing, to support 4K and 360° Streams
  • New – Decoupled Shared Objects: Mobile (Note requires server min version 6.0.0)
  • New – ABR subscriber support via autoscaling transcoding (Note requires server min version 6.0.0) and Growth Pro for Transcoding via autoscaling
  • API Additions:
  • R5Stream: play:streamName useHardwareAcceleration:flag
  • R5Stream: play:streamName withForcedRGBDecode:flag
  • R5Stream: (CVPixelBuffer)getStreamPixelBuffer
  • R5VideoViewController: setRenderer:R5VideoViewRenderer
  • R5VideoViewController: getRenderer()
  • R5VideoViewRenderer (new class)
  • API changes:
  • R5 Stream: play:streamName
  • R5 Stream: setFrameListener:(void (^)(void *, enum r5_stream_format, int, int, int))listenerBlock
  • R5Stream: (UIImage*)getStreamImage
  • R5Stream: (uint8_t*)getStreamImageBytes
  • Fixed – iOS Testbed – Publish Stream Manager example, crashes if stream name is already in use
  • Fixed – iOS SDK duplicate symbols in binary – Obj-C Examples

streaming-ios updates:

  • Added HW Accel toggle option to turn on hardware acceleration decode for all subscriber tests
  • New Test: Subscribe – 360° Camera
  • New Test: Subscribe – Hardware Acceleration
  • New Test: Subscribe – Renderer RGB
  • New Test: Subscribe – Renderer Toggle
  • New Test: Publish – Stream Manager Transcoder
  • New Test: Subscribe – Stream Manager Transcoder
  • New Test: Shared Object – Streamless
  • New Test: Publish – Camera Swap & Orientation


Android SDK

  • New – Option to use Hardware Acceleration for subscribing, to support 4K and 360° streams
  • New – Decoupling Shared Objects: Mobile (Note requires server min version 6.0.0)
  • New – ABR subscriber support via autoscaling transcoding (Note requires server min version 6.0.0) and Growth Pro for Transcoding via autoscaling

API Additions:

  • R5Stream: play:streamName useHardwareAcceleration:flag
  • R5Stream: play:streamName withForcedRGBDecode:flag
  • R5VideoView: setRenderer(R5VideoViewRenderer)
  • R5VideoView: getRenderer()
  • R5VideoViewRenderer (new class)

API Changes:

  • JNI: on_draw_frame
  • JNI: getHWAccelBytes
  • R5Stream: play:streamName

streaming-android updates:

  • New Test: Subscribe – Hardware Acceleration
  • New Test: Subscribe – Renderer RGB
  • New Test: Publish – Stream Manager Transcoder
  • New Test: Subscribe – Stream Manager Transcoder
  • New Test: Shared Object – Streamless
  • New Test: Publish – Camera Swap & Orientation


HTML5 SDK

  • Fixed – HTML5 Testbed – Publish – Stream Manager Proxy Settings (RTC) not sending specified Bitrate
  • Fixed – Safari and Firefox do not show resolution in our stats display

To get the latest release, please login to your account and download the new build.
To upgrade your server, follow this link.
To upgrade your stream manager, follow this link.
For test applications, visit our Github page.