@@ -5,6 +5,7 @@ import org.jellyfin.sdk.api.client.ApiClient
5
5
import org.jellyfin.sdk.api.client.extensions.mediaInfoApi
6
6
import org.jellyfin.sdk.model.api.BaseItemDto
7
7
import org.jellyfin.sdk.model.api.DeviceProfile
8
+ import org.jellyfin.sdk.model.api.MediaProtocol
8
9
import org.jellyfin.sdk.model.api.MediaSourceInfo
9
10
import org.jellyfin.sdk.model.api.PlaybackInfoDto
10
11
@@ -19,41 +20,41 @@ abstract class JellyfinStreamResolver(
19
20
20
21
protected suspend fun getPlaybackInfo (
21
22
item : BaseItemDto ,
22
- mediaSource : MediaSourceInfo ? = null,
23
+ mediaSourceId : String ? = null,
23
24
): MediaInfo {
24
25
val response by api.mediaInfoApi.getPostedPlaybackInfo(
25
26
itemId = item.id,
26
27
data = PlaybackInfoDto (
27
28
userId = api.userId,
28
29
maxStreamingBitrate = profile.maxStreamingBitrate,
29
- mediaSourceId = mediaSource?.id,
30
- liveStreamId = mediaSource?.liveStreamId,
30
+ mediaSourceId = mediaSourceId,
31
31
deviceProfile = profile,
32
32
enableDirectPlay = true ,
33
33
enableDirectStream = true ,
34
34
enableTranscoding = true ,
35
35
allowVideoStreamCopy = true ,
36
36
allowAudioStreamCopy = true ,
37
- autoOpenLiveStream = true ,
37
+ autoOpenLiveStream = false ,
38
38
)
39
39
)
40
40
41
41
if (response.errorCode != null ) {
42
- error(" Failed to get media info for item ${item.id} source ${mediaSource?.id } : ${response.errorCode} " )
42
+ error(" Failed to get media info for item ${item.id} source ${mediaSourceId } : ${response.errorCode} " )
43
43
}
44
44
45
- val responseMediaSource = when (mediaSource) {
46
- null -> response.mediaSources.firstOrNull()
47
- else -> response.mediaSources.firstOrNull { it.id == = mediaSource.id }
48
- }
45
+ val mediaSource = response.mediaSources
46
+ // Filter out invalid streams (like strm files)
47
+ .filter { it.protocol == MediaProtocol .FILE && ! it.isRemote }
48
+ // Select first media source
49
+ .firstOrNull { mediaSourceId == null || it.id == mediaSourceId }
49
50
50
- requireNotNull(responseMediaSource ) {
51
- " Failed to get media info for item ${item.id} source ${mediaSource?.id } : media source missing in response"
51
+ requireNotNull(mediaSource ) {
52
+ " Failed to get media info for item ${item.id} source ${mediaSourceId } : media source missing in response"
52
53
}
53
54
54
55
return MediaInfo (
55
56
playSessionId = response.playSessionId.orEmpty(),
56
- mediaSource = responseMediaSource
57
+ mediaSource = mediaSource
57
58
)
58
59
}
59
60
}
0 commit comments