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

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

Đối tượng GCKMediaTrack đại diện cho một bản nhạc. Mã này bao gồm một mã nhận dạng bằng số duy nhất và các thuộc tính khác, chẳng hạn như mã nhận dạng nội dung 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 nghe nhìn có thể có nhiều bản phụ đề; ví dụ: mục đó 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ế (cho nhiều ngôn ngữ). GCKMediaInformation là lớp đại diện cho một mục nội dung nghe nhìn. Để liên kết một tập hợp các đối tượng GCKMediaTrack với một mục nội dung nghe nhìn, ứng dụng của bạn phải cập nhật thuộc tính mediaTracks. Ứng dụng của bạn cần tạo mối liên kết này trước khi tải nội dung nghe nhìn vào bộ 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 phụ đề được liên kết với mục nội dung nghe nhìn (sau khi nội dung nghe nhì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 phụ đề cần kích hoạt. Ví dụ: mã sau đây kích hoạt bản phụ đề được 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 phụ đề trên mục nội dung nghe nhìn hiện tại, hãy gọi -[setActiveTrackIDs:] trên GCKRemoteMediaClient bằng một mảng trống hoặc giá trị rỗng. Đoạn mã sau đây sẽ tắt bản phụ đề.

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

Tạo kiểu cho lớp phụ đề

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

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ể 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 phụ đề, 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, có thể 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ử sau đây trong kiểu phụ đề:

  • Độ mờ và màu nền trước (văn bản)
  • 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 người nhận, điều quan trọng là mỗi người gửi phải biết về các thay đổi trên người nhận, ngay cả khi những thay đổi đó được bắt đầu từ những người gửi khác.

Để đả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 phải đăng ký GCKRemoteMediaClientListener. Nếu GCKMediaTextTrackStyle của nội dung nghe nhìn hiện tại thay đổi, thì tất cả các nguồn gửi được kết nối sẽ được thông báo thông qua cả lệnh gọi lại -[remoteMediaClient:didUpdateMediaMetadata:] và -[remoteMediaClient:didUpdateMediaStatus:]. Trong trường hợp này, Receiver SDK không xác minh xem kiểu mới có khác với kiểu trước đó hay không và thông báo cho tất cả người gửi đã kết nối bất kể điều gì. Tuy nhiên, nếu danh sách các bản nhạc đang hoạt động được cập nhật, thì chỉ -[remoteMediaClient:didUpdateMediaStatus:] trong danh sách người gửi được kết nối mới nhận được thông báo.

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

Đối với tính năng truyền phát trực tuyến nội dung nghe nhìn thích ứng, Google Cast yêu cầu phải có tiêu đề CORS, nhưng ngay cả các luồng nội dung nghe nhìn mp4 đơn giản cũng yêu cầu CORS nếu chúng có chứa Tracks. Nếu muốn bật Phụ đề cho bất kỳ nội dung nghe nhìn nào, bạn phải bật CORS cho cả luồng phụ đề và luồng nội dung nghe nhìn. Vì vậy, nếu không có tiêu đề CORS cho tệp nội dung nghe nhìn mp4 đơn giản trên máy chủ và sau đó bạn thêm một tệp phụ đề đơn giản, thì bạn sẽ không thể phát trực tuyến nội dung nghe nhìn trừ phi bạn cập nhật máy chủ để thêm tiêu đề CORS thích 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. Xin lưu ý rằng 2 tiêu đề cuối cùng là các tiêu đề bổ sung mà trước đây bạn có thể không cần.