export type SubtitleDeliveryMethod = 'Encode' | 'Embed' | 'External' | 'Hls'; export type EncodingContext = 'Streaming' | 'Static'; export type HeadApiVideosItemIdStreamArgs = {itemId: string, container?: (string | null) | undefined, static?: (boolean | null) | undefined, params?: (string | null) | undefined, tag?: (string | null) | undefined, deviceProfileId?: (string | null) | undefined, playSessionId?: (string | null) | undefined, segmentContainer?: (string | null) | undefined, segmentLength?: (number | null) | undefined, minSegments?: (number | null) | undefined, mediaSourceId?: (string | null) | undefined, deviceId?: (string | null) | undefined, audioCodec?: (string | null) | undefined, enableAutoStreamCopy?: (boolean | null) | undefined, allowVideoStreamCopy?: (boolean | null) | undefined, allowAudioStreamCopy?: (boolean | null) | undefined, breakOnNonKeyFrames?: (boolean | null) | undefined, audioSampleRate?: (number | null) | undefined, maxAudioBitDepth?: (number | null) | undefined, audioBitRate?: (number | null) | undefined, audioChannels?: (number | null) | undefined, maxAudioChannels?: (number | null) | undefined, profile?: (string | null) | undefined, level?: (string | null) | undefined, framerate?: (number | null) | undefined, maxFramerate?: (number | null) | undefined, copyTimestamps?: (boolean | null) | undefined, startTimeTicks?: (number | null) | undefined, width?: (number | null) | undefined, height?: (number | null) | undefined, videoBitRate?: (number | null) | undefined, subtitleStreamIndex?: (number | null) | undefined, subtitleMethod?: SubtitleDeliveryMethod | undefined, maxRefFrames?: (number | null) | undefined, maxVideoBitDepth?: (number | null) | undefined, requireAvc?: (boolean | null) | undefined, deInterlace?: (boolean | null) | undefined, requireNonAnamorphic?: (boolean | null) | undefined, transcodingMaxAudioChannels?: (number | null) | undefined, cpuCoreLimit?: (number | null) | undefined, liveStreamId?: (string | null) | undefined, enableMpegtsM2TsMode?: (boolean | null) | undefined, videoCodec?: (string | null) | undefined, subtitleCodec?: (string | null) | undefined, transcodeReasons?: (string | null) | undefined, audioStreamIndex?: (number | null) | undefined, videoStreamIndex?: (number | null) | undefined, context?: EncodingContext | undefined, streamOptions?: ({[key: string]: string} | null) | undefined}; export type HeadApiVideosItemIdStreamOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; /** * Gets a video stream. * * HEAD /Videos/{itemId}/stream */ export const headApiVideosItemIdStream = async (args: HeadApiVideosItemIdStreamArgs, options?: HeadApiVideosItemIdStreamOptions) => { const {baseUrl = "http://localhost", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "video/*") if (args.container != null) query.append("container", String(args.container)) if (args.static != null) query.append("static", String(args.static)) if (args.params != null) query.append("params", String(args.params)) if (args.tag != null) query.append("tag", String(args.tag)) if (args.deviceProfileId != null) query.append("deviceProfileId", String(args.deviceProfileId)) if (args.playSessionId != null) query.append("playSessionId", String(args.playSessionId)) if (args.segmentContainer != null) query.append("segmentContainer", String(args.segmentContainer)) if (args.segmentLength != null) query.append("segmentLength", String(args.segmentLength)) if (args.minSegments != null) query.append("minSegments", String(args.minSegments)) if (args.mediaSourceId != null) query.append("mediaSourceId", String(args.mediaSourceId)) if (args.deviceId != null) query.append("deviceId", String(args.deviceId)) if (args.audioCodec != null) query.append("audioCodec", String(args.audioCodec)) if (args.enableAutoStreamCopy != null) query.append("enableAutoStreamCopy", String(args.enableAutoStreamCopy)) if (args.allowVideoStreamCopy != null) query.append("allowVideoStreamCopy", String(args.allowVideoStreamCopy)) if (args.allowAudioStreamCopy != null) query.append("allowAudioStreamCopy", String(args.allowAudioStreamCopy)) if (args.breakOnNonKeyFrames != null) query.append("breakOnNonKeyFrames", String(args.breakOnNonKeyFrames)) if (args.audioSampleRate != null) query.append("audioSampleRate", String(args.audioSampleRate)) if (args.maxAudioBitDepth != null) query.append("maxAudioBitDepth", String(args.maxAudioBitDepth)) if (args.audioBitRate != null) query.append("audioBitRate", String(args.audioBitRate)) if (args.audioChannels != null) query.append("audioChannels", String(args.audioChannels)) if (args.maxAudioChannels != null) query.append("maxAudioChannels", String(args.maxAudioChannels)) if (args.profile != null) query.append("profile", String(args.profile)) if (args.level != null) query.append("level", String(args.level)) if (args.framerate != null) query.append("framerate", String(args.framerate)) if (args.maxFramerate != null) query.append("maxFramerate", String(args.maxFramerate)) if (args.copyTimestamps != null) query.append("copyTimestamps", String(args.copyTimestamps)) if (args.startTimeTicks != null) query.append("startTimeTicks", String(args.startTimeTicks)) if (args.width != null) query.append("width", String(args.width)) if (args.height != null) query.append("height", String(args.height)) if (args.videoBitRate != null) query.append("videoBitRate", String(args.videoBitRate)) if (args.subtitleStreamIndex != null) query.append("subtitleStreamIndex", String(args.subtitleStreamIndex)) if (args.subtitleMethod != null) query.append("subtitleMethod", String(args.subtitleMethod)) if (args.maxRefFrames != null) query.append("maxRefFrames", String(args.maxRefFrames)) if (args.maxVideoBitDepth != null) query.append("maxVideoBitDepth", String(args.maxVideoBitDepth)) if (args.requireAvc != null) query.append("requireAvc", String(args.requireAvc)) if (args.deInterlace != null) query.append("deInterlace", String(args.deInterlace)) if (args.requireNonAnamorphic != null) query.append("requireNonAnamorphic", String(args.requireNonAnamorphic)) if (args.transcodingMaxAudioChannels != null) query.append("transcodingMaxAudioChannels", String(args.transcodingMaxAudioChannels)) if (args.cpuCoreLimit != null) query.append("cpuCoreLimit", String(args.cpuCoreLimit)) if (args.liveStreamId != null) query.append("liveStreamId", String(args.liveStreamId)) if (args.enableMpegtsM2TsMode != null) query.append("enableMpegtsM2TsMode", String(args.enableMpegtsM2TsMode)) if (args.videoCodec != null) query.append("videoCodec", String(args.videoCodec)) if (args.subtitleCodec != null) query.append("subtitleCodec", String(args.subtitleCodec)) if (args.transcodeReasons != null) query.append("transcodeReasons", String(args.transcodeReasons)) if (args.audioStreamIndex != null) query.append("audioStreamIndex", String(args.audioStreamIndex)) if (args.videoStreamIndex != null) query.append("videoStreamIndex", String(args.videoStreamIndex)) if (args.context != null) query.append("context", String(args.context)) if (args.streamOptions != null) query.append("streamOptions", JSON.stringify(args.streamOptions)) const url = `${baseUrl.replace(/\/+$/, '')}/Videos/${encodeURIComponent(String(args.itemId))}/stream${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "HEAD", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return res.blob() };