iOS Chromecast:从HLS播放列表中读取持续时间

时间:2018-03-08 02:14:33

标签: ios chromecast google-cast hls m3u8

我有一个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流视频中读取持续时间?

1 个答案:

答案 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播放列表的持续时间。

相关问题