-
Notifications
You must be signed in to change notification settings - Fork 290
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cache videos #1717
Comments
How will cached videos affects storage, as we know cached images can stack up storage space quickly. |
On Wed, Nov 15, 2023 at 09:41:49AM -0800, alltheseas wrote:
How will cached videos affects storage, as we know cached images can
stack up storage space quickly.
They would be handled just like our current cache eviction logic, after
one day they get deleted.
We might have to do something custom here though, since we are not using
kingfisher for videos.
|
On Wed, Nov 15, 2023 at 09:28:58AM -0800, Daniel D’Aquino wrote:
This is a concern in terms of mobile data/bandwidth usage. If we cache
videos, we might be able to reduce data usage.
yeah this is pretty bad and should be high priority to fix
|
Related to low data/cellular mode #919 |
If this is a large ticket, maybe we can break it down into smaller parts and convert this one into a tracking issue? |
The only meaningful way I currently see to split this ticket is by splitting it into progressively better cache versions. As of now, I know 3 ways of implementing this cache:
|
@jb55, I have a draft and a closer understand of this technique now. Not fully functional yet, but I think this is doable in the short term |
On Mon, Apr 08, 2024 at 11:07:10PM GMT, Daniel D’Aquino wrote:
> 3. **The `AVAssetResourceLoadingRequest` method:** We tap into the `AVPlayer` loader and manually load the bytes for them and direct those bytes to the cache as well. This might be the most efficient as it would enable us to do partial cache downloads
>
> * I am currently studying and experimenting with this in hopes that it will be easier than troubleshooting whatever obscure issue is on (2), and has the highest payoff
@jb55, I have a draft and a closer understand of this technique now. Not fully functional yet, but I think this is doable in the short term
ok great, this sounds like the right way to do it
|
Created a ticket to address any remaining video loading issues: #2181 |
This commit brings significant improvements to the video cache feature. Previously, the cache would merely download the video when requested, in parallel with AVPlayer which also triggers a video download. The video cache has been updated to tap into the AVPlayer loading process, removing the download duplication. Here is how that works: 1. The player requests an AVAsset from the cache. 2. The cache will return a cached asset if possible, or a special AVURLAsset with a custom `AVAssetResourceLoaderDelegate`. 3. The video player will start sending loading requests to this loader delegate. 4. Upon receiving the first request, the loader delegate begins to download the video data on the background. 5. Upon receiving these requests, the loader delegate will also record the requests, so that it can serve them once possible 6. The loader delegate keeps track of all video data chunks as it receives them from the download task, through the `URLSessionDataDelegate` and `URLSessionTaskDelegate` protocols 7. As it receives data, it checks all pending loading requests from the AVPlayer, and fulfills them as soon as possible 8. If the download fails (e.g. timeout errors, loss of connection), it attempts to restart the download. 9. If the download succeeds, it saves the video to the cache on disk. Closes: #1717 Changelog-Added: Add video cache to save network bandwidth Signed-off-by: Daniel D’Aquino <[email protected]> Link: [email protected] Signed-off-by: William Casarin <[email protected]>
This commit brings significant improvements to the video cache feature. Previously, the cache would merely download the video when requested, in parallel with AVPlayer which also triggers a video download. The video cache has been updated to tap into the AVPlayer loading process, removing the download duplication. Here is how that works: 1. The player requests an AVAsset from the cache. 2. The cache will return a cached asset if possible, or a special AVURLAsset with a custom `AVAssetResourceLoaderDelegate`. 3. The video player will start sending loading requests to this loader delegate. 4. Upon receiving the first request, the loader delegate begins to download the video data on the background. 5. Upon receiving these requests, the loader delegate will also record the requests, so that it can serve them once possible 6. The loader delegate keeps track of all video data chunks as it receives them from the download task, through the `URLSessionDataDelegate` and `URLSessionTaskDelegate` protocols 7. As it receives data, it checks all pending loading requests from the AVPlayer, and fulfills them as soon as possible 8. If the download fails (e.g. timeout errors, loss of connection), it attempts to restart the download. 9. If the download succeeds, it saves the video to the cache on disk Closes: #1717 Changelog-Added: Add video cache to save network bandwidth Signed-off-by: Daniel D’Aquino <[email protected]> Link: [email protected] Signed-off-by: William Casarin <[email protected]>
Opened this again due to video cache revert |
At some point we investigated whether or not videos are cached, and unfortunately it seems like they are not (See this comment).
This is a concern in terms of mobile data/bandwidth usage. If we cache videos, we might be able to reduce data usage.
The text was updated successfully, but these errors were encountered: