New Red5 Pro Release With Rebuffering!

January 20th, 2016 by Chris Allen

We wanted to let you know that we have just released some big updates to the Red5 Pro Server and Streaming SDKs!

I’ve included the release notes, the Server and SDK downloads, and the link to our Github repos with the updated examples and sample apps.

We hope this will help overcome some of the issues you were seeing, and we are here if you have any questions!



Release Notes:

Server 0.3.0 (Server)

Re-buffering streams – allows for graceful degradation of streams for client connections that have too low of bandwidth to support the publisher’s stream quality

  – Provide messaging to the clients about the state of the stream

  – Frame dropping for congested streams

General stabilizing of the server and performance gains including new threading model

HLS stream improvements

Metadeta – stream events now reported for HLS streams over WebSockets


iOS Streaming SDK (SDKs)

Re-buffering -

  – drops extremely late packets.

  – resets stream if it becomes too latent

  – notification API from server on connection state

  – supports audio only in the case that the video bandwidth is too high

  – stream play back speed is adjusted automatically to keep it in realtime

Ability to capture a UIImage from stream upon request

Bug fix for A9 based chipset encoding (iPhone 6S, iPad Pro, etc. )

Memory leaks fixed

Scaling mode – ability to scale video stream view in multiple modes:

  – Scale to fit, Crop to fit, or Stretch to fit

PixelBuffer support – ability to support custom video sources other than the device’s Camera (bringing this feature in sync with Android)


Android Streaming SDK (SDKs)


  – drops extremely late packets.

  – resets stream if it becomes too latent

  – notification API from server on connection state

  – supports audio only in the case that the video bandwidth is too high

Ability to capture a Bitmap from stream upon request

Memory Leaks fixed

Scaling mode – ability to scale video stream view in multiple modes:

  – Scale to fit, Crop to fit, or Stretch to fit

Bug fix to set Microphone to 32 kbps by default and added ability to set custom bitrate on Microphone.


Why We Built Red5 Pro: An End-To-End Solution

January 7th, 2016 by Chris Allen


Reflecting on 2015 and what we’ve built over the last couple of years, I started thinking about Red5 Pro and the reasons why we built it in the first place. So I figured I should write a post.

Why did we spend so much time and energy building this thing? Not only did we see that there was a trend of people wanting to make new mobile experiences based on live streaming like Periscope and Meerkat, but we also weren’t happy with the developer tools available to build these kinds of experiences. We saw two approaches towards creating live streaming tools for developers, and we didn’t like what we saw with either approach. First, we have media servers doing a poor job of supporting mobile, and… well, anything but Adobe Flash. Then second, we saw platform as a service companies providing good, but very limited tools.

Media Servers

One thing is increasingly clear–traditional media servers by themselves aren’t sufficient for building a live streaming app today. Why? Because all of them focus on the server side, and they rely on others to do the client. It’s not a full stack solution, and when you don’t control both the client and server endpoints, things can get messy rather quickly.

So, what is the origin of this issue? It’s because the servers, when they were originally designed, were relying on Flash as the client. This makes sense, because at the time Flash was the only viable client for streaming. Now of course, the world has shifted to other platforms. iOS, Android, and even modern browsers on the desktop don’t properly support Flash; the direction is towards native apps or WebRTC.

Before we came out with Red5 Pro, if you wanted to build your own mobile streaming app you would need to find a useable SDK for iOS and for Android. You would then need to install something like Wowza on the server and stream to that with your 3rd party SDK. What we found is that many of the open source SDKs weren’t well supported, and the paid ones just didn’t work that well. The flaws were obvious: they lacked flexibility and extensibility, and they all relied on RTMP, an older Flash based protocol. We decided this just wasn’t acceptable.

Hosted PaaS

The other trend we saw happening for live streaming solutions was the advent of hosted PaaS (Platform as a Service) products. Companies like LiveStream and TokBox are a few of the best ones in this category. What we found is that these solutions don’t provide enough control for the developer. Companies like TokBox have done a good job providing easy-to-use SDKs and make it super simple to setup since you don’t need to install the server–but this comes with a price.

Lack of control is a big one.

