Automattic / pocket-casts-ios

Pocket Casts iOS app 🎧
Mozilla Public License 2.0
1.65k stars 129 forks source link

Transcripts - Phase 1 #1848

Closed SergioEstevao closed 1 month ago

SergioEstevao commented 3 months ago
### Tasks
- [x] Database data structure
- [x] Network code to retrieve the transcript files and store them locally https://github.com/Automattic/pocket-casts-ios/pull/1955
- [x] Parse data in Transcript file and implement in memory data structure
- [x] Implement UI component to show transcript synced with position of AVPlayer
- [x] Search on single transcript https://github.com/Automattic/pocket-casts-ios/pull/1982
- [x] Fix the logic to check if an episode has a transcript (sometimes when opening the player it doesn't update) https://github.com/Automattic/pocket-casts-ios/pull/1931
- [x] Ensure it works while offline https://github.com/Automattic/pocket-casts-ios/pull/1955
- [x] Format HTML, leave only text (strip tags) #1941
- [x] Check if transcript is empty and show appropriated error message #1944
- [x] Disable scroll on sync until we get a way to to resync out of sync scripts.
- [x] Accessibility - https://github.com/Automattic/pocket-casts-ios/pull/1961
- [x] Implement analytics https://github.com/Automattic/pocket-casts-ios/pull/1994
- [x] Fallback to other transcripts types provided in feed, if main preference is not working ( empty, corrupt, etc..) https://github.com/Automattic/pocket-casts-ios/pull/2022
### UI
- [x] Add initial transition in the player #1899
- [x] Add the already created VC to the container in the player https://github.com/Automattic/pocket-casts-ios/pull/1909
- [x] Style the Transcript font https://github.com/Automattic/pocket-casts-ios/pull/1961
- [x] Add search controls https://github.com/Automattic/pocket-casts-ios/pull/1953
- [x] Update shelf icon and shelf action https://github.com/Automattic/pocket-casts-ios/pull/2004
- [x] Display error messages in styled way and with translated text https://github.com/Automattic/pocket-casts-ios/pull/2007
- [x] Add speakers info https://github.com/Automattic/pocket-casts-ios/pull/2012

Out of scope:

rviljoen commented 3 months ago

@SergioEstevao Awesome to see work on this feature! One thing to check is that your implementation caters for Dynamic Ad Insertion (DAI). I know Apple Podcasts handle it correctly, so there must be a solution to sync the transcripts to different audio file lengths (due to DAI).

leandroalonso commented 2 months ago

so there must be a solution to sync the transcripts to different audio file lengths (due to DAI).

This is quite complex, to be honest. Not only due to DAI but also due to dynamic intros (which can be pre, mid, or post-roll) and we also have Transcripts where the content of a dynamic ad is in text form — and the ad might not be in your delivered file.

We've been discussing possible solutions to this though.

rviljoen commented 2 months ago

@leandroalonso Yeah, it's a tough one! Here are some ideas:

https://blog.steno.fm/dai-transcripts

https://blog.snipd.com/snipds-solves-out-of-sync-transcripts-and-audio-problems-caused-by-dynamic-ads-bc869e2755b3

leandroalonso commented 2 months ago

Thanks for sharing it @rviljoen!