rebase added hlsStreamURL param

This commit is contained in:
jhays 2022-01-24 17:57:00 -06:00
parent 56b60dafdc
commit 0749fa0520
2 changed files with 153 additions and 121 deletions

View File

@ -195,6 +195,7 @@ extension BaseItemDto {
var viewModels: [VideoPlayerViewModel] = [] var viewModels: [VideoPlayerViewModel] = []
for currentMediaSource in mediaSources { for currentMediaSource in mediaSources {
let videoStream = currentMediaSource.mediaStreams?.filter { $0.type == .video }.first
let audioStreams = currentMediaSource.mediaStreams?.filter { $0.type == .audio } ?? [] let audioStreams = currentMediaSource.mediaStreams?.filter { $0.type == .audio } ?? []
let subtitleStreams = currentMediaSource.mediaStreams?.filter { $0.type == .subtitle } ?? [] let subtitleStreams = currentMediaSource.mediaStreams?.filter { $0.type == .subtitle } ?? []
@ -203,11 +204,28 @@ extension BaseItemDto {
let defaultSubtitleStream = subtitleStreams let defaultSubtitleStream = subtitleStreams
.first(where: { $0.index! == currentMediaSource.defaultSubtitleStreamIndex ?? -1 }) .first(where: { $0.index! == currentMediaSource.defaultSubtitleStreamIndex ?? -1 })
var directStreamURL: URL // MARK: Build Streams
let directStreamURL: URL
let transcodedStreamURL: URLComponents? let transcodedStreamURL: URLComponents?
var hlsStreamURL: URL
let mediaSourceID: String let mediaSourceID: String
let streamType: ServerStreamType let streamType: ServerStreamType
if mediaSources.count > 1 {
mediaSourceID = currentMediaSource.id!
} else {
mediaSourceID = self.id!
}
let directStreamBuilder = VideosAPI.getVideoStreamWithRequestBuilder(itemId: self.id!,
_static: true,
tag: self.etag,
playSessionId: response.playSessionId,
minSegments: 6,
mediaSourceId: mediaSourceID)
directStreamURL = URL(string: directStreamBuilder.URLString)!
if let transcodeURL = currentMediaSource.transcodingUrl { if let transcodeURL = currentMediaSource.transcodingUrl {
streamType = .transcode streamType = .transcode
transcodedStreamURL = URLComponents(string: SessionManager.main.currentLogin.server.currentURI transcodedStreamURL = URLComponents(string: SessionManager.main.currentLogin.server.currentURI
@ -217,18 +235,30 @@ extension BaseItemDto {
transcodedStreamURL = nil transcodedStreamURL = nil
} }
if mediaSources.count > 1 { let hlsStreamBuilder = DynamicHlsAPI.getMasterHlsVideoPlaylistWithRequestBuilder(itemId: id ?? "",
mediaSourceID = currentMediaSource.id! mediaSourceId: id ?? "",
} else {
mediaSourceID = self.id!
}
let requestBuilder = VideosAPI.getVideoStreamWithRequestBuilder(itemId: self.id!,
_static: true, _static: true,
tag: self.etag, tag: currentMediaSource.eTag,
minSegments: 6, deviceProfileId: nil,
mediaSourceId: mediaSourceID) playSessionId: response.playSessionId,
directStreamURL = URL(string: requestBuilder.URLString)! segmentContainer: "ts",
segmentLength: nil,
minSegments: 2,
deviceId: UIDevice.vendorUUIDString,
audioCodec: audioStreams
.compactMap(\.codec)
.joined(separator: ","),
breakOnNonKeyFrames: true,
requireAvc: true,
transcodingMaxAudioChannels: 6,
videoCodec: videoStream?.codec,
videoStreamIndex: videoStream?.index,
enableAdaptiveBitrateStreaming: true)
var hlsStreamComponents = URLComponents(string: hlsStreamBuilder.URLString)!
hlsStreamComponents.addQueryItem(name: "api_key", value: SessionManager.main.currentLogin.user.accessToken)
hlsStreamURL = hlsStreamComponents.url!
// MARK: VidoPlayerViewModel Creation // MARK: VidoPlayerViewModel Creation
@ -266,6 +296,7 @@ extension BaseItemDto {
subtitle: subtitle, subtitle: subtitle,
directStreamURL: directStreamURL, directStreamURL: directStreamURL,
transcodedStreamURL: transcodedStreamURL?.url, transcodedStreamURL: transcodedStreamURL?.url,
hlsStreamURL: hlsStreamURL,
streamType: streamType, streamType: streamType,
response: response, response: response,
audioStreams: audioStreams, audioStreams: audioStreams,

View File

@ -143,6 +143,7 @@ struct tvOSLiveTVOverlay_Previews: PreviewProvider {
subtitle: "Loki - S1E1", subtitle: "Loki - S1E1",
directStreamURL: URL(string: "www.apple.com")!, directStreamURL: URL(string: "www.apple.com")!,
transcodedStreamURL: nil, transcodedStreamURL: nil,
hlsStreamURL: URL(string: "www.apple.com")!,
streamType: .direct, streamType: .direct,
response: PlaybackInfoResponse(), response: PlaybackInfoResponse(),
audioStreams: [MediaStream(displayTitle: "English", index: -1)], audioStreams: [MediaStream(displayTitle: "English", index: -1)],