We are very happy to announce that Ant Media Server v2.1 is released with some more great new features such as HEVC(H.265) support in WebRTC stack and WebM Recording. Previously In Ant Media Server v2.0, VP8 and Data Channel features were released. We are continuously adding new features and doing performance optimizations. Before starting the post, let me thank you for your all interest in the Ant Media Server because you’ve made it run in more than 120 countries. After a brief introduction, let’s start the post.

I think the most important feature in this release is the HEVC (H.265) support in WebRTC stack because it shows that what Ant Media can do beyond the limits in the industry. Of course, there are many more features and improvements such as WebM recording, Unified Plan or PlanB,  forcing quality in WebRTC playback, etc. Let me give the highlights for v2.1 and then you can also take a look the whole changelog for sure.

HEVC(H.265) Support in WebRTC Stack

I think the main question is why it’s important to add HEVC aka. H265 support in WebRTC stack. The answer is clear: Providing better quality with the same bitrate.

Ant Media Server HEVC Support in WebRTC

Let me tell you what we’ve done in Ant Media Server side. We originally use the WebRTC stack implemented by Google and we’ve made it scalable to work on the server-side. The recent changes is adding packetization and depacketization of HEVC frames in RTP protocol according to the RFC 7789 and adapting these changes to the WebRTC stack.   We’ve also adapted these changes to the Android WebRTC SDK because most of the android devices have H.265 decoder to play the H.265 encoded WebRTC Stream.  Before proceeding how to test HEVC, let us tell that HEVC support is an experimental feature for now.

How to Play HEVC WebRTC Stream in Ant Media Server

Most of the devices(mobile or desktop) do not have H.265 Encoder to be able to use in WebRTC stack. Luckily, Android devices have an H.265 decoder to play H.265 encoded streams. So it works as follows:

  1. Enable H.265 in Ant Media Server
  2. Send RTMP stream to Ant Media Server
  3. Play H.265 WebRTC stream in Android Device

1. Enable H.265 in Ant Media Server

By default H.265 support is disabled in Ant Media Server so we need to enable it first. After you install the Ant Media Server,

  • Open the following file
    /usr/local/antmedia/webapps/WebRTCAppEE/WEB-INF/red5-web.properties
  • Enable H265 by adding below property to the file above
    settings.h265Enabled=true

    I think we should also point out that Ant Media Server uses libx265 for soft encoding and it also supports hevc_nvenc for hard encoding.

  • Then make the following changes in the file as follows
    settings.vp8Enabled=false
    settings.h264Enabled=false
    settings.encoderSettingsString=360,800000,64000
  • Save the file and restart the Ant Media Server
    sudo service antmedia restart

2. Send RTMP stream to Ant Media Server

You can send RTMP stream to Ant Media Server with OBS as documented here. Just send a stream with height 360p or over.

3. Play H.265 WebRTC stream in Android Device

With the new Android SDK, you don’t need to do anything. Just add your server address to the MainActivity and change the mode to Play and open the Activity. It’ll play the H.265 Encoded WebRTC on your Android Device. You can even check the incoming and outgoing SDPs to see the HEVC parameters there.

Good news for Android and IOS SDKs

We’ve decided to provide Android and iOS SDK’s for free. It’ll be available to download on antmedia.io later this week.

WebM Recording

In this release, we’re also happy to announce WebM Recording. You can configure WebM recording the same way you do for MP4 recording.  Let me tell you what I mean.

  • There is a WebM recording option available in the web panel as an application-wide settings.WebM Recording dashboard
  • You can also start and stop recording on the fly via REST Method.The First HEVC (H.265) Support in WebRTC and Improved Performance in v2.1 1One thing is critical to point out. recordType parameter is optional and its default value is mp4. Lastly, this method may return false if VP8 is not enabled and WebM recording is requested.

Improved Performance and Stability

We constantly improve performance and stability. With this release, there are less threads in both Java and Native side. It means there are less context switching in the same name number of publishers and viewers according to the previous version. We’ve also optimized the WebRTC Stack  to make it consume less resources.

The First HEVC (H.265) Support in WebRTC and Improved Performance in v2.1 2

Second improvement is about stability. We’ve improved our devops pipeline for cluster tests. So we’re having more integration test cases for both standalone and cluster modes. Moreover, we’ve also increased our quality gate for test coverage from %70 to %80.

 

The First HEVC (H.265) Support in WebRTC and Improved Performance in v2.1 3

Force WebRTC Playback Quality in Adaptive Bitrate

Here is the another feature that we’ve got so many requests about that. Let me explain it. When there are multi-bitrates in the server side, Ant Media Server measures the viewers internet speed and sends the best quality according to the internet speed of the viewer.  For instance,

  • Assume that there are two bitrates on the server
    • First one is 360p and 800kbps
    • Second one is 480p and 1500kbps.
  • if Viewer internet speed
    • is above 1500kbps, then the resolution with 480p is sent.
    • is between 800kbps and 1500kbps or less than 800kbps, then the resolution with 360p is sent.

This is done automatically on the server-side. However, some users want to force the resolution and don’t want to the server to make it automatically.  So we’ve defined a new message in WebSocket communication and implement it on server-side and JS SDK side. It’s forceStreamQuality  which is having two parameters streamId and streamHeight.  You can get the streamHeights information by getStreamInfo message. Let me explain how.

The First HEVC (H.265) Support in WebRTC and Improved Performance in v2.1 4

Assume that you are playing a WebRTC stream that has some adaptive bitrates on the server side. It means that you’ve created WebRTCAdaptor and call getStreamInfo after you receive play_started message.

webRTCAdaptor.getStreamInfo("{your_stream_Id}");

The method above will trigger the streamInformation callback and you can parse it with the same way in this file. Then the only thing is calling forceStreamQuality as follows.

webRTCAdaptor.forceStreamQuality("{your_stream_Id}",  {the_resolution_to_be_forced});

We’ll provide this to be very easy to use in the embedded player as a built-in feature in the next release.

To sum up,  these are the highlights of v2.1. You can check whole release notes here.Thank you again for your interest in Ant Media Server and we have some more exciting things on their way. Stay tuned and keep in touch.