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