미디어 트랙 사용

미디어 트랙은 오디오 또는 동영상 스트림 객체나 텍스트 객체 (자막 또는 자막)일 수 있습니다.

GCKMediaTrack 객체는 트랙을 나타냅니다. 고유 숫자 식별자와 기타 속성(예: 콘텐츠 ID, 제목)으로 구성됩니다. GCKMediaTrack 인스턴스는 다음과 같이 만들 수 있습니다.

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];

미디어 항목에는 여러 트랙이 있을 수 있습니다. 예를 들어 여러 자막 (각각 다른 언어) 또는 여러 대체 오디오 스트림(서로 다른 언어)이 있을 수 있습니다. GCKMediaInformation는 미디어 항목을 나타내는 클래스입니다. GCKMediaTrack 객체 컬렉션을 미디어 항목과 연결하려면 앱에서 mediaTracks 속성을 업데이트해야 합니다. 앱은 다음 코드와 같이 미디어를 수신기에 로드하기 전에 이 연결을 만들어야 합니다.

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];

GCKRemoteMediaClient에서 -[setActiveTrackIDs:]를 호출하고 활성화할 트랙의 ID를 전달하여 미디어가 로드된 후 미디어 항목과 연결된 하나 이상의 트랙을 활성화합니다. 예를 들어 다음 코드는 위에서 만든 자막 트랙을 활성화합니다.

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

현재 미디어 항목에서 트랙을 비활성화하려면 GCKRemoteMediaClient에서 빈 배열이나 nil을 사용하여 -[setActiveTrackIDs:]를 호출합니다. 다음 코드는 자막 트랙을 사용 중지합니다.

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

텍스트 트랙 스타일 지정

GCKMediaTextTrackStyle 클래스는 텍스트 트랙의 스타일 정보를 캡슐화합니다. 트랙 스타일은 -[GCKRemoteMediaClient setTextTrackStyle]를 호출하여 현재 재생 중인 미디어 항목에 적용할 수 있습니다. 아래 코드에서 생성된 트랙 스타일은 텍스트를 50% 불투명도 (80)로 빨간색(FF)으로 바꾸고 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;

반환된 GCKRequest 객체를 사용하여 이 요청을 추적할 수 있습니다.

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;
  }
}

자세한 내용은 아래의 상태 업데이트를 참고하세요. 앱은 사용자가 시스템 또는 앱 자체에서 제공하는 설정을 사용하여 텍스트 트랙의 스타일을 업데이트할 수 있도록 허용해야 합니다. iOS 7 이상에서는 정적 메서드 +[GCKMediaTextTrackStyle createDefault]를 통해 가져올 수 있는 기본 스타일이 제공됩니다. 다음 텍스트 트랙 스타일 요소를 변경할 수 있습니다.

  • 포그라운드 (텍스트) 색상 및 불투명도
  • 배경 색상 및 불투명도
  • 가장자리 유형
  • 가장자리 색상
  • 글꼴 크기
  • 글꼴 모음
  • 글꼴 스타일

상태 업데이트 수신

여러 발신자가 동일한 수신자에 연결되면 이러한 변경사항이 다른 발신자에서 시작되었더라도 각 발신자가 수신자의 변경사항을 알고 있어야 합니다.

발신자가 수신자로부터 상태 업데이트를 수신하도록 하려면 앱에서 GCKRemoteMediaClientListener를 등록해야 합니다. 현재 미디어의 GCKMediaTextTrackStyle가 변경되면 연결된 모든 발신자는 -[remoteMediaClient:didUpdateMediaMetadata:]-[remoteMediaClient:didUpdateMediaStatus:] 콜백을 통해 알림을 받습니다. 이 경우 수신기 SDK는 새 스타일이 이전 스타일과 다른지 확인하지 않으며 연결된 모든 발신자에 관계없이 알립니다. 그러나 활성 트랙 목록이 업데이트되면 연결된 발신자의 -[remoteMediaClient:didUpdateMediaStatus:]에만 알림이 전송됩니다.

CORS 요구사항 충족

적응형 미디어 스트리밍의 경우 Google Cast에는 CORS 헤더가 있어야 하지만 간단한 mp4 미디어 스트림도 트랙을 포함하는 경우 CORS가 필요합니다. 미디어에 트랙을 사용 설정하려면 트랙 스트림과 미디어 스트림 모두에 CORS를 사용 설정해야 합니다. 따라서 서버의 간단한 mp4 미디어에 사용할 수 있는 CORS 헤더가 없는 상태에서 간단한 자막 트랙을 추가하면 적절한 CORS 헤더를 포함하도록 서버를 업데이트하지 않으면 미디어를 스트리밍할 수 없습니다. 또한 최소한 Content-Type, Accept-Encoding, Range 헤더는 허용해야 합니다. 마지막 두 헤더는 이전에 필요하지 않았을 수 있는 추가 헤더입니다.