You have to rely on what the platform gives you. Either you are forced to include advertising in your streams, or you can’t easily modify portions of the SDK to grab a video source other than the device’s camera. Maybe it’s latency you are having trouble with like with Kickflip, or it could be a whole number of things that you want to do with your app that the provider’s SDK won’t allow you to do.

The PaaS solutions are also harder to scale and will cost more if you do achieve massive scale. The primary issue here is that you are basically locked into them handling the server for you. There is simply no way to host it where you want it. You can’t modify the server program easily to do things like live transcoding, moving recorded files to S3 buckets, integrating third party software like FFMPEG, etc. To make it worse, some companies can’t use cloud solutions and need to be deployed on networks that they control. Do you think your bank is going to allow video calls about proprietary financial information to flow through a 3rd party that they don’t control? How about medical software? I don’t think so–good luck getting around HIPAA.

Another thing to consider is that the major cloud hosting platforms offer credits to startups, and it would make sense to be able to easily move between platforms to take advantage of these deals (think of it like how consumers switch cable providers to get better deals). We designed Red5 Pro to be hosting agnostic so that where you host your solution is up to you.

Our Solution

We think we’ve taken the right approach by building the whole stack and providing super flexible SDKs for mobile (JavaScript WebRTC SDK coming soon!), Plus we give the power of where the server is hosted to you the developer. We are always looking for ways to improve, and if there’s something you are looking for, and we don’t currently do it, please let us know.

How-To: Converting Recorded Files to MP4 for Seamless Playback via Red5 Pro

December 18th, 2015 by Chris Allen

A lot of developers have been asking us detailed questions about recording streams using Red5 Pro. The one thing that comes up most frequently is how to create an MP4 file for easy playback on mobile devices. While you can use our SDK to playback the recorded file as is (Red5 records in FLV format), this requires that the user always use your native app, and sometimes it would just be nice to provide a link to an MP4 for progressive download.

So with that, here’s a quick guide to get you up and running with a custom Red5 application that converts recorded files to MP4 for easy playback. You can find the source for this example on GitHub.

Install ffmpeg

The first step is to install ffmpeg on your server. ffmpeg is a great command line utility to manipulate video files, such as converting between formats like we want to do for this example.

You can find precompiled packages for your platform from ffmpeg’s website, although if you need to convert your recordings to formats that need an extra module on top of ffmpeg, you might need to compile those from scratch. Once you have ffmpeg on your server, just issue a simple command to make sure it’s working. The simplest thing you could do is just called ffmpeg with no params like this: ./ffmpeg . That should output something like this:


If you see it output the version number and other info, it means you have a working version installed on your machine. Note that I’m running on my local Mac, but the same concept applies to putting it on any other OS. Also note, for production use, you would want to put the binary in a better place than ~/Downloads , and you would want to update your PATH  to point to the ffmpeg application from anywhere.


Start Your Own Red5 Application

Now that you have ffmpeg on your server, the next step is to build your own custom server side application for Red5, extending the live example here. You will use this as the beginning of your custom app that will convert your recorded files to MP4.


Overwrite MultithreadedApplicationAdapter.streamBroadcastClose()

Now on to calling ffmpeg from your custom Red5 Application.

In your MultiThreadedApplicationAdapter  class you will now need to override the streamBroadcastClose()  method. As is pretty obvious from the name, this method is called automatically by Red5 Pro once a stream broadcast has finished and closed. Even though the Broadcast is finished, it doesn’t mean that the file has finished being written. So, in order to handle that, we need to create a thread to wait and allow the file writer to finish the flv write-out. Then, we access the file and convert it to an MP4 using ffmpeg.


Let’s see what that looks like in code:

1. Overwrite the method.


2. Check to make sure there is a file that was recorded.


3. Setup some variables to hold the data about the recorded file.


4. Create a thread to wait for the FLV file to be written. Five seconds should be plenty of time.


5. Next we need to get a reference to the FLV file.


6. Make sure that there is a file before continuing.

7.  Get the path to the file on the file system and the path to where you want the MP4 version saved.


8. Delete any previous file created, otherwise FFMPEG  will fail to write the file.


9. Tell your application where to find FFMPEG . Note in this case we’ve added the app to our PATH so we can call it from anywhere.

10. Create the FFMPEG  command.


11. Run the process.


12. Read the output from FFMPEG  for errors and other info.


