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

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

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

สวิฟต์
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)
วัตถุประสงค์-ค
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 แอปของคุณต้องทำการเชื่อมโยงนี้ก่อนที่จะโหลดสื่อไปยังผู้รับ ดังที่ระบุไว้ในโค้ดต่อไปนี้

สวิฟต์
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()
วัตถุประสงค์-ค
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 แล้วส่งรหัสของแทร็กเพื่อเปิดใช้งาน ตัวอย่างเช่น โค้ดต่อไปนี้จะเปิดใช้งานแทร็กคำบรรยายที่สร้างไว้ข้างต้น

สวิฟต์
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
วัตถุประสงค์-ค
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

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

สวิฟต์
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
วัตถุประสงค์-ค
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

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

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

สวิฟต์
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
วัตถุประสงค์-ค
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 ที่แสดงผลเพื่อติดตามคำขอนี้ได้

สวิฟต์
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
วัตถุประสงค์-ค
#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:] ในกรณีนี้ SDK ตัวรับจะไม่ยืนยันว่าสไตล์ใหม่แตกต่างจากสไตล์ก่อนหน้าหรือไม่ และจะแจ้งเตือนผู้ส่งที่เชื่อมต่อทั้งหมด อย่างไรก็ตาม หากมีการอัปเดตรายชื่อแทร็กที่มีการใช้งานอยู่ ระบบจะแจ้งเตือนเฉพาะ -[remoteMediaClient:didUpdateMediaStatus:] ในผู้ส่งที่เชื่อมต่อ

ปฏิบัติตามข้อกำหนด CORS

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