Solving Different Problems
blogs.adobe.com
blogs.adobe.com
Edit: that wasn’t all I had to say.
> What about Mac? I’m not sure but my Mac colleagues have mentioned something about Apple not making their hardware decoding APIs available to applications
Well why didn’t you just go ahead and ask them before writing a blog post on company letterhead?! Is the corporate structure here so screwed up that you can’t actually do that, or are you just lazy?
I heard that they refused to work with Apple to improve its performance on Mac, and that was a core reason why they got excluded from the iOS platform -- searching for this I came up with an explanation directly from Apple:
"Symantec recently highlighted Flash for having one of the worst security records in 2009. We also know first hand that Flash is the number one reason Macs crash. We have been working with Adobe to fix these problems, but they have persisted for several years now. We don’t want to reduce the reliability and security of our iPhones, iPods and iPads by adding Flash."
Apple did not open their video acceleration APIs until they released OS X 10.6.3 circla mid-2010.
http://xbmc.org/davilla/2010/05/03/osx-gets-h-264-accellerat...
That doesn't excuse Adobe from making buggy plugins.
I don't want to listen (to customers and developers) you need to feel it.
Worse yet, nothing stops flash from working in the YUV color space when mixing video and non video elements.
Much more importantly, it doesn't give me any confidence in their ability to code for security.
Here is a good analysis of that text that explains a lot on how that statement is great PR but nothing more: http://truegryc.blogspot.pt/2010/05/response-to-thoughts-on-...
This is a two and a half year old blog post. Mac hardware video decoding is supported now.
Anyways, I guess Adobe changed their mind later, and decided they wanted to solve both of the "different problems" mentioned in the blog post.
(Remember, Flash used to be all about vector animations. Sometimes it'd seem like the ubiquitous flash-as-a-video-player thing happened almost by accident; it turns out the video support (a relatively small feature in the whole flash featureset) was good enough to bring "universal" video to the web.)
And therein lies the problem with Flash video: dozens of video player implementations, each frustratingly different and user unfriendly than the next. People are building custom chrome on top of HTML5 video too, unfortunately, but at least it's standardized (and semantic) which allows users to consume web video with any interface they want.
Really? The Internet at large is able to unanimously declare things, and one of those things is that it appreciates Flash's solution to the video problem? Tell me more...
"Try to keep up here." "Again, say it with me:" "Please tell me you know people who aren’t as tech savvy as you. If you don’t, get to know some in order to maintain proper perspective."
A lesson in how to not communicate a technical idea.
(I feel it's a real failure of vision in the open-source community that there wasn't a free theora (say) plugin available for all browsers, and server-side video hosting platform, when youtube was getting started.)
"Again, say it with me…
I’ve been reading this blog since the beginning. I always thought you were a little condescending, but you seemed knowledgeable enough and I thought you were doing good work.However, you can say this with me: Eat shit."
To blame that for their poor performance suggests that their YUV-RGB conversion code is among the slowest in the industry.
Adobe is emphasizing that they have to do more compositing logic, so they they need an RGB version of the video frame on the CPU side.
If they did the colorspace conversation on the GPU, they'd have to pull the converted image back and incur the latency hit. Apparently, they see less latency in doing the conversation on the CPU, and have made the call to trade processor efficiency for latency.
To be clear: YUV colorspace conversion on a GPU is really damn simple. I have a ~30 line shader that does it from my video processing codebase. But I can take the hit - I do a substantial amount of image manipulation using shaders on the GPU, and mask the read latency with heavy multi-threading. A Flash application doesn't have this luxury.
But this discussion is largely academic - if you're writing a Flash based video player that doesn't need the flexibility of Flash's full compliment of image manipulation and composting functionality, you'd be using their StageVideo API - an API that does do all the video work on the GPU. This API was introduced in Flash 10.2, which came out after this article from 2010.
Might be due to the implementation of the sites (german broadcasters ard & zdf) but flash works pretty awesome for me.
The screen has red, green and blue pixels, either way a video is played, the colours have to be converted into RGB.
the in-memory layout of a YUV-encoded frame is different than the one of a RGB one. it needs conversion, which implies an intermediate copy, as well as traversing a buffer that can go up to 1080 rows.
most video players (and Flash on Windows and MacOS), these days, use shaders and multi-texturing to do that conversion on the GPU; it removes a copy, because you just push the YUV frame as it is to the GPU - and your CPU can go back to a low C state.
I think Flash on Linux does this as well, on nVidia: the blog post linked is from 2010. the way Adobe detect capabilities is, in itself, hilariously bad - instead of checking the GL required GL extensions like any normal people, they do a check on the GL vendor string. the Mesa guys pointed that out, but I doubt they ever received a response.
There is no excuse for that - I could understand higher CPU usage, but not by factor of 3.
That problem is largely tracking user behavior across the internet.
Nah, that's crazy talk.
Who would want to watch a high-quality hardware-accelerated local video that gets deleted when you close the tab, from the familiar interface of a web browser? Crazy talk, crazy talk.
Then again, I don't use it because I couldn't get any seek UI to appear.