13. Create threads for each of these and wait for the process to finish.


14. Make sure that the process created the file and that it didn’t log any errors.


15. Finally catch any potential exceptions and close out the thread you created.


That’s it! You’ve now created an MP4 file from the recording. Rather than typing that out line by line we’ve provided the example project here:

Now that you know how to intercept one of the methods of the MultiThreadedApplicationAdapter  in Red5 Pro you can start to look at other ones you could implement to do custom behavior for your app. Many people who are recording their files want to move them to an Amazon S3 bucket for storage. Adding in a few lines using Amazon’s API to do that wouldn’t be too challenging.

What other things would you want to do with a custom Red5 application? We would love to hear from you.



New Red5 Pro Server 0.2 Release Featuring Clustering and HLS

December 11th, 2015 by Jamie Maynard


We have been working hard on a number of features that we are super excited about including clustering and HLS support. You can get the new release here. Make sure to be signed in with your account first. Also, expect new SDKs to follow soon as well. Cheers!


This release has two new features our customers have been requesting.

This version of the server allows for configuring servers together to achieve infinite scale. This is the first version of the feature, and is limited to round robin style load balancing of Edge servers to an Origin server. There are many configurations possible with this setup including support for multiple origins, and Edges being able to connect across Origins. If there’s a setup you are looking for but our solution doesn’t seem to support it, please let us know.

In addition to clustering, the new server now supports HLS. Where as before you had to install the open source Red5 HLS plugin, Red5 Pro now comes with the feature out of the box. With the feature we also have created an HTML5 example using Video.js that connects to our server via HLS.

Let us know if you have any questions. We look forward to seeing what you do with this!

Video Tutorial–How to Create an iOS Streaming Example in Minutes

December 9th, 2015 by Jamie Maynard

Interested in getting up and running with our client-side SDKs?

Our CTO Dominick Accattato just finished a great video tutorial on how to set up iOS streaming with the Red5 Pro server in six easy steps, all within a matter of minutes. In this example Dominick demonstrates how to stream from iOS to the web and then from the web back down to iOS.


Was this video useful? We’d love to hear your feedback on how we can continue to enhance our user support!

Do You Actually Need WebRTC?

December 3rd, 2015 by Chris Allen


Don’t take this the wrong way; while we are thrilled about WebRTC and its potential to open up live streaming and communication within browsers, we want to pose the following question: do you actually need WebRTC for your use case? After much analysis, what we’ve found based on talking to our customers is that the answer nine times out of ten is no.

Adobe Flash
I know what you are thinking. Flash is dead: it’s a memory hog, it has terrible security flaws, and it’s an antiquated relic that should be banished from every browser on the planet. Yes, yes, much of this is undoubtedly true. Regardless of its obvious weaknesses, Flash is still a strong solution, and it can do the job that WebRTC does pretty much universally on desktops and laptops today. We originally built Red5 to integrate with Flash, and one of the most logical reasons we didn’t just start from scratch with Red5 Pro is that it still works great in this scenario. There’s a reason that solutions like video.js have a Flash fallback feature. Flash exists on these older browsers, it’s consistent, and it still works remarkably well considering its age.

Native Apps
Mobile publishing (meaning accessing the camera, encoding to a video format, and live streaming out) typically has to be done via native apps. This is especially true on iOS, as the Safari browser doesn’t support WebRTC today. The latest versions of Chrome on Android support WebRTC, and in a lot of cases it’s a viable way to implement live streaming. However, the most successful apps out there today are all native, such as Skype, Periscope and WhatsApp. In this regard, most of our customers feel it’s important to make a native app, and WebRTC doesn’t buy you anything if you have to implement it natively.

If you have the time and patience you can get the WebRTC project to compile and integrate on your mobile app, but most developers don’t want to be bothered with the complexities of integrating protocols at this level–they prefer a nice layer of abstraction using an easy-to -implement SDK. While there are excellent WebRTC based SDKs like TokBox, most developers don’t actually care what the underlying protocol is. In the end, they just want it to work.

We chose RTSP/RTP for our protocol within the Red5 Pro mobile SDKs as it’s both extremely fast and efficient. In addition, even after we’ve finished our current WebRTC implementation, which will be released in the Spring of 2016, we won’t be switching the protocol for the mobile endpoints. As an aside, if you study the WebRTC standard you will see that they actually use RTP as the base level protocol for the transport anyway.

