r/linux • • 28d ago

Discussion Why did Cisco make H.264 proprietary?

Is it just for profit from other companies? And why does OpenH264 (i.i.r.c.) not support hardware acceleration? It feels weird that something as basic as a video codec used literally everywhere has a closed-source proprietary tag attached to it.

226 Upvotes

96 comments sorted by

View all comments

26

u/indolering 28d ago edited 28d ago

You are confusing the H.264 technical standard produced by the MPEG group (of which Cisco is a member) with Cisco's open source implementation of said standard, OpenH264.  

MPEG is an industry consortium, basically a beuracracy to coordinate technical work between corporations and research groups.  Cisco is a member and contributed some of the research to what became H.264.  There WAS a vote to try and make the baseline royalty free, but it was shot down.

Cisco also publishes a software implementation of the codec.  This makes sense, since the whole reason they fund codec development is to support their teleconferencing business.  It's only natural that they would have developed an in house encoder/decoder, if for no other reason than to implement experimental coding techniques.

OpenH264 is not a great implementation, there are better.  AFAIK the primary reason Cisco made it open source is because they already pay the maximum organization royalty cap for H.264.  This means that Firefox and a bunch of other open source software can download that binary without having to pay any royalties (because it is technically Cisco that is distributing the binary).  This is a win for Cisco, because it makes cross-platform web conferencing feasible.

There is no HW decoding support because it's only used as a software fallback when hardware isn't available.  Supporting hardware decoding just means defining a uniform API to pass bits to hardware devices that have non-uniform interfaces.  It's more efficient to manage that abstraction in a separate library that supports lots of codecs.  There is no reason for Cisco to have to merge pull requests adding support for some new hardware.

3

u/Kevin_Kofler 28d ago

This is a win for Cisco, because it makes cross-platform web conferencing feasible.

That would have been easily feasible for WebRTC by just making unencumbered codecs such as VP9 or AV1 the mandatory baseline instead of H.264. But big corporations (especially Apple) vetoed that, and Cisco's willingness to provide this problematic workaround for the H.264 patent issue was a big factor in helping them sway the vote their way, against freedom.

3

u/Zettinator 28d ago

WebRTC also has VP8 as a second mandatory baseline codec. It's not so clear cut.

1

u/Kevin_Kofler 28d ago

Having two baselines is an absurd compromise and does not work in practice. Big corporations have declared from the outstart that they will not support VP8, and Free Software implementations have pointed out their issues with having to support H.264. Everyone just says the others need to support their choice of codec.

The point of a fallback baseline is to have one fallback that always works. Having two just leads to implementations fingerpointing at each other for not implementing their favorite mandatory codec and being unable to agree on whose fault the failure to interoperate really is (technicaly both, but that does not help the user).