How to Store videos online and stream them - amazon-web-services

How to store a large amount of videos online and enable users to stream them, so how can i use cloud services to do so.
The website admin will upload many videos per month and users will be able to stream and watch them, so i'm expecting a quite good/heavy traffic, you can say it will be like Vimeo or YouTube but smaller scale of course.
So the requirement:
Store as many video file as i want.
Users can stream without bandwidth/traffic limitation (buying service is okay)
Full control of the uploaded storage (edit & delete).
Web statistics (streaming, visitors, etc.)

If I were you, I would do some research into CloudFront media streaming. You might also want to look into Amazon Elastic Transcoder for conversion of uploaded videos into the proper formats.

Related

What is the difference between S3 video storage and streaming?

I'm hosting videos on aws S3 at the moment. I can place the s3 url into the src attribute of my tags and everything works correctly and plays as though the video is being streamed to my site. These are not small videos either. Some are 1gb in size.
I can also immediately jump to the end of the video as though the entire file wasn't downloaded, but just the part I need.
Whenever I google info on streaming on demand video from aws I get answers that I need a service in front of s3 to do something like this. Is aws automatically doing this for me?
S3 support partial GET requests. This allows clients to request only a specific part of the file. Most modern players (including HTML5) are able to utilize this feature to provide the experience you describe to the users.
Quoting from here:
HTTP range requests allow to send only a portion of an HTTP message
from a server to a client. Partial requests are useful for large media
or downloading files with pause and resume functions, for example.

How to design scalable video streaming architecture using GCP?

I have a video streaming application which does streaming the video from google storage bucket. All the files which reside on the storage bucket are not public. Every time when users click on a video from the front-end I am generating a signed URL using API and load into the HTML5 video player.
Problem
I see if the file size is more than 100 MB it takes around 30-40 sec to load the video on front-end.
When I googled to resolved this problem, some of the articles are saying use cloud CDN and storage bucket then cache the file. As far as I know, to cache the file, the file has to publicly available. I can't make files publicly available.
So my concern is, are there any ways where we can make it scalable/ reduce the initial time?
Cloud CDN will help your latency for sure. Also, with that amount of latency it might be good to look into the actual requests that are being sent to Cloud Storage to make sure chunks are being requested and that the whole video file isn't being loaded before starting to play.
Caching the file does not require that the file is public. You can make the file private and add the Cloud CDN service into your Cloud Storage ACLs (https://cloud.google.com/cdn/docs/using-signed-urls#configuring_permissions). Also, as Kolban noted above, signed cookies might be better for your application to streamline the requests.
Not an exact answer but this site is useful to design solution using GCP.
https://gcp.solutions/diagram/media-transcoding
As mentioned earlier, CDN is right way to go for video streaming with low latency.

Video download from Amazon S3 in India takes too much time

I am trying to create a video sharing app for only one country (India). My bucket is in the India region. The size of videos will be of approximately 18MB each.
The video download takes too much time (~4mins) to download even via CloudFront. How can I accelerate my S3 download speed?
Apps that play streaming video do not download an entire video file before playing. Rather, they use a video protocol that only downloads a few seconds at a time. Amazon CloudFront can support these protocols, such Adobe's Real-Time Message Protocols and Microsoft Smooth Streaming.
See: How RTMP Distributions Work
Therefore, the time for the actual file to download is not important. Rather, the time to serve the first portion of the video is most important, followed by the ability to continue serving content as fast as the viewer consumes the content.
Connections speeds will, of course, vary depending upon each user's own Internet connection -- therefore, it is best to test the speed of your application's video playing ability from many different ISPs and types of Internet connections.

AWS CloudFront vs Youtube - what's the faster way to load videos on a webpage?

I need to include 42 tutorial videos on a single web page, between 30-90 seconds each. I'm currently uploading them to S3 in mov format and including them in the page with the video tag. 6 videos in, the page loads fast enough but the videos take ages to load.
It looks like I have 2 options to speed this up from the research I've done -
1 - Upload the videos to Youtube, load thumbnail images on the website and replace them with the video when the user clicks on the thumbnail image.
2 - Use Amazon CloudFront to deliver the videos to the user.
Which of these is a faster way of delivering videos to the user? Youtube seems to be the cheaper option with the added advantage of allowing the user to stream videos on Youtube but AWS CloudFront seems like a service specially built for this purpose.
I will suggest if you want less complexity and fast setup use You Tube. Even if AWS CF is build for this purpose you will have to create a infrastructure for hosting those videos, which in case of you tube you have to just embed the video using the embed code.
As per costing goes Youtube is less cheaper almost free. If you create Cloud Front for the distribution you have to pay for Storage of the Videos, Data Transfer Cost and many more. You will get a very good speed for youtube videos worldwide. Also you have to create a video player in your application for video streaming which is again more work.

Record live streaming video with WebRTC and stream with AWS

I'm trying to develop a website that basically lets a user visit a page, and lets say click a button, and use their built in camera to live stream videos with audio to others that visit another url.
I need some clarity on what I need to develop, what I can get from 3rd party to save time. AWS looks to cover all the encoding and delivery http://aws.amazon.com/cloudfront/streaming/, but I'm confused on the process on which I should record and delivery the content to S3. Just to much information overload.
In all my research I looks like I should build a WebRTC, which I have done, then transport that data with javascript from the clients browser to my server, and thus to AWS. Is this the best format, or should I been using a 3rd party thats putting more time into that element?
I have seen the Kurento project, as well as this RecordRTC project.
Like I said, I'm finding there is just to much information overload on the topic.
So what are my options for:
In browser recording with WebRTC. Anything else I should do or just force users to roll up to a supporting browser?
WebRTC means I have to do Javascript for the delivery, is node a better option for the server to take delivery of this streaming data?
Anything else I need to know before I pass it off to S3 for delivery to the cloud front?
As you can see the core of my question comes within the recording and transporting the data to the web server so I can delivery it for streaming.
I am looking for the same thing.
In 2020, it seems it should be possible with RecordRTC and then uploading blobs / multiform data directly to S3.