Sử dụng bản nhạc đa phương tiện

Bản nội dung nghe nhìn có thể là đối tượng luồng âm thanh hoặc video hoặc đối tượng văn bản (phụ đề).

Đối tượng GCKMediaTrack đại diện cho một kênh. Thuộc tính này bao gồm một giá trị nhận dạng dạng số duy nhất và các thuộc tính khác như Content ID và tiêu đề. Bạn có thể tạo một thực thể GCKMediaTrack như sau:

Swift
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)
Objective-C
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];

Một mục nội dung đa phương tiện có thể có nhiều bản âm thanh; ví dụ: có thể có nhiều phụ đề (mỗi phụ đề cho một ngôn ngữ khác nhau) hoặc nhiều luồng âm thanh thay thế (dành cho các ngôn ngữ khác nhau). GCKMediaInformation là lớp đại diện cho một mục nội dung đa phương tiện. Để liên kết một tập hợp đối tượng GCKMediaTrack với một mục nội dung nghe nhìn, ứng dụng của bạn cần cập nhật thuộc tính mediaTracks của mục đó. Ứng dụng của bạn cần thực hiện mối liên kết này trước khi tải nội dung nghe nhìn cho trình nhận, như trong mã sau:

Swift
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()
Objective-C
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];

Kích hoạt một hoặc nhiều bản nhạc được liên kết với mục nội dung đa phương tiện (sau khi nội dung đa phương tiện được tải) bằng cách gọi -[setActiveTrackIDs:] trên GCKRemoteMediaClient và truyền mã nhận dạng của các bản nhạc để kích hoạt. Ví dụ: mã sau đây kích hoạt bản phụ đề đã tạo ở trên.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

Để huỷ kích hoạt một bản nhạc trên mục nội dung đa phương tiện hiện tại, hãy gọi -[setActiveTrackIDs:] trên GCKRemoteMediaClient với một mảng trống hoặc nil. Mã sau đây tắt bản phụ đề.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

Tạo kiểu cho đoạn văn bản

Lớp GCKMediaTextTrackStyle đóng gói thông tin về kiểu của một bản văn bản. Bạn có thể áp dụng kiểu bản nhạc cho mục nội dung đa phương tiện đang phát bằng cách gọi -[GCKRemoteMediaClient setTextTrackStyle]. Kiểu bản nhạc được tạo trong mã bên dưới chuyển văn bản thành màu đỏ (FF) với độ mờ 50% (80) và đặt phông chữ serif.

Swift
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
Objective-C
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;

Bạn có thể sử dụng đối tượng GCKRequest được trả về để theo dõi yêu cầu này.

Swift
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
Objective-C
#pragma mark - GCKRequestDelegate

- (void)requestDidComplete:(GCKRequest *)request {
  if (request == self.styleChangeRequest) {
    NSLog(@"Style update completed.");
    self.styleChangeRequest = nil;
  }
}

Hãy xem phần Thông tin cập nhật về trạng thái bên dưới để biết thêm thông tin. Ứng dụng phải cho phép người dùng cập nhật kiểu cho các bản nhạc văn bản, bằng cách sử dụng chế độ cài đặt do hệ thống cung cấp hoặc do chính ứng dụng cung cấp. Có một kiểu mặc định được cung cấp (trong iOS 7 trở lên) và có thể được truy xuất thông qua phương thức tĩnh +[GCKMediaTextTrackStyle createDefault]. Bạn có thể thay đổi các phần tử kiểu theo dõi văn bản sau đây:

  • Màu và độ mờ (văn bản) của nền trước
  • Màu nền và độ mờ nền
  • Loại viền
  • Màu viền
  • Tỷ lệ phông chữ
  • Họ phông chữ
  • Kiểu phông chữ

Nhận thông tin cập nhật về trạng thái

Khi nhiều người gửi được kết nối với cùng một trình nhận, điều quan trọng là mỗi người gửi phải biết về những thay đổi trên trình nhận ngay cả khi những thay đổi đó là do những người gửi khác khởi tạo.

Để đảm bảo người gửi nhận được thông tin cập nhật trạng thái từ người nhận, ứng dụng của bạn nên đăng ký GCKRemoteMediaClientListener. Nếu GCKMediaTextTrackStyle của nội dung đa phương tiện hiện tại thay đổi, thì tất cả người gửi đã kết nối sẽ được thông báo thông qua cả lệnh gọi lại -[remoteMediaClient:didUpdateMediaMetadata:]-[remoteMediaClient:didUpdateMediaStatus:]. Trong trường hợp này, SDK người nhận không xác minh liệu kiểu mới có khác với kiểu trước đó hay không và sẽ thông báo cho tất cả người gửi được kết nối bất kể kiểu đó. Tuy nhiên, nếu danh sách các kênh đang hoạt động được cập nhật thì chỉ có -[remoteMediaClient:didUpdateMediaStatus:] trong người gửi đã kết nối được thông báo.

Đáp ứng các yêu cầu của CORS

Để phát trực tuyến nội dung nghe nhìn thích ứng, Google Cast yêu cầu phải có các tiêu đề CORS, nhưng ngay cả các luồng nội dung đa phương tiện mp4 đơn giản cũng cần có CORS nếu bao gồm các Tuyến đường. Nếu muốn bật Kênh cho mọi nội dung nghe nhìn, bạn phải bật CORS cho cả luồng bản nhạc và luồng nội dung đa phương tiện. Vì vậy, nếu bạn không có sẵn tiêu đề CORS cho nội dung nghe nhìn mp4 đơn giản trên máy chủ, sau đó bạn thêm bản phụ đề đơn giản, bạn sẽ không thể truyền nội dung đa phương tiện trừ khi bạn cập nhật máy chủ của mình để bao gồm tiêu đề CORS phù hợp. Ngoài ra, bạn cần cho phép ít nhất các tiêu đề sau: Content-Type, Accept-Encoding và Range. Lưu ý rằng 2 tiêu đề cuối cùng là các tiêu đề bổ sung mà có thể trước đây bạn không cần đến.