Bugfix/aac+alac on android (#512)

* set default device profiles, enable AAC for Android

initialize device profile properly in the device profiles store
This commit is contained in:
Violet Caulfield
2025-09-06 21:50:56 -05:00
committed by GitHub
parent c27c64c9ff
commit 169077eafe
7 changed files with 53 additions and 54 deletions

View File

@@ -1,12 +1,9 @@
import SettingsListGroup from './settings-list-group'
import { RadioGroup } from 'tamagui'
import { RadioGroupItemWithLabel } from '../../Global/helpers/radio-group-item-with-label'
import {
StreamingQuality,
useDisplayAudioQualityBadge,
useStreamingQuality,
} from '../../../stores/settings/player'
import { useDisplayAudioQualityBadge, useStreamingQuality } from '../../../stores/settings/player'
import { SwitchWithLabel } from '../../Global/helpers/switch-with-label'
import StreamingQuality from '../../../enums/audio-quality'
export default function PlaybackTab(): React.JSX.Element {
const [streamingQuality, setStreamingQuality] = useStreamingQuality()

View File

@@ -0,0 +1,8 @@
enum StreamingQuality {
Original = 'original', // Direct Play
High = 'high', // 320
Medium = 'medium', // 256
Low = 'low', // 128
}
export default StreamingQuality

View File

@@ -2,6 +2,8 @@ import { DeviceProfile } from '@jellyfin/sdk/lib/generated-client'
import { create } from 'zustand'
import { createJSONStorage, devtools, persist } from 'zustand/middleware'
import { stateStorage } from '../constants/storage'
import { getDeviceProfile } from '../utils/device-profiles'
import StreamingQuality from '../enums/audio-quality'
type DeviceProfileStore = {
deviceProfile: DeviceProfile
@@ -12,7 +14,7 @@ export const useStreamingDeviceProfileStore = create<DeviceProfileStore>()(
devtools(
persist(
(set) => ({
deviceProfile: {},
deviceProfile: getDeviceProfile(StreamingQuality.Original, 'stream'),
setDeviceProfile: (data: DeviceProfile) => set({ deviceProfile: data }),
}),
{
@@ -33,7 +35,7 @@ export const useDownloadingDeviceProfileStore = create<DeviceProfileStore>()(
devtools(
persist(
(set) => ({
deviceProfile: {},
deviceProfile: getDeviceProfile(StreamingQuality.Original, 'download'),
setDeviceProfile: (data: DeviceProfile) => set({ deviceProfile: data }),
}),
{

View File

@@ -4,13 +4,7 @@ import { stateStorage } from '../../constants/storage'
import { useStreamingDeviceProfileStore } from '../device-profile'
import { useEffect } from 'react'
import { getDeviceProfile } from '../../utils/device-profiles'
export enum StreamingQuality {
Original = 'original', // Direct Play
High = 'high', // 320
Medium = 'medium', // 256
Low = 'low', // 128
}
import StreamingQuality from '../../enums/audio-quality'
type PlayerSettingsStore = {
streamingQuality: StreamingQuality

View File

@@ -1,8 +1,8 @@
import { create } from 'zustand'
import { StreamingQuality } from './player'
import { createJSONStorage, devtools, persist } from 'zustand/middleware'
import { Platform } from 'react-native'
import { stateStorage } from '../../constants/storage'
import StreamingQuality from '../../enums/audio-quality'
export type DownloadQuality = StreamingQuality

View File

@@ -19,11 +19,11 @@ import {
EncodingContext,
MediaStreamProtocol,
} from '@jellyfin/sdk/lib/generated-client'
import { StreamingQuality } from '../stores/settings/player'
import { Platform } from 'react-native'
import { getQualityParams } from './mappings'
import { capitalize } from 'lodash'
import { SourceType } from '../types/JellifyTrack'
import StreamingQuality from '../enums/audio-quality'
/**
* A constant that defines the options for the {@link useDeviceProfile} hook - building the
@@ -174,15 +174,15 @@ const DEFAULT_PLATFORM_PROFILE: DeviceProfile = {
Container: 'mp3',
Type: DlnaProfileType.Audio,
},
// {
// Container: 'aac',
// Type: DlnaProfileType.Audio,
// },
// {
// AudioCodec: 'aac',
// Container: 'm4a',
// Type: DlnaProfileType.Audio,
// },
{
Container: 'aac',
Type: DlnaProfileType.Audio,
},
{
AudioCodec: 'aac',
Container: 'm4a',
Type: DlnaProfileType.Audio,
},
// {
// AudioCodec: 'aac',
// Container: 'm4b',
@@ -198,24 +198,24 @@ const DEFAULT_PLATFORM_PROFILE: DeviceProfile = {
},
],
TranscodingProfiles: [
// {
// AudioCodec: 'aac',
// BreakOnNonKeyFrames: true,
// Container: 'aac',
// Context: EncodingContext.Streaming,
// MaxAudioChannels: '6',
// MinSegments: 2,
// Protocol: MediaStreamProtocol.Hls,
// Type: DlnaProfileType.Audio,
// },
// {
// AudioCodec: 'aac',
// Container: 'aac',
// Context: EncodingContext.Streaming,
// MaxAudioChannels: '6',
// Protocol: MediaStreamProtocol.Http,
// Type: DlnaProfileType.Audio,
// },
{
AudioCodec: 'aac',
BreakOnNonKeyFrames: true,
Container: 'aac',
Context: EncodingContext.Streaming,
MaxAudioChannels: '6',
MinSegments: 2,
Protocol: MediaStreamProtocol.Hls,
Type: DlnaProfileType.Audio,
},
{
AudioCodec: 'aac',
Container: 'aac',
Context: EncodingContext.Streaming,
MaxAudioChannels: '6',
Protocol: MediaStreamProtocol.Http,
Type: DlnaProfileType.Audio,
},
{
AudioCodec: 'mp3',
Container: 'mp3',
@@ -240,14 +240,14 @@ const DEFAULT_PLATFORM_PROFILE: DeviceProfile = {
Protocol: MediaStreamProtocol.Http,
Type: DlnaProfileType.Audio,
},
// {
// AudioCodec: 'aac',
// Container: 'aac',
// Context: EncodingContext.Static,
// MaxAudioChannels: '6',
// Protocol: MediaStreamProtocol.Http,
// Type: DlnaProfileType.Audio,
// },
{
AudioCodec: 'aac',
Container: 'aac',
Context: EncodingContext.Static,
MaxAudioChannels: '6',
Protocol: MediaStreamProtocol.Http,
Type: DlnaProfileType.Audio,
},
{
AudioCodec: 'wav',
Container: 'wav',

View File

@@ -13,16 +13,14 @@ import { AudioApi } from '@jellyfin/sdk/lib/generated-client/api'
import { JellifyDownload } from '../types/JellifyDownload'
import { Api } from '@jellyfin/sdk/lib/api'
import RNFS from 'react-native-fs'
import { StreamingQuality } from '../stores/settings/player'
import { AudioQuality } from '../types/AudioQuality'
import { queryClient } from '../constants/query-client'
import { QueryKeys } from '../enums/query-keys'
import { isUndefined } from 'lodash'
import uuid from 'react-native-uuid'
import { convertRunTimeTicksToSeconds } from './runtimeticks'
import { DownloadQuality } from '../stores/settings/usage'
import MediaInfoQueryKey from '../api/queries/media/keys'
import { JellifyUser } from '../types/JellifyUser'
import StreamingQuality from '../enums/audio-quality'
/**
* Gets quality-specific parameters for transcoding