2014-02-18 38 views
0

我最初鑄造在iOS中使用此代碼:的Chromecast更新元數據,無需重新啓動流

metadata setString:lblSongInfo.text forKey:kGCKMetadataKeyTitle]; 
[metadata setString:currentStation.stationName 
      forKey:kGCKMetadataKeySubtitle]; 

[metadata addImage:[[GCKImage alloc] 
        initWithURL:[[NSURL alloc] initWithString:urlString] 
        width:300 
        height:300]]; 

//define Media information 
GCKMediaInformation *mediaInformation = 
[[GCKMediaInformation alloc] initWithContentID: 
streamURL 
            streamType:GCKMediaStreamTypeLive 
            contentType:@"audio/mp3" 
             metadata:metadata 
           streamDuration:0 
            customData:nil]; 

//cast audio 
[_mediaControlChannel loadMedia:mediaInformation autoplay:TRUE playPosition:0]; 

我如何更新只是爲這個媒體項目的元數據(標題,副標題和圖像)無需重新加載音頻流?我不希望播放中斷。任何幫助表示讚賞。

+0

嗨Codeman,您是否找到滿足您需求的解決方案?我處於寫定製接收器的相同位置,並想知道你是否成功了? –

回答

1

您需要編寫自己的自定義接收器以便能夠在帶外接收數據;如果您堅持使用Styled/Default接收器,那些接收器將無法接收該類型的消息。要發送純數據到一個接收器,你有兩個選擇:

  • 使用的CustomData字段是在一些媒體的控制命令可用,或
  • 添加一個新的命名空間和使用,只要你要發送的數據。

第一個選項僅限於在嘗試向接收方發送媒體控制命令時足以讓您發送數據的場景。

在你的情況中,最乾淨的解決方案是使用第二個選項,但你可以使用第一個選項併發送一個元數據集合,例如,當你加載媒體,然後在接收器上有一個自定義邏輯根據您自己的邏輯提取收集和更新元數據(例如定期)。如果這符合你的要求,那麼你將不需要一個新的命名空間,但是它有其侷限性,創建一個命名空間是非常簡單的。

+0

謝謝阿里。您是否可以通過更新元數據來指向我的名稱空間解決方案示例代碼的正確方向?每當歌曲在我的音頻流中發生變化時,我都需要更新元數據。謝謝。 – codeman

+0

這很簡單,請看看這個Github項目:https://github.com/googlecast/CastHelloText-android,其中設置了一個簡單的頻道/名稱空間來與接收器進行通信。接收器代碼也在那裏,所以你可以看到兩端。 –

+0

還有一個類似的ios示例,它做同樣的事情:https://github.com/googlecast/CastHelloText-ios –