Commit graph

1101 commits

Author SHA1 Message Date
Stypox
e09add8704 Instantiate media session and connector in PlayerService
This changes significantly how the MediaSessionCompat and MediaSessionConnector objects are used:
- now they are tied to the service and not to the player, and so they might be reused with multiple players (which should be allowed)
- now they can exist even if there is no player (which is fundamental to be able to answer media browser queries)
2025-02-16 21:40:13 +01:00
Stypox
ce16c542a2 Have PlayerService implement MediaBrowserServiceCompat
Co-authored-by: Haggai Eran <haggai.eran@gmail.com>
2025-02-16 21:36:59 +01:00
Stypox
f0dcb0f8f8 Drop some assumptions on how PlayerService is started and reused
Read the comments in the lines changed to understand more
2025-02-15 17:48:19 +01:00
AudricV
828c9ce100 Adapt YoutubeHttpDataSource to extractor changes and improve requests
Always use POST requests and the same body that official HTML5 clients
use for a while.
2025-01-31 22:50:10 +01:00
Thompson3142
919c590e77 MainPlayer/PopupPlayer: Use system settings for subtitle size
This will use the exact subtitle sizes the user requested, both for
the main and the popup player. They will always be the same fraction
of the video, even if the popup player is resized.
2025-01-21 17:23:08 +01:00
Thompson3142
fa0a009f1a Removed call to setRecovery() entirely 2024-11-24 22:12:25 +01:00
Thompson3142
ac69235ae7 Fixed player resuming from start when clicking on a timestamp 2024-11-21 22:42:42 +01:00
Thompson3142
75b4cf6432 Formatting changes (back to original) 2024-10-27 14:38:25 +01:00
Thompson3142
bba9b2b3b4 Update comment
Co-authored-by: Tobi <TobiGr@users.noreply.github.com>
2024-10-27 14:17:32 +01:00
litetex
2c2904d59c Replaced `Icepick with Bridge and Android-State`
* IcePick fails on Java 21 (default in Android Studio 2024.2)
* Bridge is the most modern alternative that is currently available. It is backed by ``Android-State`` and can be configured with various frameworks
* In the long term this should be replaced with something better
2024-10-23 21:28:07 +02:00
Thompson3142
2ffc7b9d95 Fix seekbar preview crashes (#11584)
Fixed crashes from recycled bitmaps by creating real copies of bitmaps if necessary + some minor refactoring
2024-10-10 10:32:06 +02:00
Stypox
40393d947d Merge branch 'master' into dev 2024-07-15 10:17:27 +02:00
Stypox
e1f9be0e64 Fix NPE in MediaSessionPlayerUi while destroying player 2024-07-11 09:41:33 +02:00
Stypox
69a8fc12f7 Migrate to non-transitive R classes 2024-03-29 00:17:13 +01:00
Stypox
f26e8444ef Allow play/pausing from notification when buffering
This change is in line with a recent change in how the play/pause button behaves in the player ui: if the buffering indicator is shown, it's still possible to toggle play/pause, to allow e.g. pausing videos before they even start.
This change was needed because on Android 13+ notification actions can't be null, and thus the buffering hourglass action wasn't shown.
2023-12-29 16:18:26 +01:00
Stypox
24eb97d5c1 Do not update notification actions if nothing changed
This should avoid costly updates of the media session.
2023-12-29 16:16:45 +01:00
Stypox
48399948bc Implement notification actions via MediaSessionConnector on Android 13+ 2023-12-29 15:54:15 +01:00
Stypox
23bf10ab04 Extract NotificationActionData from NotificationUtil 2023-12-29 15:54:15 +01:00
Stypox
368b9649d7 Allow each notification slot to contain any possible action 2023-12-29 15:54:15 +01:00
Isira Seneviratne
bfabffa7c2 Bump compileSdk to 34 2023-12-23 11:38:32 +01:00
TobiGr
2bad4c50f5 Fix crash with disabled thumbnails when trying to play a stream 2023-12-10 15:12:38 +01:00
Stypox
dacec68dc8 Merge pull request #10577 from AudricV/fix-npe-play-queue-audio-track-menu
Fix crash when building the play queue audio track menu if the player is null
2023-11-16 09:01:11 +01:00
AudricV
c1fca2f30e Restore player service start handling before player UI separation
This behavior was present before 0.24.0 and the player UI separation and
avoided crashes for which their exception contained
"Context.startForegroundService() did not then call Service.startForeground()".

Some player nullability checks have been also added, and the player service is
now stopped when it has been started from a media button and there is nothing
to play.
2023-11-15 23:21:20 +01:00
AudricV
be01dccf73 Fix crash when building the play queue audio track menu if the player is null
As the player can be null in some cases, we have to make sure that the player
is not null, by using Optionals on the player itself instead of its methods
returning Optionals.

If the player is null, the play queue audio track menu will now be hidden.
2023-11-15 21:45:56 +01:00
Stypox
873e10c957 Fix possible NPE in PlayQueueNavigator 2023-09-22 10:14:44 +02:00
Stypox
4164bf36f6 Implement better image selection strategy 2023-09-22 10:14:44 +02:00
Stypox
a6a7c2271a Add image quality preference 2023-09-22 10:14:43 +02:00
Stypox
46109ff3b9 Support obtaining multiple images from the extractor 2023-09-22 09:57:33 +02:00
TobiGr
f4f2a8ed73 Improved accessibility of player interfaces 2023-09-21 12:20:00 +02:00
TobiGr
ce58a60397 Add comments and annotations 2023-09-20 15:41:21 +02:00
TacoTheDank
2d5d209d6c Replace MathUtils.clamp with Kotlin coerceIn 2023-09-19 16:32:37 -04:00
TobiGr
60a97b0486 Apply review
Co-Authored-By:  Audric V <74829229+AudricV@users.noreply.github.com>
2023-09-18 23:22:32 +02:00
Stypox
43097e4486 Update NewPipeExtractor and adapt imports 2023-09-18 23:22:32 +02:00
Stypox
aa4ec2f39e Channels are now an Info
The previous "main" tab is now just a normal tab returned in getTabs().
Various part of the code that used to handle channels as ListInfo now either take the first (playable, i.e. with streams) tab (e.g. the ChannelTabPlayQueue), or take all of them combined (e.g. the feed).
2023-09-18 23:22:32 +02:00
AudricV
9ef0b6265a Show play queue button in main player when there is one stream 2023-08-30 19:45:53 +02:00
TobiGr
387a42316a Fix some sonar warnings and make some smaller improvements 2023-08-14 23:09:50 +02:00
J-Stutzmann
f624228500 Made audio-focus calls respect mute state. 2023-08-02 23:44:23 -04:00
TobiGr
ad8d153808 Ignore false positive inspection 2023-08-02 20:44:30 +02:00
AudricV
2fa5019a85 Refactor Player.useVideoSource logic and improve its comments
- don't check for isAudioOnly == !videoEnabled, as this prevents enabling again
video and text tracks renderers in some cases;
- when reloading play queue manager if that's needed, disable or enable video
and text tracks renderers, as they may need to be enabled again in some cases
like starting a video in main player, opening play queue, switching to
background player on it and switching back to main player;
- disable or enable video renderers also for streams with AUDIO_STREAM
StreamType, as doing so doesn't raise any issue and simplifies code;
- reword and move some comments to make them easier to understand.
2023-07-19 22:52:18 +02:00
Stypox
3ef97eb29c Fix PlayerService leakead by Binder instance
Also see https://stackoverflow.com/q/63787707
2023-07-14 18:34:20 +02:00
ThetaDev
e947c88483 fix: audio stream cache key, code fmt 2023-05-01 00:04:04 +02:00
ThetaDev
cba0eb35e2 Merge branch 'dev' of github.com:TeamNewPipe/NewPipe into alang-selector 2023-04-21 23:32:33 +02:00
ThetaDev
a7a0811dec fix: small codestyle fixes 2023-04-21 23:15:37 +02:00
ThetaDev
e2bb4082bb Merge branch 'dev' into alang-selector 2023-04-17 23:01:07 +02:00
TobiGr
7a85c08b68 Apply new itag filter only to YouTube streams 2023-04-17 13:10:29 +02:00
TobiGr
672093ad7a Use a whitelist to filter all streams retrieved by the extractor.
NewPipe Extractor now extracts all YouTube Itags and therefore only those which can be handled by the player need to be retrieved from the list of all available streams.
2023-04-17 13:00:11 +02:00
Stypox
727de29bd6 Merge pull request #10021 from Isira-Seneviratne/PendingIntentCompat
Switch to AndroidX's PendingIntentCompat.
2023-04-14 14:20:47 +02:00
Isira Seneviratne
c91ffa4863 Use AndroidX's PendingIntentCompat class. 2023-04-13 10:53:46 +05:30
AudricV
445b0380b4 [Android 6+] Add ability to always use ExoPlayer's MediaVideoCodecRenderer setOutputSurface workaround
As some devices not present in ExoPlayer's list may not implement
MediaCodec.setOutputSurface(Surface) properly, this workaround could be useful
on these devices.

It forces ExoPlayer to fall back on releasing and re-instantiating video codec
instances, which is always used on Android 5 and lower due to addition of this
method in Android 6.

To do so, a CustomMediaCodecVideoRenderer, based on ExoPlayer's
MediaVideoCodecRenderer which always return true for the
codecNeedsSetOutputSurfaceWorkaround method has been added, which is used in
CustomRenderersFactory, a class based on DefaultRenderersFactory which always
returns our CustomMediaCodecVideoRenderer as the video renderers.

CustomRenderersFactory replaces DefaultRenderersFactory in the player, in the
case this setting is enabled.
2023-04-10 17:39:27 +02:00
AudricV
bc7758d29f Move media tunneling setting to ExoPlayer settings and make this setting available on release builds
Media tunneling may be not supported by more devices than the ones we
whitelisted before.

As a matter of fact, the list of devices on which media tunneling is disabled
could be not maintainable in the future, especially if the list of devices
grows more and more.

A preferable solution is to allow users to configure this setting themselves,
allowing them to not wait for their device(s) to be whitelisted in a future
NewPipe update.

This solution has been applied in this commit and works on every build type.

The corresponding preference in the debug settings has been of course removed
and the code used to prevent media tunneling activation on specific devices has
been removed.
2023-04-10 17:37:30 +02:00