Ask HN: Anyone hosting their own videos?
Hello,
I am preparing to soon upload all new video's I produce on to my own website instead of a platform.
I am asking if there is any one else who has done such a thing, so that I can look into subscribing to their RSS feeds and having things to watch that are not hosted on YouTube.
67 comments
[ 3.6 ms ] story [ 21.8 ms ] threadOne random person on the internet being able to see 1% of the videos you watch (the ones where you peered with them) VS one giant conglomerate being able to see 100% of the videos you watch?
For whom it may concern: This would most likely be a violation of the GDPR for users from Europe. You'll have to state this in a cookie notice if you can't change it.
Is that the stock install or did you add autoplay or something? I'm not sure I'd trust that to cover me under GDPR. It's a bit late by then.
Also doesn't GDPR require active opt-in consent rather than a "here's what we're doing" message? Seems a bit brittle.
Anyway, from what I understand, the GDPR doesn't apply to my personal website because of https://gdpr.eu/recital-18-not-applicable-to-personal-or-hou...
I'd definitely spend more time trying to custom build a consent interstitial than making videos haha
Vimeo (mentioned), JWPlayer, Mux, there's tons of options.
You could get away by hosting an mp4 file on S3, but you lose seeking, support for bandwidth-responsive quality/resolution, support for every device under the sun, and metrics.
And it may not be cheaper. I got a surprise AWS bill when someone hotlinked to test video files I was hosting so people can download them and use locally. That one oops could've paid for Vimeo Pro subscription for a lifetime.
https://news.ycombinator.com/item?id=30686704 [Popular Patreon creators are being hit with Vimeo price hikes (theverge.com)]
In dutch, nouns that end in the single vowels '–a', '-i', '-o', '-u', '-y' get a "-'s" when forming the plural. The apostrophe is added to keep the long single vowel at the end long.
That's why dutch speakers frequently make this mistake.
https://www.sussex.ac.uk/informatics/punctuation/apostrophe/...
The only reason it would need to get more complicated than that, in my mind, is if you're serving largish amounts of traffic.
This is a nice example imho.
- if the target is making money than you are tied to very popular platforms, because it's only there the largest public (unfortunately);
- if the target is a selected audience you already know and they equally know you a feed publishing just new video URLs and files just dropped in a webserver suffice, you users only need to click the link to see, no web-crapplications nor WebVM (improperly named and known as browsers for legacy reasons) needed;
- if the target is personal nothing beat a storage media in your pocket...
I guess you could just upload all your videos to S3 and serve them over cloudfront. But Video seems to be tricky because there's the whole idea of encoding, adapting quality (detecting a poor connection and serving a low quality video, etc).
What I chose some time ago was Mux, they had a very good and developer friendly service.
Bento4 has tools for manipulating the containers depending on your needs, and its not difficult to setup, though you most likely will need to have a certificate and hosting infrastructure setup to allow the player to load the video (i.e. CORS).
To mimic what Youtube is doing, then yes you will need to transcode it to streamable chunk, in multiple bit rate, and then storage them. Assuming you are not applying your own DRM here.
As you can see, this is rather storage intensive and there aren't any free solution on this.
I have no issues with pornography itself, but that's extreme trigger material.
Do you not understand what the word offensive means?
Actual rape would've been straight up illegal with real consequences, including to the platform provider.
Pretty cheap/easy.
The most basic pipeline for doing it is going to look something like this:
1) Upload the original video to a storage bucket.
2) Have some compute service transcode the video file to create other renditions.
3) Store those renditions in a different storage bucket.
4) Put a CDN service in front of the transcoded renditions.
Get ready for a nice bandwidth bill if anyone actually watches your videos!
Streaming a library of 500 GB of HD videos over the course of one month with approximately 72,000 minutes of viewing time to a global market.
Total cost: $78.00/month
[0] https://www.cloudflare.com/en-gb/products/cloudflare-stream
Translate Bunny’s pricing <https://bunny.net/stream/> to these numbers: $1/200GB delivered (assuming the volume network—the standard network is 2–12× the price, but I would not expect it to be justified) plus $5/500GB/month stored, and transcoding is included in those rates.
Bunny is cheaper to deliver below 26⅔ Mbps, and cheaper to store where the sum of all transcoded forms is below 66⅔ Mbps. This will almost always be cheaper, normally much cheaper. It depends on the content, but your 1080p60 video is almost always under 10Mbps, probably under 5Mbps, not uncommonly well under 2Mbps. Your bill with Bunny will probably be less than a third of your bill with Cloudflare, and for typically more static sorts of content (e.g. programming tutorials), probably less than a tenth.
(I am presuming the products are roughly equivalent. This may or may not be true. I have used neither.)
I should also mention that Cloudflare’s sample pricing uses grossly unrealistic rates: they translate “500 GB of HD videos” into “1,200 minutes of video content”, which means 55 5⁄9 Mbps. “HD” tends to mean 1080p these days, though it does still get used for 720p too. (Some label 1440p and 2160p/4K as HD too, but I’d say they’re beyond it.) I accuse Cloudflare of using a rate that’s around four times too high. They don’t go into detail on their “typical public cloud provider” costs so I don’t know how realistic the rest is, but given how they’ve started with something that makes them look implausibly cheap, I’m not impressed.
But yeah, "marketing driven" price
Where does it say this? I can't find it.
> Streaming a library of 500 GB of HD videos over the course of one month with approximately 72,000 minutes of viewing time to a global market.
> Storage: $6.00 - Storage costs are based on 1,200 minutes of video content at $5 per 1,000 minutes stored.
Could this be because they pre-transcode to different bitrates, and have to store each version?
On reflection, it’s possible that there was a miscommunication that led to this wording, since if it were the post-transcoding figure it wouldn’t be outlandish for something like VP9/H.264/AV1 at 1080p/720p/480p/360p, though it’d still be on the high side.
Genuine question - what would they gain by making the storage low for the amount of video? I can't figure it out.
This 100%
I looked into it before and understandably, the badnwidth you can be using up for a relatively small amount of videos is always going to be pretty expensive. It is also not always easy to know in-advance, and do you want to suddenly get a 10x bill or have to cut-off your users when it gets expensive?
If you can afford to charge, then obviously it's different, otherwise YouTube's annoying advertising is paying for you...
2) Why? There are plenty of blogs walking you through how to use FFMPEG to generate multibitrate HLS packages. I get faster than realtime encoding making 5 different bitrates.
2->1) Now you're only storing the highly compressed versions instead of the original (at whatever compression chosen for that)
I am in no way affiliated with its this creator.
https://youtu.be/CCF-xV3RSSs
I'd just go with a video tag, containing the webm/av1/mp4 URLs, a poster image, and optionally subtitle tracks.
The first and most important thing is that you need to make sure your web server can serve ranged requests. Most web servers that serve static content should do fine, such as Apache and Nginx. If you have your own web server, make sure they respect Range headers and respond with the requested chunks. Most CDNs do, but servers provided by runtimes don't, such as the PHP built-in server. This is important for the browser to properly preload and seek videos embed.
I find third party video players unnecessary and added bloat. Several years ago, sure, that was when we had to fiddle with Flash players and all browser compatibility shenanigans. A standard HTML5 video player works great, it even hooks into Android media controls, bluetooth play/pause buttons, and picture-in-picture. Though I have not tried, none of the custom players can properly add subtitles/closed-captions to videos and make them work in Picture-in-Picture, apart from the standardized CC tracks. IIRC, Firefox had to bend over backwards and add custom workarounds to get Netflix CC to work in PiP. If it comes to that you need to use a custom player for consistency, I can highly vouch for Media Element JS.
This is a pro on the HLS/DASH type of content. Even if the server doesn't respect ranges, this is still covered by the segment based encoding of HLS/DASH. Instead of asking the server to give a specified portion of a file, the playlists just requests a specific segment.
Hosting my own is/was not too bad. The students had to wait a little longer. I did not hear too many complaints (really thought I would have heard a lot more "why can I not watch this on my youtube app on my phone").
Did not put too much effort into this post-semester, but I still do wonder what the heck other people do. I consider myself a serious veteran IT person, it is my (accidental) profession for decades. I have no idea how people upload 50+ min videos to youtube. I think I left one transcoding for 48 hours. It was not 50% done. I ensured I was using a codec youtube wanted, and even tried more. Ah well.
On the flip side, hosting on your own, you miss out on CDN reach and breadth and POPs that will cache for you. You will also dramatically miss out on speed. Then, if you have more than a few, what about indexing and search-ability? I do not like "big-corp" internet any more than the rest of us, I guess, but they have the infrastructure that we just do not have. A few videos for a class during a pandemic is one thing... but I would ask what your long term goal is in terms of the number of videos. This might change your mind as to how you want to distribute them.
I guess self hosting is good enough for you!
Even with low end hardware (e.g. 200 GEs as homelab servers, with 1 CPU core allotted to transcoding) generally transcoding is faster than the video itself. E.g. 2 hour videos will take less than 2 hours to transcode (1080p, 30fps, going from a bitrate of 7000 to closer to 3500 using H264). On an unrelated note, buying a Seagate HDD is way cheaper than buying that storage "in the cloud", as long as you have backups figured out.
Using my desktop (even kdenlive with CPU encoding, on an old Ryzen 5 1600, 6 cores and 12 threads), it happens even faster than that, albeit it's nice to be able to drag a video file into PeerTube and have it be automatically transcoded to both 1080p, 720p and 480p, for various devices/connection speeds.
I tested out VP8 (libre) a while ago but it was still somehow slower to encode and had larger file sizes than H264. I guess YouTube just doesn't give you as many resources given the large volume of videos that it needs to deal with.
In case anyone is interested:
Kdenlive: https://kdenlive.org/en/
PeerTube: https://joinpeertube.org/
It works amazing. No ads. No third-party tracking. BUT it is not the cheapest solution. I have one site where there is an auto-play 5 minute HD video on the homepage and it costs $70 a month for just that video. But that's an extreme case, other lower traffic videos are very low cost (< $0.10 / month).
Obviously my workflow is very AWS centric. You could also successfully replace Elastic Transcoder with something like FFMPEG if you are open to doing more work to automate.
Still, you may want to consider one of the services optimized for video as they tend to offer lower cost and have transcoding built in.
To all the people saying to use Nginx or similar: you can do that. I strongly recommend putting a CDN in front of it, though. Because with video buffering a small change in latency can have a big effect and the CDN will make sure the video is served from geographically close edges.
Are you serving the whole video file to every visitor? You might want to try using Cloudfront’s streaming support if you’re not already using it: https://docs.aws.amazon.com/AmazonCloudFront/latest/Develope...
The average visitor downloads about half the video (based on the bandwidth usage stats). Unfortunately because of the nature of the page people tend to linger.
That page gets a million+ hits a month and it's already using adaptive bitrate and resolution. Which the pipeline I mentioned can support.
It's just a bad design IMO but I haven't been able to convince them to change it since the client believes (and may be right) that the video increases their sales enough per month to be worth it.
It's all about your use case. If they were monetizing that video they would only need a penny per view to make a profit.
I’ve used the same technique to host various videos over the years with zero issues, but the s3 charges can add up if you’re not careful since you’re storing multiple copies of the same video to enable adaptive streams.