【发布时间】:2018-08-16 06:51:57
【问题描述】:
我有一个长片的 m3u8 播放列表:
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:3
#EXTINF:2.987,
https://...segment0.ts
#EXTINF:2.987,
https://...segment1.ts
#EXTINF:2.987,
https://...segment2.ts
...
带有标签#EXT-X-PLAYLIST-TYPE:VOD,关于Apple says:
对于视频点播 (VOD) 会话,媒体文件可用 代表演示的整个持续时间。索引文件 是静态的,包含所有媒体文件的完整 URL 列表 自演示文稿开始以来创建。这种会话 允许客户端完全访问整个程序。
当我将此播放列表流式传输到 iOS 原生播放器或其他自定义 iOS 播放器时,播放器会确定内容的总时长并显示它。
现在我正在尝试投射相同的媒体,Chromecast 似乎不知道总持续时间。我已经连接了 GCKUIMediaController 和 UILabels 以及所有爵士乐,但播放器将播放列表视为实时流,在总持续时间内显示 --:--。
如何让 Chromecast 从 HLS 播放列表中读取总时长?
这是我在 iOS Sender App 中加载此项目的方式:(或多或少)
let metadata = GCKMediaMetadata(metadataType: .movie)
metadata.setString("Blah", forKey: kGCKMetadataKeyTitle)
let mediaInfo = GCKMediaInformation(contentID: URL(string: "https://blah.m3u8"), streamType: GCKMediaStreamType.buffered, contentType: contentType, metadata: metadata, streamDuration: 0, mediaTracks: nil, textTrackStyle: GCKMediaTextTrackStyle.createDefault(), customData: nil)
let builder = GCKMediaQueueItemBuilder()
builder.mediaInformation = mediaInfo
builder.preloadTime = 10.0
builder.playbackDuration = .infinity
let item = builder.build()
item.clearItemID()
let rmc = GCKCastContext.sharedInstance().sessionManager.currentCastSession.remoteMediaClient
rmc.queueLoad([item], start: 0, playPosition: TimeInterval(0.0), repeatMode: .off, customData: nil)
我找到的一些文档:
builder.playbackDuration = .infinityThe playback duration for the item, in seconds, or INFINITY if the stream's actual duration should be used.(所以,应该设置正确。)
GCKMediaStreamType.bufferedA buffered stream type.(不确定这是做什么的,但我至少没有将其设置为
.live。)
streamDuration: 0The length of the stream, in seconds, or INFINITY if it is a live stream. Defaults to 0. 似乎与 QueueItemBuilder 上的
playbackDuration相反?我将其设置为零。
为了让 Chromecast 从我的 HLS 流式传输视频中读取时长,我缺少什么设置?
【问题讨论】:
标签: ios chromecast google-cast http-live-streaming m3u8