-
Notifications
You must be signed in to change notification settings - Fork 3
Description
In the last few days, I've discovered a new major problem for CritRoleSync: Advertisements have become much more dynamic than before (compare #6). This issue seems to apply only to the newest podcast feed (Critical Role; C2E20 and later).
Every time a user tries to stream or download a podcast episode, their device uses a URL published in the podcast feed to access an MP3 file. I discovered that this published URL always redirects to a different address, and -- here's the rub -- the new target URL changes frequently and serves up a different version of the file when it does. Different versions contain different ads and have different durations, making CritRoleSync's synchronization timestamps inconsistent for users and very difficult to debug.
I have tried investigating what factors may influence which version of the MP3 file is served to the user. Some episodes appear to be affected more regularly than others. Changing the User-Agent string used in the header of the HTTP request (which contains information about the web browser and operating system of the device) frequently affects which file version is served. Even when the User-Agent string is fixed, the file version sometimes changes for other reasons. I am guessing this may be related to how much time has passed since the last request, or perhaps it depends on the user's IP address or geographic location (which can be tested using a VPN). It's possible that, on top of these factors, there is randomization as well. Without insider information on how the file serving algorithm works, this is very difficult to analyze.
My automated GitHub Actions system for archiving the podcast feeds and checking for differences (archive-podcast-feeds.yml) can detect changes in the published URL. However, the URL redirection changes I'm describing here are entirely opaque to this automated system since they happen only when the user tries to access an episode.
All of this is very bad news for CritRoleSync. Unlike #6, where ads seemed to be changed systematically for all users, only on rare occasions, and always with podcast feed updates indicating the changes in published URLs and durations, this new issue is much more problematic for CritRoleSync. If different versions of the MP3 files with different ads and durations are being served to different users at the same time, there may be no way for CritRoleSync to predict which version a user is listening to, and so there will be no way to provide precise synchronization timestamps. Approximate timestamps could likely still be provided, with an inaccuracy of perhaps a couple minutes.