Hey all, it’s been a little while since I’ve posted a blog about where we are with Project One. Let’s chat.
One Step Forward, Three Steps Back
It’s almost been a whole month since I started this project. Quite a lot of time has been put into it in between work and life, but I’m pretty proud of where it’s at currently. One thing that I’ve ran into in the last two weeks is trying to nail down the Scheduling.
You wouldn’t think that just filling in a “schedule” would be such a hard task, but when you think about how I wanted this to work, it’s self inflicted frustration! I’ve said from the beginning that I didn’t want traditional commercials in the sense that you would watch part of a TV episode or movie, then have commercials interrupt the experience. However, I wanted to take on the challenge of having a few channels where commercials would essentially “fill in the gap” between episodes or movies. You might see some retro commercials, a music video, a cartoon, etc, but it doesn’t last long as the next episode or movie is coming right up.
Trying to wrap my head around this and get things to fit into a schedule was pretty tough. I would have to say that I’ve re-written my code a good 15-20 times by now, just trying different concepts and testing the results.
As of today, I feel that I’ve got scheduling in a good place; the code just needs to be cleaned up and tested a little further.
The Scheduler can now take in Channel Definition files and properly fill in a 24 hours schedule, whether or not you want commercials or just “back to back” content. This also allows me to have multiples of a channel, like Action or Comedy, having one with commercials and the other without.
Reminders about Reality
In the midst of all the scheduling stuff, I had to remind myself of the reality in which we would be using this device. We rarely ever watch TV during the day; our habits are watching some TV past 8PM, maybe watching a movie late into the night, or just having something playing and falling asleep to it. This thought made me realize that I need to stop thinking about it in the sense of scheduling content for just today, midnight to midnight. What if I just picked a time early in the morning, like 4AM, and scheduled to ~24 hours later? This idea alone is what got me over the hump on getting consistent, accurate scheduling.
We don’t plan on leaving this on for more than a few hours, so having it build a new schedule on each boot seems more ideal for what we want. I may toy with having it build out schedules for up to 48 hours and storing it in a SQL DB, however, it only takes around 30-45 seconds to process and produce a schedule for each channel. It may just not be worth it at this point.
Scheduling now works on a 4AM-4AM basis, a full 24 hours of programming. I’ve also managed to output a simple HTML page that has all channels and their schedules on it. Very handy when you are making sure things are where they need to be.
I think now is a good time to leave the scheduling piece alone and start working on other things.
If you’ve seen the https://www.youtube.com/watch?v=luxFdsAkG80 video, you’ll notice that this guy built a custom PCB board with a knob and mini-LCD display to show the channel logo at all times. While this is cool, I think I can do it in a more simple, subtle way. I’ve learned that VLC has two neat abilities: a Marquee and Logo overlay. Currently, for debugging purposes, I have the Marquee (text overlay) set to the current channel number, so it will be visible for about 5 seconds, then disappear. I’m not sure if I’ll keep this around or not, because each channel will eventually have a small, transparent logo in the bottom right corner, identifying the station.
I still want to have some kind of video overlays, saying things like “Coming Up: More Friends” when you get 80% through an episode.
Also, I did some tests with MoviePy last week to try and generate a custom 10 second video clip with items from a generated schedule. It took about 1 minute to create the clip on my M1 Macbook Air, so needless to say, it would probably take 10x longer on the Pi. Again, I’ll have to test this out.
One thing that I experimented with this last week was using a USB-C Video Capture dongle with my iPad Pro. This allowed me to use my iPad Pro as a display for my Raspberry Pi. I even bought a simple USB-C hub with power passthrough so I could charge it at the same time. Unfortunately, after about 30 minutes of testing, I found that not only could my iPad NOT keep up with charging, but it was getting pretty hot to the touch. I’m not risking my iPad Pro for that.
So it’s back to the original plan: Get an portable monitor. It actually came in today but I forgot that I don’t have the right adapter to get the Pi connected from Micro-HDMI to Mini-HDMI. That should be here by tomorrow. The cool thing is that this 15" portable monitor is as light and thin as my iPad, so we will see how that turns out.
I’ve also started thinking about the physical enclosure a little more but I don’t have any updates to share on it at the moment.
Stay tuned as more updates are coming soon!