แทร็กสื่ออาจเป็นออบเจ็กต์สตรีมเสียงหรือวิดีโอ หรือออบเจ็กต์ข้อความ (คำบรรยายแทนเสียง หรือคำบรรยาย)
ออบเจ็กต์ 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:] on
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; } }
ดูข้อมูลเพิ่มเติมได้ที่การอัปเดตสถานะ
ด้านล่าง แอปควรอนุญาตให้ผู้ใช้อัปเดตสไตล์สำหรับแทร็กข้อความ
โดยใช้การตั้งค่าที่ระบบมีให้หรือโดยแอปเอง
มีสไตล์เริ่มต้นให้ใช้งาน ซึ่งสามารถเรียกข้อมูลได้
ผ่านเมธอดแบบคงที่ +[GCKMediaTextTrackStyle
createDefault]
คุณเปลี่ยนองค์ประกอบรูปแบบแทร็กข้อความต่อไปนี้ได้
- สีและความทึบแสงของพื้นหน้า (ข้อความ)
- สีและความโปร่งแสงของพื้นหลัง
- ชนิดขอบ
- สีขอบ
- การปรับขนาดแบบอักษร
- ชุดแบบอักษร
- รูปแบบตัวอักษร
รับข้อมูลอัปเดตสถานะ
เมื่อเชื่อมต่อผู้ส่งหลายรายกับผู้รับรายเดียวกัน สิ่งสำคัญคือ ผู้ส่งแต่ละรายต้องทราบการเปลี่ยนแปลงในผู้รับ แม้ว่าการเปลี่ยนแปลงเหล่านั้น จะเริ่มต้นจากผู้ส่งรายอื่นก็ตาม
หากต้องการให้ผู้ส่งได้รับข้อมูลอัปเดตสถานะจากผู้รับ แอปของคุณควรลงทะเบียน GCKRemoteMediaClientListener
หาก
GCKMediaTextTrackStyle
ของสื่อปัจจุบันมีการเปลี่ยนแปลง ระบบจะแจ้งเตือนผู้ส่งที่เชื่อมต่อทั้งหมด
ผ่านทั้ง
-[remoteMediaClient:didUpdateMediaMetadata:] และ
-[remoteMediaClient:didUpdateMediaStatus:] ในกรณีนี้
Receiver SDK จะไม่ตรวจสอบว่าสไตล์ใหม่แตกต่างจากสไตล์
ก่อนหน้าหรือไม่ และจะแจ้งให้ผู้ส่งที่เชื่อมต่อทั้งหมดทราบโดยไม่คำนึงถึงความแตกต่าง อย่างไรก็ตาม หากมีการอัปเดตรายการแทร็กที่ใช้งานอยู่ ระบบจะแจ้งเตือนเฉพาะ-[remoteMediaClient:didUpdateMediaStatus:] ในผู้ส่งที่เชื่อมต่อ
ปฏิบัติตามข้อกำหนดของ CORS
สำหรับการสตรีมสื่อแบบปรับอัตรา Google Cast กำหนดให้ต้องมีส่วนหัว CORS แต่แม้แต่สตรีมสื่อ mp4 แบบง่ายๆ ก็ต้องใช้ CORS หากมีแทร็ก หากต้องการเปิดใช้แทร็กสำหรับสื่อใดก็ตาม คุณต้องเปิดใช้ CORS สำหรับทั้งสตรีมแทร็กและสตรีมสื่อ ดังนั้น หากไม่มีส่วนหัว CORS สำหรับสื่อ mp4 อย่างง่ายในเซิร์ฟเวอร์ และคุณเพิ่มแทร็กคำบรรยายแทนเสียงอย่างง่าย คุณจะสตรีมสื่อไม่ได้จนกว่าจะอัปเดตเซิร์ฟเวอร์ให้มีส่วนหัว CORS ที่เหมาะสม นอกจากนี้ คุณต้องอนุญาตส่วนหัวต่อไปนี้อย่างน้อย Content-Type, Accept-Encoding และ Range โปรดทราบว่า ส่วนหัว 2 รายการสุดท้ายเป็นส่วนหัวเพิ่มเติมที่คุณอาจไม่จำเป็นต้องใช้ก่อนหน้านี้