การใช้แทร็กสื่อ

แทร็กสื่ออาจเป็นออบเจ็กต์สตรีมเสียงหรือวิดีโอ หรือออบเจ็กต์ข้อความ (คำบรรยาย) หรือคำบรรยายภาพ)

GCKMediaTrack แสดงแทร็ก ซึ่งประกอบด้วยตัวระบุตัวเลขที่ไม่ซ้ำกัน และ เช่น รหัสเนื้อหาและชื่อ คุณจะสร้างอินสแตนซ์ GCKMediaTrack ได้ สร้างขึ้นดังนี้

Swift
let captionsTrack = GCKMediaTrack.init(identifier: 1,
                                       contentIdentifier: "https://some-url/caption_en.vtt",
                                       contentType: "text/vtt",
                                       type: GCKMediaTrackType.text,
                                       textSubtype: GCKMediaTextTrackSubtype.captions,
                                       name: "English Captions",
                                       languageCode: "en",
                                       customData: nil)
Objective-C
GCKMediaTrack *captionsTrack =
      [[GCKMediaTrack alloc] initWithIdentifier:1
                              contentIdentifier:@"https://some-url/caption_en.vtt"
                                    contentType:@"text/vtt"
                                           type:GCKMediaTrackTypeText
                                    textSubtype:GCKMediaTextTrackSubtypeCaptions
                                           name:@"English Captions"
                                   languageCode:@"en"
                                     customData:nil];

รายการสื่อหนึ่งๆ สามารถมีหลายแทร็กได้ เช่น สามารถมีได้ คำบรรยาย (แต่ละรายการสำหรับภาษาอื่น) หรือสตรีมเสียงทางเลือกต่างๆ (สำหรับภาษาต่างๆ) GCKMediaInformation คือคลาสที่แสดงรายการสื่อ หากต้องการเชื่อมโยงคอลเล็กชันของ ออบเจ็กต์ GCKMediaTrack รายการ ด้วยรายการสื่อ แอปของคุณควรอัปเดต พร็อพเพอร์ตี้ mediaTracks แอปของคุณต้องทำการเชื่อมโยงนี้ก่อนที่จะโหลด สื่อไปยังผู้รับ ดังในโค้ดต่อไปนี้

Swift
let tracks = [captionsTrack]

let url = URL.init(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
guard let mediaURL = url else {
  print("invalid mediaURL")
  return
}

let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentURL: mediaURL)
mediaInfoBuilder.streamType = GCKMediaStreamType.none;
mediaInfoBuilder.contentType = "video/mp4"
mediaInfoBuilder.metadata = metadata;
mediaInfoBuilder.mediaTracks = tracks;
mediaInformation = mediaInfoBuilder.build()
Objective-C
NSArray *tracks = @[captionsTrack];

GCKMediaInformationBuilder *mediaInfoBuilder =
  [[GCKMediaInformationBuilder alloc] initWithContentURL:
   [NSURL URLWithString:@"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"]];
mediaInfoBuilder.streamType = GCKMediaStreamTypeNone;
mediaInfoBuilder.contentType = @"video/mp4";
mediaInfoBuilder.metadata = metadata;
mediaInfoBuilder.mediaTracks = tracks;
self.mediaInformation = [mediaInfoBuilder build];

เปิดใช้งานแทร็กอย่างน้อย 1 แทร็กที่เชื่อมโยงกับรายการสื่อ (หลัง โหลดสื่อแล้ว) โดยเรียกใช้ -[setActiveTrackIDs:] ใน GCKRemoteMediaClient และการส่งรหัสของแทร็กเพื่อเปิดใช้งาน ตัวอย่างเช่น URL ต่อไปนี้ โค้ดจะเปิดใช้งานแทร็กคำบรรยายแทนเสียงที่สร้างไว้ข้างต้น

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

ในการปิดใช้งานแทร็กในรายการสื่อปัจจุบัน ให้เรียกใช้ -[setActiveTrackIDs:]เปิดอยู่ GCKRemoteMediaClient ด้วยอาร์เรย์หรือค่าว่าง โค้ดต่อไปนี้ปิดใช้แทร็กคำบรรยายแทนเสียง

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

จัดรูปแบบแทร็กข้อความ

GCKMediaTextTrackStyle class จะสรุปข้อมูลรูปแบบของแทร็กข้อความ รูปแบบแทร็กสามารถเป็น ใช้กับรายการสื่อที่กำลังเล่นอยู่โดยการเรียก -[GCKRemoteMediaClient setTextTrackStyle] รูปแบบแทร็กที่สร้างในโค้ดด้านล่างจะเปลี่ยนเป็นข้อความสีแดง (FF) ที่ความทึบแสง 50% (80) และตั้งค่าแบบอักษร Serif

