In this episode, Amber and Steve interview special guest Joe Dolson about Able Player, a free, open source accessible HTML5 media player project. Learn about the project, how Joe got involved, and general recommendations around implementing accessible media on websites in 2025, and beyond.
Listen
Watch
Links Mentioned
Transcript
Chris: Welcome to the Accessibility Craft Podcast, where we explore the art of creating accessible websites while trying out interesting craft beverages. This podcast is brought to you by the team at Equalize Digital, a WordPress accessibility company, and the proud creators of the Accessibility Checker plugin.
And now onto the show.
Amber: Hey everybody, it’s Amber and I’m here today with Steve.
Steve: Hello everyone.
Amber: And our friend Joe Dolson. Welcome, Joe!
Joe: Hey, really happy to be here again.
Amber: Yeah, we’re excited to have you back on and maybe you can give a little introduction to yourself for anyone who hasn’t heard your previous episode or seen you around the WordPress community.
Joe: Sure. So I’m Joe Dolson. I’m a WordPress core committer. I do a lot with the accessibility team, working on WordPress, making things better. I’m also one of the board members of WP Accessibility Day, along with Amber Hinds, who you see right before you. And in the context of this episode, I’m also the lead developer of Able Player.
Amber: Yes, which we will be talking about in greater detail in just a minute. For anyone who wants to find show notes or a full transcript for this episode, you can find them if you go to AccessibilityCraft.com/144. Of course, we always kick off every episode with a beverage, and normally Chris is here as our food guy to introduce all of the beverages.
Today’s Beverage
Amber: He is not, I picked this one though, so I figured that I can go ahead and introduce it. It’s called the King Grackle Stout, and it is from Texas Beer Co, which is located in a small town Taylor, Texas, that is a little bit east of Austin, and you can get it throughout Texas. They do have it at HEB and a couple of other grocery stores.
I don’t know how much you can get outside of Texas. But it’s a cute little like craft brewery that you can go in, hang out in. They’re also really neat in that their roof is covered in solar and all of their beer is brewed with solar. So they promote that, they plant trees, and do that kind of hippie dippy stuff, and it’s stout, which I love.
Joe, I know you’re a fan of dark beer and so I always get excited when you come on. ’cause I don’t think Chris and Steve like it as much.
Steve: Nope.
Joe: Alright, great. This is just for us.
Steve: Yeah, this is for you.
Joe: Sorry, Steve.
Steve: That’s fine. So the King Grackle says, with notes of chocolate and coffee and a rich smooth finish. This full roasted stout known as the King Grackle boldly. What’s this? It’s kind of hard to read. This is color contrast issue, I guess. It boldly flies above the rest of the flock. Cheers, y’all. So it’s got a, y’all in there.
Amber: Yeah, it is from Texas. Do you guys have like huge flocks of grackles that just hang out around?
Joe: We have a lot of grackles. I mean, I don’t know that I see them in huge flocks, but like it’s a pretty routine thing at various times of the year to have like a dozen of them hanging around in my yard, so.
Amber: Okay. Yeah. So that’s not just a Texas thing, they go up to Minnesota too.
Joe: No.
Amber: And for folks who don’t know, grackles, like a crow or a black bird.
Yeah.
Joe: Yeah, similar to that, definitely. And there’s a nice illustration of the grackle on this can, wearing a crown. It’s, you know, old gender bias there, but so be it.
Amber: So I’ve had some of their other beer. I’ve never had this doubt, so I’m excited to try it.
Joe: You experienced for us for all.
Amber: Yeah, so I followed the rules. I did not get something I had tried before, but I think like, they win. I like their can illustration style and everything.
Joe: It’s pretty!
Amber: Their website’s not super great.
Steve: Yeah.
Amber: If we were giving them an accessibility score, it would not be high.
Steve: I mean, the can’s kind of hard to read ’cause like it’s all metallic. Like the whole can’s got this metallic reflection to it.
Amber: All right, we’re gonna open this up and see what everybody thinks. Joe brought a glass so we can see the pour. How would you describe that, Joe?
Joe: It’s a really, it’s a minimal head. But it’s, you know, it’s got a continuing rise to it, so it’s pretty deep. It’s really dark.
Amber: Yeah, it’s actually growing quite a bit. Even as it stopped pouring.
Joe: I know.
Steve: Yeah.
Amber: Yeah. And it’s got a nice dark color and like a caramel brown head.
Joe: Yeah, so it’s a nice nice caramel brown. I think that’s a good description of the color. The actual beer is, I mean, that is black. I mean, it’s got a bit of brownness to it, but wow, that is dark.
Amber: What do you think, Steve? Are you afraid to try it or are you like, okay, maybe it’ll be fine.
Steve: I mean, I’m not afraid, but I know it’s gonna be nasty.
Amber: I love it. I don’t know.
Steve: I mean, it’s strong on the nose too.
Amber: I think it smells good.
Steve: Yeah.
Joe: The nose to me gives a little bit more like cocoa nibs than chocolate, but, a little bit more bitter.
Amber: Yeah and I get more cocoa, chocolate smell than I get like coffee, which sometimes stouts are too coffee for me. So I kind of like that. All right. I’m gonna taste it.
Joe: Yep, it’s time. Gotta work my way through the head.
Amber: Oh, I love this one.
Steve: It’s not as bad as I thought it was gonna be.
Joe: Steve’s just learning he’s got a bias.
Oh, I do. I fully admit that It’s not bad.
Amber: It’s not heavy.
Joe: No, this is pretty…
Amber: Is your problem with stouts that sometimes they feel too heavy?
Steve: Yeah. Yeah.
Joe: This is good. No it’s fairly bitter for a stout, I think…
Amber: But it has a little bit of a like sweet layer to it.
Joe: Oh yeah.
Amber: But it does leave a little bit more of a hoppy flavor on the end than you might expect. But they do say on their website that it has a hint of tropical hops as well. So maybe it’s like the stout that they tried to make for IPA fans.
Joe: Yeah, it could be. I’m not totally sure what the qualifier there is. Like, is it that it’s got lots of hops taste a hint of which is tropical. ‘Cause I would say this is certainly more than a hint of hops
They are definitely, this is hops, there’s no question. Whether it’s got a tropical hint to it. Honestly, I don’t think I have the palette for distinct hops to be able to even say.
Amber: So I was thinking about this the last time that you came on, I think we tried like a coconut stout.
Joe: Yes we did.
Amber: And I was bummed because I think it was not as coconutty as I would’ve liked.
Joe: What I remember is it had a definite nose then like nothing on the actual palate.
Amber: So how would you compare this? ‘Cause they’re saying tropical hops, I’m like, is that what the coconut is?
Steve: Yeah, I dunno what that means.
Joe: Do they literally mean hops that are grown in the tropics? ‘Cause there are all sorts of different varieties of hops. I’m not familiar with them all. They all have slightly different flavor palates. So they might just mean it’s a particular type of hops if what they mean is it has some kind of tropical fruit flavor, no, that’s not there. And, but…
Amber: I think it’s got like a nice, rich, forward flavor.
Joe: It does, and I wouldn’t want it to have a tropical fruit flavor. That is not a flavor I want in my stout.
Amber: Yeah, definitely not.
Joe: Pineapple.
Amber: So we have this, very technical rating of where you can give things, thumbs up, and of course you have two. So you can, you know, like mix and match if you want, but like, it’s like, thumbs up, thumbs the middle down. Two, one. Where do you land on this, Joe?
Joe: I think it’s a good.
Amber: One sideways and one thumbs up?
Joe: Yeah. I mean, it’s good. I kind of like to have a certain smoothness to stout that I’m not sure I’m really getting here. It’s got a really bright flavor, which is maybe to me a little bit more, it’s a little more IPA ish. It’s probably really just the creation of the hops. It’s fine. It is not, like, this is not a criticism, it’s just like, maybe not what I immediately want out of a stout.
Amber: Yeah. What about you, Steve? Where do you land on this? Would you buy it again or drink it again?
Steve: Well, no, but I mean, I’ll…
Joe: That’s straightforward.
Steve: Yeah, yeah. I’ll rate it. I mean, I kinda give it two thumbs sideways. And as far as stouts that we’ve done it’s definitely, on the upper end of some of the other stouts we’ve done. But the bitterness does linger for quite a while. But I mean at first it’s not bad. Like some of the stouts I’ve drank and they hit you pretty hard right away. And this one’s not bad at first, but it’s that aftertaste that hangs around for a long time, that kind of gets me.
Joe: Yeah, it’s kind of, you know, there’s a reason I don’t really drink, like double IPAs.
Amber: Yeah.
Joe: Yeah, just, I don’t enjoy that.
Amber: Definitely, in the flavor that hangs out, I don’t think it’s just hops. I get like that cocoa nib, cocoa kind of bitterness.
Joe: Yeah. That’s definitely there too.
Amber: And Steve knows, because we’ve talked about this, I like really dark chocolate. Like I have an 85% bar in my desk drawer right now.
Sometimes I’ll have like 90%. And it is really bitter. And the flavor that I think of that stays lingers in my mouth with this is very similar to that. Like it does have that coco underlying flavor.
Joe: Yeah, that cocoa nib. I like the fact that the cocoa nib came out in the nose, but then also comes out on the palate. Like it’s it’s not just, it’s unlike that coconut thing where you’re like, oh, hey, there’s some great coconut nose. I’m gonna enjoy that. No, you’re not. It’s done.
Amber: Like, I definitely like it. I don’t think it’s like my absolute favorite, so I’m not going for that double thumbs up.
Does our beverage rating system need an overhaul?
Joe: So I have to ask a question about the rating system. Is one thumbs up higher or lower than a thumb up with a thumb sideways?
Amber: I think it’s higher.
Joe: Oh, see, I lower…
Amber: You’re like edging towards the middle there. I’m solidly above in the middle.
Joe: I’m taking a thumbs up and I’m adding a middle thumb.
Amber: A half point?
Steve: Oh yeah?
Amber: I don’t know.
Joe: I was thinking of it as like…
Amber: We need to work on this rating system.
Steve: I did two sideways, two thumbs sideways. Wouldn’t that equal one thumb up?
Joe: You know, in waiting you gotta figure like, oh, if any thumb up has to be worth, you know, that’s distinctly positive. Whereas the sideways two middle votes shouldn’t be equal to one high vote.
Amber: Yeah, I dunno.
Steve: I’m gonna, I’m gonna…
Amber: We’re gonna have to figure this out though.
Joe: Ranked choice voting in the beer ranking system so that we can really, you know, be scientific. Then somebody will have to step away and tally those votes, because that’s a complicated.
Amber: So, we’re talking about, and I know I’m pretty sure on this podcast, I have said this for a year, but I swear in 2026, we were going to redo our website.
Joe: Yeah.
Amber: Oh, Steve said yes! You heard it, Joe?
Joe: Yeah.
Amber: And everyone listening heard it. Okay, we’re going to redo our website and one of the things that we’re gonna do is we’re gonna move Accessibility Craft episodes into our website, and I wanna make like the drink rating visible on the front. And so I think we’re gonna have to answer this because we might output thumbs up in the middle, thumbs down with like emojis or something. But it’s gonna be saved as a number.
Steve: Yep. We’ll make it scientific.
It’s
Joe: gonna have to equal something.
Steve: We’re gonna build an application.
Amber: So it’ll become more scientific than it has been. In the very beginning, we were just like, would you buy it again? Yes or no? And then we were like, well, I mean, we need to, you know, rank them a little bit.
We talk about Able Player with Joe!
Amber: Yeah. Well, let’s transition over. Do you wanna introduce our topic, Steve?
Steve: Yeah. We have Joe here today, so, of course I think we should spend some time talking about his Able Player. So, Joe, can you summarize for us, what the Able Player is and why it is a unique media player.
Joe: So Able Player is a JavaScript library for playing video. And it’s a very much an accessibility first product. So an awful lot of media players when they build themselves as accessible, what that really means is all of our controls are, you know, accessible to a keyboard and to a screen reader and you can turn things on and off and you can play it and you know what’s going on.
And that’s pretty much where they tend to stop. It might support captions and subtitles because internationalization is obviously also important. But Able Player is really all about trying to make the media itself as accessible as possible. So it’s just got a ton of additional supports for all sorts of. Really useful features that somebody might need. And it’s honestly the accessibility first nature means it’s prioritizing accessibility.
If I need to make some kind of HTML structural change because I need to improve some accessibility issues, I know that’s going to have, down the road consequences for people who are doing custom CSS and custom styles and whatnot, and tough. Accessibility first, so that needs to be fixed.
And if you have to change your styles, then you have to change your styles. And that’s something that like, you know, we, in the WordPress world, we really fight against being able to do that. And it’s really nice to have a product where it’s like, yeah, that is the priority and everything else is secondary.
Amber: What are some of those bigger gaps that maybe people don’t think about in media and media players? Beyond just, is it a button? The play button?
Joe: Yeah. I mean, there’s a lot of things surrounding like, can you use the scrubber to move forward 10 seconds, to move back 10 seconds? Is it gonna notify you what’s going on and where you’ve changed?
There are things like having options, Able Player has a lot of options so that the user can control things like, you know, the font size and color for captions so that they can adjust preferences, move things around. These are really useful.
And then of course, like there’s the really big features, things that Able Player offers, like synchronized sign language, like generating an audio description from a VTT file, which, very few players have even attempted to do. And certainly like generated audio description is not as good as, you know, actually having a separate video that’s audio described.
But it’s an enormous amount cheaper to produce and it’s a much easier way of getting some audio description into a video that otherwise, like, you made this five years ago, it’s still an important video, but bringing somebody into re-edit it and figure all of that out, that’s a lot of work.
And it supports both. I mean, you can have it set up to use a separate audio described video or just have that as generated from VTT which it will do, via the web speech API.
Amber: Have you ever thought about integrating, and I don’t even know if this is possible, but I’ll be totally honest. A client asked me this earlier today and now I was like, oh, I have Joe here. Maybe Joe has ideas about this or has looked at this. Do you know if there’s any way to integrate with AI to have it, watch videos and then write like a text description of the video?
Joe: I mean, I don’t know one off the top of my head, but I’m sure it’s possible.
I will say that when you’re talking about audio description, I’m seeing that as rife for hallucinations because you’re taking what AI does in terms of interpreting images to like produce alt text and then taking that up a massive scale in terms of the number of actual frames they’re looking at and observing changes in those frames.
And I’m like what is it going to come up with?
Amber: So probably not a coming soon feature in Able Player.
Joe: No. I mean, certainly not in Able Player. No, that’s not coming anytime soon. And uh, I would be interested to see if somebody was working on that and see what it was actually producing. ’cause I feel like that could really get interesting.
Amber: Yeah. Well I’ll have to let you know ’cause I have this on my, I have to research this and get back to the client list, so I’ll let you know what I find.
Joe: No, I have not taken any steps to integrate AI into Able Player. I mean, honestly, that’s just, not anywhere on the roadmap. It’s not something that feels super practical. ’cause when it comes to things like producing captions and that sort of auto transcription stuff, like that’s a solved problem. Everybody’s doing that. There’s no point in my putting a bunch of work when it can generate those files. This is more about an interface and I’m not sure there’s a whole lot of need for AI in the interface.
Like…
Steve: Yeah.
Joe: That should be human determinant.
Steve: Yeah, I think we’ve kind of had some of the same conversations around AI and our plugins as well about, you know, it’s the cool shiny thing to do and you wanna announce this AI feature for marketing buzz or something. But when you’re dealing with accessibility, a lot of times you’re trying to think, does this actually help solve something other than
Joe: Right.
Steve: Marketing buzz, right?
Joe: Right, exactly. And I mean, I’ve done a lot of thinking about AI and how it actually interacts with the process of trying to say, identify problems.
And to me, the basic challenge is when you’re writing a set of test sequences, which obviously you do all the time for Accessibility Checker, you are making very specific decisions about what is this testing for, what is it finding? And they’re gonna be self-consistent. Like it’s always testing the same things. It’s always checking the same things.
When a human is doing it, they’re going to be less consistent because they maybe don’t always remember every single detail. But they can also cover cases that are not covered by those tests. AI is kind of like an untrained user with an incredible amount of automation.
But it has no judgment. If you take it on say a page where there’s a hundred color contrast issues, it’s not gonna use one rule set for all of them. It’s going to use a different rule set for every single test, based on whatever context.
Amber: So there’s no consistency.
Joe: It takes your automated tests, but makes them hopelessly inconsistent.
Steve: Right.
Joe: And I feel like from a service perspective, that’s not doing anybody any good.
Steve: In a player like Able Player or like Accessibility Checker, I think there’s a case to be made for it being an assistant of sorts, but I still think that there still needs to be a human in line and especially in the final application of whatever’s being done.
Cool, so you mentioned that Able Player was a library, so for our guests, can you give a little bit of more clarity around that? ‘Cause I know you have a WordPress plugin of it as well, so I just, can you expand on the applications of it?
Joe: So I mean, it’s basically just a gigantic pile of JavaScript. I think it’s something like 9,000 lines of JavaScript that are doing all of these miscellaneous features. But it can be packaged into context to do playing of various things. I’m aware, I know that obviously I run the WordPress plugin.
There’s also a Drupal add-on for it. Drupal module. I know it’s been incorporated into something that I can’t remember the name of, which is a custom browser used for administering tests. And they use Able Player, which has been like, I’ve had to do some support for them. Because, there are some really weird things that happen with, ’cause this browser is super, super locked down because everything has to be secured so that the user can’t see the answers, can’t inspect anything, can’t leave the browser to go, find answers. It’s a funky tool.
So yeah, I mean, it can be used to play any media within the parameters of what it supports. You know, any common, standard media format hosted locally or YouTube or Vimeo. I haven’t explored supporting any other services because frankly I’ve only got so much bandwidth.
Amber: So on our Accessibility Craft website, we host our podcast episodes on Castos. But I looked into their podcast player for embedding just like the media, the audio player, and it was really bad. So we use Able Player on there, because you can put a source URL and it’ll take it off any URL.
Joe: Yeah. Anything that can just take a direct URL to the file and it’ll just be served by the whatever that host’s file system is. It can handle that. I think the key things about like Vimeo and YouTube is that they don’t provide that. You have to interface through their player APIs which makes things more complicated. It’s definitely easier if you can just get a source, URL.
Amber: So I wanna talk a little bit more about you taking over this project and all that stuff, but we’re gonna have a quick commercial break first, and then we’ll be right back.
Brought to you by Accessibility Checker
Joe: Let’s do it.
Steve: This episode of Accessibility Craft is sponsored by Equalize Digital Accessibility Checker, the WordPress plugin that helps you find accessibility problems before you hit publish. Thousands of businesses, nonprofits, universities, and government agencies around the world trust Accessibility Checker to help their teams find, fix, and prevent accessibility problems on an ongoing basis.
New to accessibility? Equalize Digital Accessibility Checker is here to teach you every step of the way. Whether you’re a content creator or a developer, our detailed documentation guides you through fixing accessibility issues. Never lose track of accessibility again with real time scans each time you save, powerful reports inside the WordPress dashboard, and a front end view to help you track down hard to find issues.
Scan unlimited posts and pages with Accessibility Checker Free. Upgrade to Accessibility Checker Pro to scan your website in bulk, whether it has 10 pages or 10,000. Download Accessibility Checker today at EqualizeDigital.com/accessibility-checker. Use coupon code AccessibilityCraft to save 10% on any plan.
We talk about Able Player with Joe! (Continued)
Amber: So this is a open source project with the GitHub repo and a WordPress plugin. I’m curious what motivated you to take over maintaining and do you do both the plugin and the open source repo?
Joe: Yes. So, yes I do both the WordPress plugin and the open source repo. Basically, I took over everything that the original project creator Terrell Thompson had previously maintained.
And so he had created the original version of the WordPress plugin. And I actually took over the WordPress plugin almost two years ago voluntarily. I just asked him, hey, can I work on this? And that honestly was mostly because we wanted to use it for WP Accessibility Day, and it needed some improvements and changes for us to really be able to do that.
And honestly, the use of it for WP Accessibility Day was a significant part of my motivation for taking over the project because there were things I wanted to do and I wanted to move forward. And I was, trying to track those issues and do them on the GitHub and I could see that nothing was happening.
And so I reached out to Terrell to be Hey, if you want help, I’d love to help this out. And he said, yeah, I’d love to have some help. And then a year passed and nothing had happened and he reached out back to me and said, would you be interested in taking the project over? Because he basically, he just doesn’t have time.
He’s currently the Head of Accessibility for the University of Washington’s web team. I can’t remember the exact title. So, that might not be exactly accurate, but it’s, you know, close enough. And so he’s leading their push to get their Title II ADA compliance in place, which obviously has to be done by April, 2026.
It’s been a really hard push. It’s been really long and he just didn’t have time to maintain it. And so I was like, yeah, I’ll take that over. ‘Cause I really want to improve it. I really like the project and it’s kind of unique in that there are other video players out there that have some of these, at least some of these same features, but they’re pretty much all, like, they may have an open source aspect, but then the more accessibility focused features are part of a paid package.
Amber: Whereas this is 100% free.
Joe: This is a hundred percent free. Now figuring out how to get funding for it is obviously a challenge that I would like to try and address because I don’t know how long I can maintain it a hundred percent for free. It is complicated and have a lot of things I wanna do, but that is part of the challenges of the open source world, figuring out how to fund things.
Amber: Yeah. For sure. I will shout out for people if you wanna see the video player in action. I feel like WordPress Accessibility Day’s archive sites are a really great example.
Like if you go look at 2024, you can find examples where it’s got captions, it’s got transcript, it’s got the synchronized sign language interpretation. Is the being able to move the window around, is that part of Able Player or did you do that special just for us?
Joe: That’s part of Able Player. It’s incredible, some of the stuff that’s built into Able Player. There’s even, there’s a captions editor built into Able Player.
Amber: Oh, I didn’t know that.
Joe: Yeah, it’s not enabled by default. ‘Cause I mean it’s not really useful to most users, but it’s actually it’s intended as a sorting tool. Because if you’re doing the combination of, you have you know, your captions file and you have audio description and you have like a metadata track that is running events. Because that’s kind of one of those cool things, you can have a metadata track that triggers various events during the playback which is kind of fun.
But if you do that, sometimes the timings need to be kind of massaged. So what this will actually do is it’ll generate a combined caption sheet, basically a table that contains all of the captions from everything sorted by time. And then you can just kind of move them around, adjust them, insert more and then you can generate the new caption files from the updated version you’ve manipulated in the browser.
Amber: Wow.
Steve: Wow.
Joe: It’s kind of cool.
Steve: That is pretty cool.
Joe: Like it’s a great way of making sure that your audio description is actually, has enough time to play and that it’s happening at the right time so that it’s like it’s between a break or something rather than like right in the middle of somebody’s sentence. Yeah, it’s cool. It’s a neat tool.
Amber: Not in the WordPress plugin?
Joe: It’s in Able Player. So if you…
Steve: It’s from the front end, right?
Amber: Oh.
Joe: Yeah.
Amber: So it’s possible with the WordPress plugin.
Steve: So when you took over the project, uh, what was that transition process like? I mean, it sounds like it went pretty smooth, and since then, are there any big changes that you’ve made, or are you just getting your feet wet with the code base? How’s that going?
Joe: No I’ve made some key changes. Mostly I was fixing the laundry list of outstanding bugs. There were a number of things of various degrees of significance that were kind of outstanding. But I’ve been starting work on really refactoring the code.
And that’s a big project that’s gonna take a long time. ‘Cause it’s, like I said, it’s thousands of lines and it’s not like I’m deeply, well, I have a much better knowledge of the code now from all the work that I have done. You know, I’ve gone through every single line of the code. I know at least pretty much what’s in there.
But, you know, there’s still lots of stuff that’s kind of mysterious. I will say the hardest thing in the transition has been dealing with code archeology. And that’s where I’ve learned that like the style that Terrell used for development is not great for code archeology. He tended to do…
Amber: I don’t even know what you mean, what is code archeology?
Joe: I need to look at this line of code and try and figure out when was it done and what problem was it trying to solve. It’s basically, I have a bug. It’s with this line of code. I’m not totally sure what this is doing, and I need to try and look at its history to figure out what it was for, what did it replace, what is the goal here? So that I can kind of do a better job of trying to resolve this problem.
What terrell tended to do was an enormous amount of local work that he’d just kind of push all up in one commit.
Amber: Oh.
Joe: And there’s a fairly good number of inline comments, that’ll document things like, I have to do this because of X, that’s not supported by Y. So this is making up for that and that’s useful. But then you’ll get to a line of code where you’re like, okay, I have some kind of a bug here and I don’t know if this is related. I can’t figure out what this is doing. And you go look at the commit history and you’re like, okay, so in the commit that this was added in, there were 1200 lines of code changed.
Yeah. Yeah. Like…
Steve: That’s a no.
Joe: So that’s not gonna work for me. So it’s really, there’s been some of the changes I’m trying to make have been truly difficult because I’m like, I can’t really break things down in a nice, discreet manner to figure out what’s changed.
Amber: Is there any like consulting time he has available where you could just like, message him and be like, explain what you were doing here? Or was he pretty much like, I’m so busy and swamped, I can’t.
Joe: Well, and I have asked him on a couple things, but he had to be honest and say he couldn’t really remember. Because, you know, some of these are things that like, they were committed, you know, seven years ago. A big one was when he added support for Vimeo and like, there’s just so much stuff in that one commit that I’m just like, anything that was from that is, is kind of a black box mystery to me.
Steve: Yeah, architecting for scale and time is definitely hard. And that’s why, you know, your architectural structure at the beginning is super important and why breaking things off into as small of bite sizes pieces as you can. I mean, I can’t tell you how many times I have to go to my developers and be like, Hey, it’s the end of the day, I haven’t seen any commits. Like, don’t keep this stuff on your local machine.
Joe: Yeah, please. I don’t care if it breaks things. That’s fine.
Steve: Yeah.
Joe: We’re in alpha. Yeah, I mean, and it’s not that bad ’cause the code is mostly fairly well organized. You can, everything’s kind of broken out into separate files and that’s, it’s manageable, but it is, there’s some stuff that’s really complicated and desperately needs some significant refactoring that I have taken a couple stabs at, and I’m like, yep that’s confusing. Okay. We’ll figure that out. But you know, I, the main things I’ve been focusing on is fixing some bugs. I’ve added a couple of key features, like it didn’t previously support synchronized ASL using YouTube.
You could only do it with local files. And so I added the ability to synchronize with YouTube because we needed that on WP Accessibility Day. And honestly it just makes sense. There were some serious challenges in synchronization when you’re working with one local file and one remote file, which is what we had because they’re coming from different servers, they’re loading at different paces so they didn’t synchronize very well. So that fixes that a lot. And then I did a lot of redesign work, a lot of modernizing the CSS. Making it a little easier to skin if people wanted to make changes like that.
And this is actually not a major problem, this mostly just got rid of thousands and thousands of linting errors. All of the translation files were stored as .js, but all they were was a big JSON object. And I just changed them to be .json files and that, because the JSON and JS have different linting rules, it just took away thousands and thousands, which just made, cleaning things up a lot easier.
Amber: When you have a project that’s a JavaScript library that could theoretically be used in all kinds of different places, do you have to take special things into consideration? Like, this has a WordPress plug that you maintain, but you mentioned someone else has a Drupal.
Joe: I do like loop the Drupal developers into the process, whenever I’m preparing, like when I’m in beta, I’ll be like, Hey, here’s the beta. Let me know if you encounter any problems. It doesn’t really have a profound impact though because the code is pretty self-contained.
It doesn’t depend on a lot of external factors. Like there’s some things I’m doing in the WordPress plugin, which make pretty significant changes to things that WordPress produces. Like, you know, if you’re just using the WordPress video block and that block has track support for adding audio description tracks, but doesn’t have any support for producing them, you can turn on a feature in the WordPress plugin that will just map Able Player over your WordPress video block. And it’s fine, it’ll play that now.
And you don’t, it doesn’t, it’s invisible. You don’t have to, you don’t see any changes in the WordPress video block. Use it exactly as it’s designed, but it’ll be played with Able Player.
Amber: That’s really neat.
Steve: It sounds like that would be a integration for another plugin, like for one of our plugins. That we, I’m just, that would be kind of neat to have an Accessibility Checker, right? You know, we flag videos for certain reasons and if there’s a solution for that, you can be like…
Joe: I mean…
Amber: Maybe you should install Able Player?
Steve: Yeah. Or we could auto install it, and they can apply it. Yeah, very cool.
Joe: Yeah, I mean, I know, Amber did a lot of review of the video block a couple of years ago and, you know, noted that like it has all this support for adding all of the different types of tracks that video, the element actually supports, but native players can’t do anything with most of them.
Amber: Yeah, the WordPress block is great, but the native browser players are kind of crummy. Because we flagged this a bunch in audits on websites. A total tangent right now, but like native elements, a lot of developers think like, oh, if I the native browser, that’s the best.
And in some cases, yes, but in other cases, no. For example, form validation, yeah, it’s super annoying if you use browser native form validation, because what happens is it airs on the first field and it only tells you the first field is aired. And then they would fix that, and then they hit submit again.
And then it’s like, oh, here’s the third field that also had an error. And then like if you have 10 errors on a form, you have to submit 10 times to get told all of them. You know? And as opposed to if you write your own custom validation, you can tell them, here are all of your 10 errors.
Joe: I think it’s an interesting thing about like native HTML because we all, we do actually tell people all the time that, yeah, you should use native semantic elements. This is what you should do. And it’s like, but there’s also a judgment bar there where you’re like, but some of them are actually not very good.
Amber: Yeah, just because it’s a native video player doesn’t mean it’s the best one.
Joe: And not only that, it’s not even necessarily that it’s not accessible like in some particular browser. It’s like, well, it’s inconsistent. It has different support across every browser, and that’s one of the biggest reasons for trying to use some kind of video player library is now you’ve got the same player on all of your browsers within some limits. Because like, iOS is weird.
Amber: So that makes me wonder, what are some of the biggest implementation mistakes that you see on WordPress websites when people are embedding media?
Joe: I mean, honestly, these are probably like the three most expected things. I don’t know that there’s gonna be any surprise here, you know, it’s just not having captions or assuming that auto captions are good enough and not doing anything more. There’s some interesting things about the YouTube API, by the way, about auto captions. The YouTube API does not consider auto captions to be captions. So the API will not fetch them.
They’re not captions, they’re just kind of a make do until you have something real. But that’s, anyway, that’s a bit of an aside. The other one is, not having transcripts. The number of times, like I’ve gone to somebody’s, you know, to some podcast they’ve posted, and I’m like, there’s no way in hell I’m gonna watch this, but , is there a transcript I can read?
And the answer is no, and I’m done. I’m gone. Sorry. And then honestly, using really crappy video players. I mean, you know, both Vimeo and YouTube are at least fairly respectable on accessibility. They will regress every once in a while, which can be a little weird, but they’re basically at least, okay, they offer the things you need.
But wow, there are a lot of players out there that are not okay.
Amber: Yeah. From like different third party video hosting services?
Joe: And I guess, if I’m gonna throw in a fourth one, it’s going to be autoplaying videos that you can’t pause. If you like, use the cover block and put in a background video, you know, that doesn’t…
Amber: And hide the controls.
Joe: Yeah. Well, I mean, they’re hidden by default in some browsers.
Steve: They’re not, yeah.
Joe: You know, some browsers like, is it Firefox that will still allow you to focus the player and then you can get to the controls, even if it’s, even if they’re hidden? But most browsers, like they’re just not gonna be there.
I added something to WP Accessibility so that it injects a pause button on any auto playing videos. Like the problems with video tend to be really obvious. I mean , I’m fully disregarding like content problems. ‘Cause that’s really a completely separate class of issue and not one that Able Player can really solve. That’s an idea, I’d use AI to analyze the video and be like, you know, this violates the, three flashes rule, so it just won’t play.
Steve: Yeah.
Amber: That’s the AI that you would add.
Joe: Yeah. There we go. That’s all. It’s checking.
Amber: There’s no captions. Sorry. This video can’t be played.
Joe: Yeah, so it’s not accessible to everybody, it’s not accessible to anybody.
Steve: There you go.
So I don’t know how far you’ve gone down the rabbit hole of like all the page builders and how they implement video and all the plugins, the many ways that video can be implemented in WordPress websites. I mean, would you say that everybody should use Able Player over those players or are those sufficient? Like should we be hounding them to use the Able Player library in their page builders?
Joe: Here’s what I’m gonna say is I don’t, in the current state of the Able Player base code, I wouldn’t really encourage people to do that. I think it needs to be a user choice, and that’s mostly just because it’s so old.
And it really needs to get through a round of updates and refinements before I think that. And that’s especially just, I feel like I’d be pushing people to include something that they would look at the code and they’d be like I don’t know if I wanna do that. I’m like, right now, for example, one of the big things that’s on my roadmap to fix in Able Player is it currently is dependent on jQuery.
And I want to rip that out. I don’t want it to be dependent on jQuery. That totally makes sense when it was first built between 2012 and 2014, like at that time, there’s a ton of stuff that you needed that for. You don’t need it anymore. And now it’s this, it’s a pretty significant dependency that I don’t want to force on people.
And that’s gonna take a long time. Like I’m gonna do that in stages. My starting point is I wanna slim it down so that it only is dependent on jQuery light which isn’t gonna impact any WordPress sites because they don’t really in queue jQuery light, but it just simplifies the problem. It says, okay, now I’ve resolved these things, which is mostly gonna be like Ajax and deferrals.
I mean, that’s the main things that’s gonna change. But it just, it means I can take tackle smaller sets of problems at a time.
Steve: Yeah, totally. I know in a lot of websites, we’re definitely looking like when we’re dealing with performance problems, we’re definitely trying to evaluate, Hey, can we turn jQuery off on this page? Right? So it can render faster.
Joe: Yeah. I mean, it’s still a pretty substantial package and an awful lot of what it does is really not needed. I’ve been practicing that by converting all of my plugins front end code to be vanilla you know, taking smaller chunks to be like, okay, let’s just do this.
And then I will get a better idea of what some of the problems I might encounter when I tackle this will be so, like WP Accessibility is now jQuery free and next version of My Calendar will be jQuery free. You know, one thing at a time.
Amber: What do you think your timeline for actually removing jQuery from Able Player would be?
Joe: Well, I do have a timeline. I mean, what I have, what I set is what version I’m going to remove it in. Actually this is what I feel is really important from a kind of having a removals and deprecation policy in software is like, dates aren’t actually all that useful. But versions are, and very being able to tell people way in advance that this is the version in which this will go away.
Steve: Mm-hmm.
Joe: And then you could just be really upfront, really clear, and if you need to delay that version a month so that you can actually finish it or give people more time to try it out or whatever, fine.
But it’s upfront and clear. This is, to me, this is one of the biggest mistakes WordPress makes in core development is it is just never willing to just say we are going to remove this , in this release. Period. Things do get removed, but they never get removed with like lots of forethought and advanced planning and commitment.
They get removed, the company finally decide, oh, I think it’s time to remove this now, so let’s just do it. And I’ll freely admit. I have done that 6.9, so when 6.9 comes out there is something that I removed.
Steve: Well, I mean, on the plugin side we’ve adopted the three versions back. You know, we’re support three versions back, three major versions back.
And you know, after that we won. I mean, we were really coding ourselves into a corner trying to support all the way back from the point when the plugin was made, it was like five point something and we’re trying to like, we want to use these more modern database placeholders so that the PHPCS stops hollering at us.
Joe: I totally wanna too. Yeah.
Steve: Well, jumping back to 2026, let’s take a time machine back into the… you’ve kind of touched a little bit on what you’re planning in the future, but like, are there any other like cool features that you have on your roadmap that you’re planning on doing?
Joe: I’m not currently focused on features. I’m really focused on trying to improve and polish what already exists to try and modernize because that is gonna be a big thing.
And honestly, the more I add things, the harder it is to really assess whether like I broke something by making a refactor or broke it by adding this other feature. And honestly it, it has such a strong feature set. Terrell put an enormous amount of energy into building out features. So it’s got lots of really amazing, great features. What it needs is polish. So right now that’s my priority. There are features that I think could stand to be developed. You know, a lot of them are relatively minor. Like, you know, the ASL support doesn’t extend to Vimeo. Well, I mean, that seems pretty doable.
I should be able to do that. But yeah, really I’m much more focused on polish at the moment. There is a thing that I feel like it’s a relatively commonly requested feature that I have absolutely no background in. That, I think it would be cool, but I don’t know anything about it, and it’s about supporting streaming video, and I’m just like, yeah, I don’t really know what I would need to do to enable that. So it’s definitely a back burner thing.
Amber: Have you ever tried to put a YouTube URL for a YouTube live stream into it just to see what would happen?
Joe: I mean, I kind of assume that would work because it’s running through the YouTube API, I mean, it’s really the YouTube player with just some custom controls overlaid on it. So, maybe.
Amber: Interesting test, maybe I can test that the next time Steve does a live stream for our change log.
Joe: Oh, yeah. We can find that out.
Amber: So, okay. I have kind of a final question and then we definitely have to wrap up. I wanna know a little bit about how people can contribute to this or help support the project, whether that’s through code, funding, documentation, translations, any of those things. And I’m especially interested in when we redo our website in 2026, notice how I phrase that.
Steve: Maybe.
Amber: I want to start using Able Player, but one of the things that I know that we’re going to wanna do is re-skin it, right? How do people help support this project and where does stuff go?
Joe: So I’m gonna start kind of backwards and go back to the front. I do want the default skin to be pretty basic. Like it’s, the intention is that, yeah, you can skin it. And one of the things that I really heavily changed in this most recent release is transforming all of the color to color variables.
Just to make it a lot easier to just skin it like it’s now, it’s, I don’t remember, it’s like 19 color variables and that can just do the entire plugin or entire player. So that is one thing. But it’s all skinnable. It’s all just CSS and HTML. There is a bunch of like, positioning stuff that’s being applied in JS and I am gradually stripping all of that out.
Because I don’t think any of that should be done in scripting. Like maybe there’s a few cases where it needs to be in a particular location, but mostly I just don’t want that because it just, that just makes skinning harder. If things are not gonna be where you think you put them. So, yeah.
Yeah, that’s definitely a priority. One thing I did have in mind for the WordPress plugin is actually having selectable skins so that there’s just a set of like four or five that you can just swap between and then tweak from there. ‘Cause one of the things about changing that into CSS variables is that also means I can create an interface for managing those CSS variables.
So I can have skins that are color that don’t change the colors, but just change kind of the other layout aspects and tweak those. One of the hardest things though, is actually trying to maintain the control size rules, but also be attractive.
Otherwise, I mean, so in terms of supporting the plugin you know. Testing is always valuable because I am working on a relatively aggressive timeline. I’m trying to get a new release out every three months which, you know, working by myself unfunded is pretty aggressive. And that does mean I really depend on people actually installing the betas and working with them.
There’s a reason I keep installing the beta on WP Accessibility Day. It’s because I get to see, okay, did I cause myself any problems? So, you know, that’s really valuable. Code contributions, especially when it comes to this whole process of removing jQuery support. That’s gonna be complicated. I mean, there’s a huge amount of stuff there that’s really dependent on just everything as a jQuery object and I need to change everything into elements.
And so like, yeah, it’s gonna be a, that’s gonna be a process. And it would be really great to have help with that. And obviously there’s funding. If anybody wants to become a new GitHub sponsor for me with the specific idea that they’re funding Able Player, I would love that. Currently I have earned absolutely nothing from it and have no monetization of any kind.
And obviously that’s got limitations for sustainability. I can only go so far.
Amber: Where can they find you on GitHub, Joe, if they wanna sponsor you?
Joe: Well, you can find me at GitHub.com/JoeDolson. You can also go to JoeDolson.com/Donate, where there’ll be a link to my GitHub sponsors page and also a link to PayPal where you can just make a direct donation to help support me.
So, I would certainly greatly appreciate all of that. Any support you can give is really valuable. You know, I do have a reasonable level of sponsorship to help contribute to WordPress, but that does nothing to fund Able Player. And I would love to be able to put more time and attention into it.
Amber: Yeah.
Steve: Awesome. Well, it’s always a pleasure Joe, to have you on the podcast and enjoy a nice stout beer and to hear about all the hear about all the awesome work you’re doing. We appreciate it.
Joe: Thank you so much.
Amber: Thank you.
Chris: Thanks for listening to Accessibility Craft. If you enjoyed this episode, please subscribe in your podcast app to get notified when future episodes release. You can find Accessibility Craft on Apple Podcasts, Spotify, and more. And if building accessibility awareness is important to you, please consider rating Accessibility Craft five stars on Apple Podcasts.
Accessibility Craft is produced by Equalize Digital and hosted by Amber Hinds, Chris Hinds and Steve Jones. Steve Jones composed our theme music. Learn how we help make thousands of WordPress websites more accessible at EqualizeDigital.Com.