What do you think? Do you really care what protocol your preferred streaming SDK is using under the covers, or do you just want it to work flawlessly? We would love to hear your feedback on this.

It also turns out that if you want to build an app that simply views live streams in a browser, then there are other ways to to do it. HLS, or HTTP Live Streaming has already become the standard streaming protocol on iOS devices, and there’s support for it on newer Android devices. I mentioned the video.js player, and there’s commercial ones like JWPlayer which support HLS as well.

On many Android devices, RTSP is a standard that can be relied upon as a way to consume live streams. With Red5 Pro we support both HLS and RTSP.

Not to Discount WebRTC
Clearly there’s a future in WebRTC, and as more browsers begin to support the standard and the protocols begin to be unified, we will see it become the go-to strategy for live streaming and live communication apps. We strongly believe in the future of WebRTC, and this is why we are working diligently on implementing WebRTC support in Red5 Pro. In the meantime though, there are many alternatives which work well, and for the foreseeable future we will still need these other protocols and platforms to work as fallbacks. Red5 Pro supports what you need today to get live streaming apps up and running for 90% of the use cases.

Let us know what you think. Are you currently using alternatives to WebRTC in your apps today? How much longer do you think solutions like Flash will stay relevant?

Build Periscope in 10 Minutes

November 30th, 2015 by Chris Allen


With live streaming becoming increasingly prevalent in 2015, developers are focused on creating applications to address the public’s fascination with streaming media. Periscope is the prime example of such an application and the sheer size of Periscope’s user base and class-leading engagement metrics validate its dominance in the space.

But what does it take to build a live streaming and communication platform such as Periscope, with the capability to broadcast to one hundred thousand or even one million subscribers? What if I told you that you could build a live streaming application with Periscope-like functionality and scalability in just 10 minutes?

Before we created Red5 Pro it took some serious effort to build this kind of server-side infrastructure and tackle the high level of complexity to build a native Android and iOS video encoder/decoder that works with the server. We saw this trend of a new kind of mobile app that connects people in real-time, and we saw these early adopters cobble together inefficient software wasting tons of time and energy. We couldn’t allow this to happen anymore, so we decided to make it easy for developers. With Red5 Pro, you truly have the ability to build the guts of the next live streaming phenomenon in a matter of minutes, and here’s how:

Let’s first start with all the pieces, and what you would need to build if you were to do this from scratch.

The Fundamentals

1. Publish from the mobile client:

  • Access the camera

  • Encode the video

  • Encode microphone data

  • Negotiate a connection with a media server

  • Implement a low-latency streaming protocol for transport

  • Stream the data to the server

2. Intercept with a media server

  • Intercept the stream

  • Relay to other clients


  • Re-stream to a CDN (adds latency)

  • Record the stream (optional)

3. Implement client side subscribing:

  • HLS in WebView (even more latency)


  • Setup connection with media server

  • Implement streaming protocol

  • Mix the audio and video

  • Decode video/audio

  • Render video and play the audio


*Note-this is actually a simplified list of all the tasks involved. Try doing this on multiple threads and getting it to perform well; it is complicated! It’s truly a rabbit hole that most developers don’t want to venture down. Given the awesome tools and libraries that exist for us developers, we thought that it was ridiculous that an easy-to-use and extensible live streaming platform just didn’t exist. That’s why we built Red5 Pro.


Red5 Pro to the Rescue

Let’s uncomplicate this. The Red5 Pro Streaming SDKs provide what we think is an intuitive and flexible API to remove the complexity while retaining tremendous control if you need it. Let’s take a look at the classes our SDKs provide. (note that they are the same on Android and iOS).


Let’s step through an example using these classes, piece by piece.

The Publisher



The first step is to create an R5Configuration. This class holds the various data used by your streaming app. It contains things like the address of your server, the ports used, protocols, etc. In this example we are connecting to a server running at on port 8554 via the RTSP protocol. This Red5 Pro server has an app called “live” running on it, and that is what we want to connect to based on the context name. And finally we are setting the buffer time to half a second.







Next, you create an R5Connection object, passing in your configuration. This establishes a connection to the Red5 Pro media server.









