OpenVidu for Streaming Broadcast

I am developing an application for which the the primary use case is one (or at most 3-4) speakers broadcasting to more than 10K (or even 100K) receivers, who only receive but cannot publish. Is OpenVidu (+Kurento underneath) optimized for this use case? I am sure 1:N or k:N is possible, but is it optimized for cost and bandwidth?

I did not get a clear answer from reading docs or googling. Janus seems to have a Streaming mode, and of course, Red5, YouTube Live, Twitch are all streaming-only solutions.

WebRTC technology is designed for low latency communications, specially between 2 persons or small groups (up to 50 or 100).

There is some products providing streaming capabilities based on WebRTC like milicast or Ant Media Server.

In OpenVidu, there is no limit in how many users you can connect to the same session, but you will hit some fundamental issues with WebRTC scaling. Taking the good docs from mediasoup friends:

When broadcasting a video stream to many viewers (hundreds or thousands of consumers) it’s important to be aware of how video RTP transmission typically works:

  • A viewer may eventually loose video packets so would request packet retransmission to mediasoup. Retranmissions are handled per transport (they do not reach the broadcaster endpoint) so there is no limitation here.
  • A viewer may connect or reconnect, or may change its preferred spatial layer, or may just loose too many packets. Any of those circumstances would imply a video key frame request by means of a RTCP PLI or FIR that reaches the broadcaster endpoint.
  • Upon receipt of a video PLI or FIR, the encoder in the broadcaster endpoint generates a video key frame which is a video packet much bigger than the usual ones.
  • If the encoder receives many PLIs or FIRs (although mediaoup protects the producer endpoint by preventing it from receiving more than one PLI or FIR per second) the sending bitrate of the broadcaster endpoint would increase by 2x or 3x. This may be a problem for the producer endpoint and also for viewers that will receive much more bits per second.

So no, OpenVidu is not optimized for such use case because is based on WebRTC without any special care of such “streaming” scenario.

Hello,

I have a similar broadcasting use case I would like to implement. Is it possible to use OpenVidu Pro to horizontally scale the number of conference rooms and then pass along a composite feed of each room to a 3rd party CDN network like Milicast? All that would be needed is a webRTC endpoint for the composited room.

Is it possible to modify the underlying kurento media server instance to add custom modules to do this?

We are working on adding RTMP export to OpenVidu PRO so you will be able to connect any session/room to a streaming CDN service.

We don’t have experience with millicast for low latency streaming, but we can implement the integration as part of our commercial services.

You can add custom modules in the Kurento Media Server used in OpenVidu PRO.

Regards

When can we expect this update?
Live Streaming is very important feature.

Hello Jin,

We have developed an external module to export a to RTMP so you can view it in YouTube Live, Twitch, etc… please contact to commercial@openvidu.io for commercial details.

Regards

That’s great
is it not free and open source?

RTMP Exporter is part of OpenVidu PRO.

It is not free and open source.

2 Likes

Hello micael.gallego,
RTMP exporter is ready for use?. I was looking for this feature in documents pro version but couldn’t find it. Can you show me. Thanks.

Hello @bruce.lee,

RTMP export is sell as a external module, it is not included yet in OpenVidu PRO subscription. For that reason it is not documented in the web page. If you want to know more information about it, please send us an email to commercial@openvidu.io.

Best regards

Hi @micael.gallego @pabloFuente @cruizba , sorry to ping like this but I had previously sent an email regarding this external module but never heard back. Just sent another email to commercial@openvidu.io . Could someone from your team please respond? This is a feature that we urgently need and we’re trying to figure out if OpenVidu can provide us with this external module or if we need to build this ourselves or use another service for this aspect of our functionality.

Thanks!