แทร็กสื่ออาจเป็นออบเจ็กต์สตรีมเสียงหรือวิดีโอ หรือออบเจ็กต์ข้อความ (คำบรรยาย) หรือคำบรรยายภาพ)
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
และการส่งรหัสของแทร็กเพื่อเปิดใช้งาน ตัวอย่างเช่น URL ต่อไปนี้
โค้ดจะเปิดใช้งานแทร็กคำบรรยายแทนเสียงที่สร้างไว้ข้างต้น
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];
ในการปิดใช้งานแทร็กในรายการสื่อปัจจุบัน ให้เรียกใช้
-[setActiveTrackIDs:]
เปิดอยู่
GCKRemoteMediaClient
ด้วยอาร์เรย์หรือค่าว่าง โค้ดต่อไปนี้ปิดใช้แทร็กคำบรรยายแทนเสียง
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
จัดรูปแบบแทร็กข้อความ
GCKMediaTextTrackStyle
class จะสรุปข้อมูลรูปแบบของแทร็กข้อความ รูปแบบแทร็กสามารถเป็น
ใช้กับรายการสื่อที่กำลังเล่นอยู่โดยการเรียก
-[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:]
Callback ในกรณีนี้ ค่า
SDK ตัวรับไม่ได้ตรวจสอบว่ารูปแบบใหม่แตกต่างจาก
ก่อนหน้าและแจ้งเตือนผู้ส่งที่เชื่อมโยงทั้งหมดโดยไม่คำนึงถึง แต่ถ้า
รายการแทร็กที่ใช้งานอยู่จะได้รับการอัปเดต เฉพาะ
-[remoteMediaClient:didUpdateMediaStatus:]
ในผู้ส่งที่เชื่อมต่อจะ
การแจ้งเตือน
เป็นไปตามข้อกำหนดของ CORS
Google Cast ต้องมีส่วนหัว CORS สำหรับการสตรีมสื่อแบบปรับอัตโนมัติ แต่แม้แต่สตรีมสื่อ mp4 ธรรมดาๆ ก็ต้องมี CORS ถ้ามีแทร็กรวมอยู่ด้วย หากคุณ หากต้องการเปิดใช้แทร็กสำหรับสื่อใดก็ตาม คุณต้องเปิดใช้ CORS สำหรับทั้งแทร็ก และสตรีมสื่อของคุณ ดังนั้นถ้าคุณไม่มีส่วนหัว CORS สำหรับสื่อ mp4 อย่างง่ายบนเซิร์ฟเวอร์ แล้วเพิ่มคำบรรยายสั้นๆ คุณจะไม่สามารถสตรีมสื่อได้จนกว่าคุณจะอัปเดตเซิร์ฟเวอร์ ใส่ส่วนหัว CORS ที่เหมาะสม นอกจากนี้ คุณต้องอนุญาต ส่วนหัวต่อไปนี้: ประเภทเนื้อหา การยอมรับการเข้ารหัส และช่วง โปรดทราบว่า ส่วนหัว 2 รายการสุดท้ายเป็นส่วนหัวเพิ่มเติมที่คุณอาจไม่จำเป็นต้องใช้ก่อนหน้านี้