미디어 트랙 사용

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

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

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

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

텍스트 트랙 스타일 지정

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

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

자세한 내용은 아래의 상태 업데이트를 참고하세요. 앱은 시스템에서 제공하는 설정이나 앱 자체를 사용하여 사용자가 텍스트 트랙의 스타일을 업데이트할 수 있도록 허용해야 합니다. 기본 스타일이 제공되며, 정적 메서드 +[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 헤더를 하나 이상 허용해야 합니다. 마지막 두 헤더는 이전에 필요하지 않았을 수 있는 추가 헤더입니다.