rebase added hlsStreamURL param
This commit is contained in:
parent
56b60dafdc
commit
0749fa0520
|
@ -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,
|
||||||
|
|
|
@ -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)],
|
||||||
|
|
Loading…
Reference in New Issue