videojs / videojs-contrib-hls

HLS library for video.js
http://videojs.github.io/videojs-contrib-hls/
Other
2.84k stars 792 forks source link

Minimal system requirements for AES128 encoded HLS with VideoJS #1354

Closed slvrtrn closed 6 years ago

slvrtrn commented 6 years ago

After bringing encoded videos to production we encountered a problem that some of our clients with rather slow computers have stuttering during the playback with perfectly fine network connection. Is it possible to somehow know minimal system reqs for AMD/Intel CPUs for correct playback of 1080p/720p HLS encoded with AES128 with bitrate like 3000?

gesinger commented 6 years ago

Hey @slvrtrn , we don't have that kind of information offhand, and it can depend on a lot of factors. For instance, leaving aside other processes on individual computers, differences between browsers and what they're using to decode and playback content, and differences between other hardware and support for hardware based decoding, the content can also be encoded with various profiles, some of which emphasize easier decoding but higher bitrates, others with more aggressive encoding leading to lower bitrates but more processing required. In addition, the content itself can lend itself to more or less intensive processing.

That said, we do have the throughput property ( https://github.com/videojs/videojs-contrib-hls/blob/d263eeaeb844e1d0feffb3d7308ed081e9f9d508/src/videojs-contrib-hls.js#L324 ) which tracks the bitrate of the entire process post download: decrypting, transmuxing, and appending. These are both used as part of our systemBandwidth ( https://github.com/videojs/videojs-contrib-hls/blob/d263eeaeb844e1d0feffb3d7308ed081e9f9d508/src/videojs-contrib-hls.js#L359 ) calculation for ABR, thus letting us downswitch in cases where either the client doesn't have enough bandwidth, or the processing is taking too long to smoothly play higher quality content.

While we can't provide hard numbers, you may be able to determine the numbers for your content with those properties, and if you add some lower quality renditions, videojs-contrib-hls will automatically play the most appropriate content for a given system and network.

Hope this helps.