|
|
# Startrek Player
|
|
|
|
|
|
Библиотека предназначена для проигрывания интернет потоков mp3/aac/wav/hls и локальных файлов. Основная часть библиотеки выполнена в виде native модуля, который занимается проигрыванием и содержит два основных класса: [StartrekPlayer](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekPlayer%20e00fd907b23240618222ffdcafcb4db6.md) и [StartrekPlayerDelegate](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekPlayerDelegate%202f0d4d39b85f4f9bbcea4ec1cf80d6bd.md)
|
|
|
|
|
|
Для обработки web сокет метаданных [http://play.melonplayer.com/docs/metadata-socket-api](http://play.melonplayer.com/docs/metadata-socket-api) используются классы: [StartrekMetadataWatcher](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadataWatcher%2063e8016b7b734688be111960112198c4.md) и [StartrekMetadataWatcherDelegate](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadataWatcherDelegate%209a4478880db942d5af2188a7b56f0038.md)
|
|
|
|
|
|
Для обработки json метаданных [https://hostingradio.ru/mdsabout](https://hostingradio.ru/mdsabout) используются классы: [StartrekMetadataUpdater](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadataUpdater%20272757e39e6c4dbba694cb524521914d.md) и [StartrekMetadataUpdaterDelegate](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadataUpdaterDelegate%2024bd0d93b5df45f7b9bed19a82ce203e.md)
|
|
|
|
|
|
Собранные библиотеки *(.aar для android и .a для iOS)* хранятся с использованием git lfs [https://git-lfs.github.com/](https://git-lfs.github.com/) в репозиториях. Важно после клонирования в случае проблем проверить размер этих файлов. Если размер файлов менее 1КБ, то это не файл а git lfs ссылка на него, и нужно проверить настройки git lfs, после чего обновить состояние репозитория.
|
|
|
|
|
|
## История изменений
|
|
|
|
|
|
[Changelog](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/Changelog%2091b0080f3f2b4e5789485a4cb120dcec.md)
|
|
|
|
|
|
### iOS версия
|
|
|
|
|
|
[https://bitbucket.org/micro_it/startrek-radio-ios](https://bitbucket.org/micro_it/startrek-radio-ios)
|
|
|
|
|
|
xcframework файл копируется и подключается в проект: General → Frameworks, Libraries, and Embedded Content Дополнительно нужно сделать следующие настройки:
|
|
|
|
|
|
1. Подключить зависимые системные framework к проекту: Accelerate.framework, AudioToolbox.framework, AVFoundation.framework, CFNetwork.framework, CoreServices.framework, GSS.framework, SystemConfiguration.framework
|
|
|
2. Отключить bitcode: Build Setting → Build Options → Enable Bitcode = No
|
|
|
3. Добавить флаги линковки: Build Setting → Linking → Other Linker Flags = -lc++ -lz
|
|
|
4. Добавить Capabilities → Background Modes → Audio, Air Play, and Picture in Picture в проект
|
|
|
5. При использовании Swift нужно указать Objective C Bridging Header → Frameworks/StartrekPlayer.xcframework/ios-arm64/Headers/STStartrekPlayer-Bridging-Header.h
|
|
|
6. xcframework с библиотеками формата .а нужно подключать с флагом "Do not embed" для того чтобы необходимые функции были вкомпилированы в результирующий бинарный файл - программу. При использовании "Embed and sign" архив .a будет добавлен целиком в bundle. Это не соответствует требованиям apple *(статические библиотеки не должны поставляться в результирующем bundle архиве)* и увеличивает размер установочного пакета для конечного пользователя.
|
|
|
|
|
|
xcframework содержит статические *.a библиотеки для двух архитектур arm64 и x86_64 + заголовочные файлы. Библиотеки *.a содержат отладочные символы, поэтому изначально имеют большой размер. Xcode при сборке их автоматически очищает и в release версию они не попадают, что уменьшает размер конечного приложения. При использовании crashlytics отладочные символы всего проекта нужно отправлять в firebase. Символы из подключенных библиотек автоматически собираются и отправляются, без дополнительных настроек. Подробнее [https://firebase.google.com/docs/crashlytics/get-started?platform=ios](https://firebase.google.com/docs/crashlytics/get-started?platform=ios)
|
|
|
|
|
|
### Android версия
|
|
|
|
|
|
[https://bitbucket.org/micro_it/startrek-radio-android](https://bitbucket.org/micro_it/startrek-radio-android)
|
|
|
|
|
|
AAR файл копируется в папку libs проекта и подключается как обычная библиотека.
|
|
|
|
|
|
```bash
|
|
|
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
|
|
|
```
|
|
|
|
|
|
AAR файл содержит C++ ndk библиотеки *.so с отладочными символами. Важно проконтролировать следущие настройки:
|
|
|
|
|
|
1. Relase версия apk или aab должна включать в себя библиотеку с stripped native symbols. (По умолчанию android studio именно так и делает.) За счет того, что в release сборке нет отладочных символов конечны размер приложения становится меньше.
|
|
|
2. При использовании google play crash reports нужно загрузить отладочные символы для библиотеки в google play console. Это требуется, для того чтобы Crash reports в google play console содержали полную информацию о стэке вызовов плеера при возникновении ошибки. Подробнее [https://support.google.com/googleplay/android-developer/answer/9848633](https://support.google.com/googleplay/android-developer/answer/9848633)
|
|
|
3. При использовании crashlytics нужно так же включить ndk crashlytics report и отправить native debug symbols в crashlytics при сборке. Это позволит просматривать полный стэк вызовов внутри библиотеки плеера при какой-либо ошибке. Подробнее [https://firebase.google.com/docs/crashlytics/ndk-reports](https://firebase.google.com/docs/crashlytics/ndk-reports)
|
|
|
|
|
|
Для использования плеера в Service классе требуется:
|
|
|
|
|
|
1. Подключить native библиотеку
|
|
|
2. Настроить корневые сертификаты для https соединений
|
|
|
3. Создать идентификатор аудиосессии и передать его в плеер
|
|
|
4. Создать плеер *(обязательно после настройки https и аудиосессии)*
|
|
|
|
|
|
```java
|
|
|
public class RadioService extends MediaBrowserServiceCompat {
|
|
|
static {
|
|
|
System.loadLibrary("StartrekPlayerNative" + StartrekAndroid.PREFERRED_ABI);
|
|
|
}
|
|
|
|
|
|
protected StartrekPlayer m_player = null;
|
|
|
|
|
|
@Override
|
|
|
public void onCreate() {
|
|
|
super.onCreate();
|
|
|
|
|
|
// Set ca certificates for https connections
|
|
|
StartrekNetwork.setCaCertificates(StartrekAndroid.getSSLCertificates());
|
|
|
|
|
|
// Set audio session id
|
|
|
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
|
|
|
int sid = audioManager.generateAudioSessionId();
|
|
|
StartrekAndroid.setAudioSessionId(sid);
|
|
|
|
|
|
// Create player
|
|
|
m_player = StartrekPlayer.create();
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
## Описание классов
|
|
|
|
|
|
API приближено к старой версии плеера [https://bitbucket.org/micro_it/startrekplayerlibrary/](https://bitbucket.org/micro_it/startrekplayerlibrary/)
|
|
|
|
|
|
[StartrekPlayerState](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekPlayerState%204c703a87d5cd4583bb008b04d564f3d4.md)
|
|
|
|
|
|
[StartrekPlayerQuality](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekPlayerQuality%20bc0008c76df248e2afaa7eef133e69e4.md)
|
|
|
|
|
|
[StartrekMetadataSubscriptionType](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadataSubscriptionType%20a40069268fea4ca2bcf35fd86f35f65b.md)
|
|
|
|
|
|
[StartrekMetadataFetchType](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadataFetchType%208560f5180ac240908983c623c8ca872b.md)
|
|
|
|
|
|
[StartrekMetadata](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadata%20f929338184f648f1b9e2de09be034c48.md)
|
|
|
|
|
|
[StartrekNetwork](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekNetwork%20717ba2a44c314016b7a5be1671c1c002.md)
|
|
|
|
|
|
[StartrekMetadataWatcherDelegate](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadataWatcherDelegate%209a4478880db942d5af2188a7b56f0038.md)
|
|
|
|
|
|
[StartrekMetadataWatcher](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadataWatcher%2063e8016b7b734688be111960112198c4.md)
|
|
|
|
|
|
[StartrekMetadataUpdaterDelegate](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadataUpdaterDelegate%2024bd0d93b5df45f7b9bed19a82ce203e.md)
|
|
|
|
|
|
[StartrekMetadataUpdater](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekMetadataUpdater%20272757e39e6c4dbba694cb524521914d.md)
|
|
|
|
|
|
[StartrekPlayerDelegate](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekPlayerDelegate%202f0d4d39b85f4f9bbcea4ec1cf80d6bd.md)
|
|
|
|
|
|
[StartrekPlayer](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekPlayer%20e00fd907b23240618222ffdcafcb4db6.md)
|
|
|
|
|
|
[StartrekAndroid](Startrek%20Player%20143ffa86ac2346a7982613942c05c1d3/StartrekAndroid%20fd751f43d00d4eee9b6dc1d7239f2e53.md) |
|
|
\ No newline at end of file |