我有一个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发件人应用中加载此项目的方式:(或多或少)
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 = .infinity
The playback duration for the item, in seconds, or INFINITY if the stream's actual duration should be used.(所以,应该正确设置。)
GCKMediaStreamType.buffered
A buffered stream type.(不确定这是做什么的,但至少我没有将它设置为
.live
。)
streamDuration: 0
The length of the stream, in seconds, or INFINITY if it is a live stream. Defaults to 0.似乎与QueueItemBuilder上的
playbackDuration
相反?我把它设置为零。
我错过了什么设置让Chromecast从我的HLS流视频中读取持续时间?
答案 0 :(得分:0)
问题显然在于我使用的Styled Media Receiver:
版本说明:Receiver API和媒体播放器库基于Cast SDK v2,并且与v2和CAF发件人兼容。
当我切换到Default Media Receiver时,这个问题就消失了;我能够在VOD HLS流上看到持续时间。
我认为,Chromecast设备中运行的Receiver应用程序会向iOS Cast SDK公开此类信息。我认为Styled Receiver没有内置的功能来计算HLS播放列表的持续时间。