Swift
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
Objective-C
GCKMediaTextTrackStyle *textTrackStyle = [GCKMediaTextTrackStyle createDefault];
[textTrackStyle setForegroundColor:[[GCKColor alloc] initWithCSSString:@"#FF000080"]];
[textTrackStyle setFontFamily:@"serif"];
self.styleChangeRequest = [self.sessionManager.currentSession.remoteMediaClient setTextTrackStyle:textTrackStyle];
self.styleChangeRequest.delegate = self;

คุณสามารถใช้ GCKRequest ของออบเจ็กต์สำหรับ การติดตามคำขอนี้

Swift
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
Objective-C
#pragma mark - GCKRequestDelegate

- (void)requestDidComplete:(GCKRequest *)request {
  if (request == self.styleChangeRequest) {
    NSLog(@"Style update completed.");
    self.styleChangeRequest = nil;
  }
}

ดูการอัปเดตสถานะ ด้านล่างสำหรับข้อมูลเพิ่มเติม แอปควรอนุญาตให้ผู้ใช้อัปเดตสไตล์ของข้อความ ติดตาม โดยใช้การตั้งค่าที่ได้รับจากระบบหรือโดยตัวแอปเอง มีรูปแบบเริ่มต้นที่ระบุ (ใน iOS 7 ขึ้นไป) ซึ่งดึงข้อมูลได้ ผ่านเมธอดแบบคงที่ +[GCKMediaTextTrackStyle createDefault] องค์ประกอบรูปแบบแทร็กข้อความต่อไปนี้สามารถเปลี่ยนแปลงได้

  • สีและความทึบแสงของพื้นหน้า (ข้อความ)
  • สีและความโปร่งแสงของพื้นหลัง
  • ชนิดขอบ
  • สีขอบ
  • สเกลแบบอักษร
  • ชุดแบบอักษร
  • รูปแบบตัวอักษร

รับการอัปเดตสถานะ

เมื่อผู้ส่งหลายคนเชื่อมต่อกับผู้รับเดียวกัน สิ่งสำคัญคือสิ่งสำคัญ ให้ผู้ส่งแต่ละรายทราบการเปลี่ยนแปลงในส่วนรับ การเปลี่ยนแปลงเกิดขึ้นจากผู้ส่งรายอื่น

เพื่อให้มั่นใจว่าผู้ส่งของคุณจะได้รับการอัปเดตสถานะจากผู้รับ แอปของคุณควร ลงทะเบียน GCKRemoteMediaClientListener หาก GCKMediaTextTrackStyle ของการเปลี่ยนแปลงสื่อในปัจจุบัน ผู้ส่งที่เชื่อมต่อทั้งหมดจะได้รับแจ้ง ผ่านทั้ง -[remoteMediaClient:didUpdateMediaMetadata:] และ -[remoteMediaClient:didUpdateMediaStatus:] Callback ในกรณีนี้ ค่า SDK ตัวรับไม่ได้ตรวจสอบว่ารูปแบบใหม่แตกต่างจาก ก่อนหน้าและแจ้งเตือนผู้ส่งที่เชื่อมโยงทั้งหมดโดยไม่คำนึงถึง แต่ถ้า รายการแทร็กที่ใช้งานอยู่จะได้รับการอัปเดต เฉพาะ -[remoteMediaClient:didUpdateMediaStatus:] ในผู้ส่งที่เชื่อมต่อจะ การแจ้งเตือน

เป็นไปตามข้อกำหนดของ CORS

Google Cast ต้องมีส่วนหัว CORS สำหรับการสตรีมสื่อแบบปรับอัตโนมัติ แต่แม้แต่สตรีมสื่อ mp4 ธรรมดาๆ ก็ต้องมี CORS ถ้ามีแทร็กรวมอยู่ด้วย หากคุณ หากต้องการเปิดใช้แทร็กสำหรับสื่อใดก็ตาม คุณต้องเปิดใช้ CORS สำหรับทั้งแทร็ก และสตรีมสื่อของคุณ ดังนั้นถ้าคุณไม่มีส่วนหัว CORS สำหรับสื่อ mp4 อย่างง่ายบนเซิร์ฟเวอร์ แล้วเพิ่มคำบรรยายสั้นๆ คุณจะไม่สามารถสตรีมสื่อได้จนกว่าคุณจะอัปเดตเซิร์ฟเวอร์ ใส่ส่วนหัว CORS ที่เหมาะสม นอกจากนี้ คุณต้องอนุญาต ส่วนหัวต่อไปนี้: ประเภทเนื้อหา การยอมรับการเข้ารหัส และช่วง โปรดทราบว่า ส่วนหัว 2 รายการสุดท้ายเป็นส่วนหัวเพิ่มเติมที่คุณอาจไม่จำเป็นต้องใช้ก่อนหน้านี้