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