Now you create a stream object passing in the connection object you just created. Note that the R5Stream is also used for incoming streams, which we will get to in a bit.









Next we create a camera object and attach it to the R5Stream as a video source.










Then we create a microphone object and attach it to the stream as an audio source.











While it’s not a requirement to publish a live stream, we find it useful to provide a preview for the user of their video being streamed from the camera. This is how you set that up.









Finally the last step for the publisher is to publish the stream using a unique name that the subscriber can subscribe to.







The record type parameter tells the server the recording mode to use on the server. In this example we are setting it to live, meaning it won’t record the stream on the server.


Here are your other choices.

R5RecordTypeLive – Stream but do not record

R5RecordTypeRecord – Stream and record the file name. Replace existing save.

R5RecordTypeAppend – Stream and append the recording to any existing save.

If you compiled and ran this app with it configured to point to a running Red5 Pro server, you would be able to see it running in your browser. Open a browser window and navigate to –> http://your_red5_pro_server_ip:5080//live/streams.jsp to see a list of active streams. Click on the flash version to subscribe to your stream.



The Subscriber

Now that we’ve built the publisher we have established a live stream being published to the server. Yes, we did see the stream in Flash, but in order to consume that stream on mobile we need to build the subscriber client. Let’s dig into that now.




Just as before, we setup a configuration object holding the details of our connection and protocols.










Then, like in the publisher, we set up a stream by passing in the configuration into the constructor.









This is the step where things deviate just a little from the publisher. We still set up an R5View, but this time we want to use it to display the incoming stream







Finally, we tell the stream to play by using the play method and passing in the unique stream name that the publisher is using.






Voila, you can now build your own one-to-many live streaming experience, all within minutes with the help of Red5 Pro. What do you think, are there ways we could make this even easier? We love hearing feedback, so let us know in the comments or email us directly. Happy Coding!

, , , , ,

Release Notes: New iOS Streaming SDK with Critical Fixes for A9-based devices

November 24th, 2015 by Jamie Maynard


Good afternoon!

A new iOS SDK is now available: it includes a critical fix for the latest iOS devices which covers the iPad Pro, iPhone 6s and iPhone 6s Plus. This build also involves a few updates with new examples, including how to create a custom R5VideoSource and how to publish using the Swift language. Full release notes are below.

Release Notes: iOS SDK v0.8.41.1-

iOS streaming SDK has been loaded up on

Updates in this SDK include:

- fixed a memory leak in publishing
- fixed issue with new iOS devices (A9 chip) creating bad streams and microphone errors
- support for image capture during subscribing to a stream
- support for publishing from a custom video source

Updated examples in include image capture and custom video source, in addition to a publishing example written in Swift

We look forward to seeing what you build with this. As always, please let us know if you have any questions.


Infrared5 Selected As A Top Boston App Developer By B2B Research Firm Clutch

November 20th, 2015 by Jamie Maynard

Screen Shot 2015-11-20 at 11.29.23 AM


Today Clutch published its first report highlighting Top Boston App Developers and we are extremely pleased to have been included on this list. It’s an honor to be included among these top app development shops, and as we transition our focus to Red5 Pro, we look forward to collaborating with all of them as well by helping developers create awesome live streaming experiences. Check out Clutch’s post on Infrared5 and the other winners here:

Here’s what Ryan Stevens, Senior Analyst at Clutch had to say about the mobile app development landscape in Boston and New England more generally: “The Boston and Greater New England Area continues to become a more competitive development landscape, but many of these firms have been longstanding staples in this development community. These firms have proven that they can take a client’s concept and develop an application that more than delivers on expectations.”

Learn more about Clutch.




Quick Start Guide For Red5 Pro!

November 18th, 2015 by Jamie Maynard

Unlike some other streaming solutions, we don’t just focus on the server side or the client side–we provide the whole stack. While this provides a tremendous amount of power and flexibility, it does make it more difficult to set up. A few of our customers were confused on how to get started, so we consolidated four of our guides in one place to make it more streamlined and simple to follow. This guide will get you quickly up and running with the Red5 Pro server and the client-side SDKs.

Get the new Quick Start Guide and we look forward to hearing your feedback!


« Previous Entries