Как добавить / использовать GCKMediaQueue в Swift? - PullRequest
1 голос
/ 11 марта 2019

Итак, мне удалось воспроизвести видео на Chromecast. Но только по одному. Я пытался понять, как программно добавить в очередь. Идея в том, чтобы продолжать проигрывать видео весь день. В приведенном ниже коде «playthisvideo ()» случайным образом возвращает строку, содержащую http: //.....mp4. Я посмотрел на документацию Google, она либо слишком расплывчатая, либо я просто не понимаю. И я не могу найти какие-либо примеры, которые позволили бы мне следовать.

func castthevideo() {
    let metadata = GCKMediaMetadata()
    metadata.setString("Los Simpsons", forKey: kGCKMetadataKeyTitle)
    metadata.setString ("Barista: ¿Cómo tomas tu café? " +
        " Yo: Muy, muy en serio.",
                        forKey: kGCKMetadataKeySubtitle)
    metadata.addImage(GCKImage(url: URL(string: "https://m.media-amazon.com/images/M/MV5BYjFkMTlkYWUtZWFhNy00M2FmLThiOTYtYTRiYjVlZWYxNmJkXkEyXkFqcGdeQXVyNTAyODkwOQ@@._V1_.jpg")!,
                               width: 480,
                               height: 360))
    let PTV = playthisvideo()
    let url = URL.init(string: PTV)
    print ("******  ", PTV)
    guard let mediaURL = url else {
        print("******  invalid mediaURL")
        return }
    //let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentURL: mediaURL)
    let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentURL: mediaURL)
    mediaInfoBuilder.streamType = GCKMediaStreamType.none;
    mediaInfoBuilder.contentType = "video/mp4"
    mediaInfoBuilder.metadata = metadata;
    let  mediaInformation = mediaInfoBuilder.build()
    if let request = sessionManager.currentSession?.remoteMediaClient?.loadMedia(mediaInformation) { request.delegate = self }

    GCKCastContext.sharedInstance().presentDefaultExpandedMediaControls()

}

func castanthor (путем добавления дополнения: Bool) {

    let PTV = playthisvideo()
    let url = URL.init(string: PTV)
    guard let mediaURL = url else {
        print("invalid mediaURL")
        return
    }

    myNSNumber = (1 as NSNumber)
    if let remoteMediaClient = GCKCastContext.sharedInstance().sessionManager.currentCastSession?.remoteMediaClient {
        let builder = GCKMediaQueueItemBuilder()
        builder.mediaInformation = selectedItem.mediaInfo
        builder.autoplay = true
        builder.preloadTime = 3
        let item = builder.build
        if remoteMediaClient.mediaStatus != nil, appending {
            let request = remoteMediaClient.queueInsert(item(), beforeItemWithID: kGCKMediaQueueInvalidItemID)
            request.delegate = self
        } else {
            let options = GCKMediaQueueLoadOptions()
            options.repeatMode = remoteMediaClient.mediaStatus?.queueRepeatMode ?? .off
            let request = castSession.remoteMediaClient?.queueLoad([item()], with: options)
            request?.delegate = self
        }
    }}

1 Ответ

0 голосов
/ 11 марта 2019
var mediaItems = [GCKMediaQueueItem]()
var urls = // Array of only audio and videos
for index in 0..<urls.count {
    let builder = GCKMediaQueueItemBuilder()
    let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentURL: urls[i])
    mediaInfoBuilder.streamType = GCKMediaStreamType.none;
    mediaInfoBuilder.contentType = "video/mp4"
    mediaInfoBuilder.metadata = metadata;
    let mediaInformation = mediaInfoBuilder.build()
    builder.mediaInformation = mediaInformation
    builder.autoplay = true
    builder.preloadTime = 3
    let item = builder.build
    mediaItems.append(item)
}

if let remoteMediaClient = GCKCastContext.sharedInstance().sessionManager.currentCastSession?.remoteMediaClient {
    let loadOptions = GCKMediaQueueLoadOptions()
    loadOptions.repeatMode = .all
    loadOptions.startPosition = 0
    remoteMediaClient.queueLoadItems(mediaItems, withOptions:loadOptions)
}
...