I have mp4 file of size around 1GB. I have transcoded using AWS Elemental Media Transcoder and resulting file(m3u8) size becomes 20GB and stored in S3 bucket.
Now Data Transfer OUT From Amazon S3 To Internet for First 10 TB / Month is $0.09 per GB. https://aws.amazon.com/s3/pricing/
I want to understand Data Transfer Charges when user streamed video in the platform. Is it fair to assume that Data Transfer OUT will be $0.09*20 = $1.8 or is it something different?
How to reduce the data transfer charges here?
Please note that AWS Cloudfront is not used yet.
Data Transfer OUT will be $0.09*20 = $1.8
Technically correct, yes.
Although, note that you also pay for requests made against your S3 buckets and objects.
For example, for objects stored in the S3 standard tier, GET requests cost $0.0004 per 1000 requests. Your real cost would be $1.80 + ($0.0004 / 1000).
If your requests really scale up, you'll start to notice this cost e.g. 10,000,000 requests will cost you $4. But costs for data transfer OUT from S3 to the internet will be much larger than your request charge.
You'll need to have a lot of users to notice the request charge.
if they stream ('download') the full file.
How to reduce the data transfer charges here?
Use a CDN i.e. CloudFront, which would be slightly cheaper overall & faster e.g. $0.085 per GB for data transfer OUT + $0.00075 per 1000 requests (for the US region).
However, the biggest advantage here is that CloudFront provides 1 TB of data transfer out to the internet per month - completely free - as part of the Always Free tier. You also get 10,000,000 requests per month for free.
Note you'll still get charged per S3 rates for the S3 request that comes from CloudFront when CloudFront doesn't have the cached version of the object to serve; thereafter, it's practically free up to 1TB & 10m requests.
These may be a good starting point: How do I use CloudFront to serve HTTPS requests for my Amazon S3 bucket? and the AWS Pricing Calculator.