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

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

GCKMediaTrack đại diện cho một đường đi. Mã này bao gồm một mã nhận dạng duy nhất ở dạng số và chẳng hạn như Content ID và tiêu đề. Một thực thể GCKMediaTrack có thể là được tạo 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)
Mục tiêu-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 nhạc; 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. Cách liên kết một bộ sưu tập Đối tượng GCKMediaTrack với một mục nội dung nghe nhìn, ứng dụng của bạn nên 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 phương tiện đến thiết 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()
Mục tiêu-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 kênh được liên kết với mục nội dung đa phương tiện (sau đã tải nội dung nghe nhìn) bằng cách gọi -[setActiveTrackIDs:] trên GCKRemoteMediaClient và chuyển mã của các kênh cần kích hoạt. Ví dụ: như sau sẽ kích hoạt bản phụ đề đã tạo ở trên.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Mục tiêu-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

Để tắt một bản nhạc trên mục nội dung nghe nhìn hiện tại, hãy gọi -[setActiveTrackIDs:] trên GCKRemoteMediaClient có một mảng trống hoặc không có gì. Mã sau đây sẽ tắt bản phụ đề.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Mục tiêu-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

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

Chiến lược phát hành đĩa đơn GCKMediaTextTrackStyle lớp đóng gói thông tin kiểu của văn bản theo dõi. Kiểu bản nhạc có thể là đã áp dụng cho mục nội dung nghe nhìn đang phát bằng cách gọi -[GCKRemoteMediaClient setTextTrackStyle]. Kiểu theo dõi đượ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
Mục tiêu-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 hàm được trả về Đối tượng GCKRequest cho 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
  }
}
Mục tiêu-C
#pragma mark - GCKRequestDelegate

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

Xem 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 văn bản theo dõi lượt chuyển đổi thông qua chế độ cài đặt do hệ thống hoặc chính ứng dụng cung cấp. Bạn có thể truy xuất kiểu mặc định (trong iOS 7 trở lên) thông qua phương thức tĩnh +[GCKMediaTextTrackStyle createDefault]. Bạn có thể thay đổi các thành phần kiểu theo dõi văn bản sau đây:

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

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

Để truyền 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 cần CORS nếu có Bản nhạc. Nếu bạn muốn bật Bản nhạc cho mọi nội dung nghe nhìn, bạn phải bật CORS cho cả hai bản nhạc của mình và luồng nội dung đa phương tiện của bạ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ủ của bạn, sau đó bạn thêm phụ đề đơn giản bản nhạc, 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ủ của mình để bao gồ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. Lưu ý rằng hai tiêu đề cuối cùng là các tiêu đề bổ sung mà trước đây bạn có thể chưa cần đến.