CDN for RTMP live streaming URL - amazon-cloudfront

I am new into RTMP and live streaming. We have a live stream URL rtmp://someIPaddress/match, that is getting from a 3rd party source.
what I am doing is installing flussonic streamer in an ubuntu machine in aws and put the live stream url in flussonic.
flussonic will provide a url which is using in my android app through which the end users are watching.
Is it possible to achieve CDN in my scenario? I prefer to use aws CDN but I am confused. I have only used CDN when the images are stored in aws S3 bucket.

CloudFront supports RTMP(distribution type) but only VOD, it cannot serve Live stream. The other and better way would be convert your RTMP live stream to HLS/DASH stream using Medialive and push it to Mediapackage and use CDN(CloudFront) to serve HLS/DASH stream, however I think it will be more costly then your current solution.

Related

How do I receive video stream data in node server?

I don't know how to get started with this.
What I am trying to do is get a video + audio stream from front-end and host the live stream as mp4 thats accessible on browser.
I was able to find information on WebRTC, socket.io, rtmp, but I'm not really sure what tool to use / whats best suited for something like this?
also follow up question, my front-end is iOS app. So what format would I send the live stream to the server?
It depends on which live streaming protocol you want to play on the player, as #Brad said, HLS is the most common protocol for player.
Note: Besides of HLS, iOS native app is able to use fijkplayer or FFmpeg to play any format of live streaming, like HLS, RTMP or HTTP-FLV, even MKV. However, the most straight forward solution is HLS, only need a tag to play MP4 or HLS, and MSE is also a optional solution to use flv.js/hls.js to play live streaming on iOS/Android/PC, this post is about these protocols.
The stream flow is like this:
FFmpeg/OBS ---RTMP--->--+
+--> Media Server---> HLS/HTTP-FLV---> Player
Browser ----WebRTC--->--+
The protocol to push to media server, or receive in node server, depends on your encoder, by RTMP or H5(WebRTC):
For RTMP, you could use FFmpeg or OBS to push stream to your media server.
If want to push stream by H5, the only way is use WebRTC.
The media server coverts the protocol from publisher to player, which use different protocols in live streaming right now(at 2022.01), please read more from this post.

Should a long Running video processing task to be done client side or server side

I was creating an application in react for uploading video and using a REST API to send that to the server and store in S3. I also wanted the simple audio version of the video for some other tasks and I am confused as to what might be the better way:
Creating audio file on the fly when it is needed using node-ffmpeg package and not store it anywhere
Start converting the video file to audio on the browser client only, and posting that to the server for storage along with the video.
Just post the video to the server and use queue system for creating a new task for video conversion to audio and then save that to the S3 storage.
The second method seems to be saving some compute power on the server but it might be a problem if the video upload completes, audio conversion is still going on and the client disconnects.
Would appreciate some help, thanks.

How to get file from cloud storage and process as local file without downloading?

I am working on a project where I have to extract frames from a video by using ffmpeg (node.js). I first upload video to firebase storage from my client, and then I want to process it in the backend server. However, ffmpeg only accept file as if it is stored locally.
const ff =new ffmpeg('C:/Users/alexh/Desktop/alex/name.avi');
It will not work with url. I am wondering is any way I can get file from url as if it is stored locally or firebase can provide me a way to get the file? I don't want to use filebase trigger event because I want to send http request to backend server.
Thank you so much
The fluent-ffmpeg package supports operating on readable streams instead of just files. The GCS Client library supports creating a readable stream for a GCS object. By combining these you can has ffmpeg operate directly from GCS.
If you were running this on Linux or OS X, you could use GCS Fuse to mount the bucket on your filesystem and then point FFmpeg directly to it.

How to archive live streams video as on-demand

I stream any video for my users on the Lan network through Flash Media Server4.5 and my users can to view this videos on HTTP live stream. ([alink]http://192.168.1.10/live-video1.f4m[/alik]).
Now I need to save and archive this videos after unpublished until users can to play on-demand videos.
please advise me.
many thanks
.f4m suggests that you are using HTTP Dynamic Streaming (HDS) rather than HTTP Live Streaming (HLS). The most popular way to download HDS streams is to use this script: https://github.com/K-S-V/Scripts/wiki

Video Stream Hosting

Good day! I'm a newbie on video streaming. Can you help me find good ways on how to make a video streaming secure?
I'm having some issues on my video hosting project security.
I am creating a web page which calls a video stream hosted on a different server where
my web page is deployed.
Server 1(web page video embed) calls video to stream on Server 2(video host).
The problem is that they are hosted on an absolute different network. Should Server 2 where the video is hosted should be private and only allow Server 1 to fetch the video stream creating a server to server transfer of data, or should it be public for the clients to be able access it.
Can you help me decide what to do to secure my videos?
I badly need some idea on this... thanks guys!
How are you streaming and what streaming protocol are you using?
Server to server wont help in securing the video.it is better to stream the video direcly from your Server 2(video host) directly to the client,so that it wont be overhead for server 1(web page video embed).You need to use secure way to protect you video on server 2.if the server2 is not secure,even if you stream through server1 it wont help.
Here are details of security level on different video streamings.
If you are using progressive download.This can be done using normal http protocol.In this approach you would be able to see the video url in the browser.Once you got the url you can download it as a normal file download.Security is very low here.Even if you sign the video url,the user can download the video easily.
Streaming,you can stream the video using different protocol like rtmp etc.If you are streaming videos using some rtmp.In this approch, you wont be able to download the video directly,but you can use some good software to capture the video stream and save to the pc.
Streaming securly.There are some protocols like rtmpe.I tried only rtmpe,In this protocol,the streaming content will be encrypted on the server and decrypted on the client.so the software wont be able to capture the video stream.
Along with approach 3,if you sign the video url,it will add more security.Hope this helps.

Resources