Acly.Player
1.6.0
dotnet add package Acly.Player --version 1.6.0
NuGet\Install-Package Acly.Player -Version 1.6.0
<PackageReference Include="Acly.Player" Version="1.6.0" />
<PackageVersion Include="Acly.Player" Version="1.6.0" />
<PackageReference Include="Acly.Player" />
paket add Acly.Player --version 1.6.0
#r "nuget: Acly.Player, 1.6.0"
#:package Acly.Player@1.6.0
#addin nuget:?package=Acly.Player&version=1.6.0
#tool nuget:?package=Acly.Player&version=1.6.0
Acly.Player
Плеер для Android и Windows с возможностью удалённого управления

Общая настройка (для всех платформ)
using Acly.Player;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
})
.UseCrossPlayer(); // Инициализировать CrossPlayer
return builder.Build();
}
}
Настройка для Android
Для того чтобы управлять плеером через уведомление надо сначала инициализировать MediaSessionService и MediaBrowserService. Звучит сложно, но для этого надо всего лишь вызвать 1 метод:
CrossPlayer.InitNotification(MauiAppCompatActivity);
Лучше всего его вызывать в методе OnCreate(Bundle?) класса MainActivity (или любого другого унаследованного от MauiAppCompatActivity)
Для примера:
public class MainActivity : MauiAppCompatActivity
{
protected override void OnCreate(Bundle? savedInstanceState)
{
base.OnCreate(savedInstanceState);
CrossPlayer.InitNotification(this);
}
}
Так же этот метод имеет перегрузку, с помощью которой можно настроить уведомление под себя.
CrossPlayer.InitNotification(MauiAppCompatActivity, PlayerNotificationStyle, PlayerNotificationSettings);
В PlayerNotificationStyle передаются настройки внешнего вида уведомления - иконки и надписи, а в PlayerNotificationSettings общие настройки.
В общих настройках указываются параметры канала, создаваемого для уведомления, идентификатор уведомления и тег сессии.
Для работы методов GetSpectrumData и GetWaveformData на Android необходимо дать некоторые разрешения.
Если вам эти методы не нужны, то можно не запрашивать разрешения.
В любом случае, если вы попытаетесь вызвать эти методы, не дав разрешения, то они просто вернут пустой массив.
Также при неудачной инициализации визуализатора на Android в консоли будет выведено сообщение с информацией - это сообщение можно проигнорировать, если вам не нужна визуализация.
Для работы этих методов необходимо указать следующие разрешения:
android.permission.RECORD_AUDIO
android.permission.MODIFY_AUDIO_SETTINGS
Использование
Чтобы получить экземпляр плеера необходимо написать следующее:
CrossPlayer player = new();
Плеер предлагает следующие события:
event SimplePlayerStateEvent? StateChanged; // Вызывается при изменении состояния плеера
event SimplePlayerEvent? SourceChanged; // Вызывается при изменении источника
event SimplePlayerEvent? SourceEnded; // Вызывается при окончании источника
event PlayerTimeEvent? PositionChanged; // Вызывается при изменении текущего времени проигрывания
event PlayerEvent? SkippedToNext; // Вызывается при пропуске до следующей песни
event PlayerEvent? SkippedToPrevious; // Вызывается при перемотки до предыдущей песни
event IPlayer.DisposePlayer? Disposed; // Вызывается при очистке
Поля:
TimeSpan Position { get; set; } // Текущее время проигрывания
TimeSpan Duration { get; } // Продолжительность аудио
float Speed { get; set; } // Скорость проигрывания
float Volume { get; set; } // Громкость плеера
bool Loop { get; set; } // Повторение аудио
bool IsPlaying { get; } // Проигрывается ли сейчас аудио
bool AutoPlay { get; set; } // Автоматически проигрывать после смены аудио
SimplePlayerState State { get; } // Состояние плеера
object? Source { get; } // Информация о текущем аудио
int CaptureDataSize { get; set; } // Размер захыватываемых данных для визуализации (FFT, Waveform)
IPlayerRemoteControls RemoteControls { get; } // Настройки удалённого управления
Для настройки поведения удалённого управления плеера используйте
RemoteControls. Подробнее об этом можно прочитать здесь
Управление плеером:
void Pause(); // Пауза
void Play(); // Воспроизвести
void Stop(); // Остановить
Установка аудио
Для установки аудио доступны следующие методы:
Task SetSource(byte[] data); // Доступно только для Android
Task SetSource(Stream sourceStream); // Доступно только для Android
Task SetSource(string url);
Task SetSource(Uri uri);
Task SetSource(IMediaItem item);
Последний метод устанавливает источник аудио и данные о медиа, которые будут отображаться при удалённом управлении плеером:
public interface IMediaItem
{
public string Title { get; set; }
public string Artist { get; set; }
public TimeSpan Duration { get; set; }
public string AudioUrl { get; set; }
public string? ImageUrl { get; set; }
}
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0-android36.0 is compatible. net10.0-windows10.0.19041 is compatible. |
-
net10.0-android36.0
- Acly (>= 1.15.2)
- Microsoft.Maui.Controls (>= 10.0.51)
- Microsoft.Maui.Controls.Compatibility (>= 10.0.51)
- Xamarin.AndroidX.Fragment.Ktx (>= 1.8.9.2)
- Xamarin.AndroidX.Media (>= 1.7.1.2)
- Xamarin.AndroidX.Media2.Session (>= 1.3.0.14)
-
net10.0-windows10.0.19041
- Acly (>= 1.15.2)
- Microsoft.Maui.Controls (>= 10.0.51)
- Microsoft.Maui.Controls.Compatibility (>= 10.0.51)
- NAudio (>= 2.3.0)
- NAudio.Wasapi (>= 2.3.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 1.6.0 | 159 | 8/11/2026 | |
| 1.5.0 | 155 | 4/21/2026 | |
| 1.4.0 | 372 | 4/21/2025 | |
| 1.3.51 | 696 | 3/24/2025 | |
| 1.3.6 | 302 | 4/15/2025 | |
| 1.3.5 | 557 | 3/24/2025 | |
| 1.3.4 | 387 | 3/23/2025 | |
| 1.3.3 | 269 | 3/20/2025 | |
| 1.3.2 | 262 | 3/20/2025 | |
| 1.3.1 | 272 | 3/20/2025 | |
| 1.3.0 | 291 | 3/20/2025 | |
| 1.2.5 | 312 | 6/21/2024 | |
| 1.2.4 | 267 | 6/20/2024 | |
| 1.2.3 | 224 | 6/20/2024 | |
| 1.2.2 | 241 | 6/20/2024 | |
| 1.2.1 | 231 | 6/20/2024 | |
| 1.2.0 | 261 | 6/20/2024 | |
| 1.1.1 | 236 | 6/19/2024 | |
| 1.1.0 | 255 | 6/19/2024 | |
| 1.0.0 | 251 | 6/18/2024 |