미디어 트랙 사용

MediaTrack 드림 는 오디오 스트림, 동영상 스트림 또는 텍스트일 수 있는 미디어 트랙을 나타냅니다. (예: 자막) 앱을 그룹화하고, 스타일을 지정하고, 활성화할 수 있습니다. 찾을 수 있습니다.

트랙 구성

트랙을 구성하고 트랙에 고유 ID를 할당할 수 있습니다. 다음 코드는 를 만들면 영어 텍스트 트랙, 프랑스어 텍스트 트랙, 프랑스어 오디오 트랙이 만들어집니다. 고유 ID가 있습니다.

Kotlin
val englishSubtitle = MediaTrack.Builder(1 /* ID */, MediaTrack.TYPE_TEXT)
    .setName("English Subtitle")
    .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
    .setContentId("https://some-url/caption_en.vtt")
    /* language is required for subtitle type but optional otherwise */
    .setLanguage("en-US")
    .build()

val frenchSubtitle = MediaTrack.Builder(2, MediaTrack.TYPE_TEXT)
    .setName("French Subtitle")
    .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
    .setContentId("https://some-url/caption_fr.vtt")
    .setLanguage("fr")
    .build()

val frenchAudio = MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO)
    .setName("French Audio")
    .setContentId("trk0001")
    .setLanguage("fr")
    .build()
드림
<ph type="x-smartling-placeholder">
</ph>
자바
MediaTrack englishSubtitle = new MediaTrack.Builder(1 /* ID */,
MediaTrack.TYPE_TEXT)
  .setName("English Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
  .setContentId("https://some-url/caption_en.vtt")
  /* language is required for subtitle type but optional otherwise */
  .setLanguage("en-US")
  .build();

MediaTrack frenchSubtitle = new MediaTrack.Builder(2, MediaTrack.TYPE_TEXT)
  .setName("French Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
  .setContentId("https://some-url/caption_fr.vtt")
  .setLanguage("fr")
  .build();

MediaTrack frenchAudio = new MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO)
  .setName("French Audio")
  .setContentId("trk0001")
  .setLanguage("fr")
  .build();

그룹 트랙

여러 트랙을 미디어 항목으로 그룹화할 수 있습니다. 미디어 항목은 MediaInfo MediaInfo의 인스턴스 는 트랙의 배열을 가져오고 미디어 항목에 대한 기타 정보를 집계합니다. 예를 기반으로 앱은 이 세 개의 미디어 트랙을 미디어에 추가할 수 있습니다. 세 개의 트랙 목록을 MediaInfo.Builder.setMediaTracks(List) 로드하기 전에 앱에서 이런 방식으로 MediaInfo의 트랙을 연결해야 합니다. 수신기에 보냅니다.

Kotlin
val tracks: MutableList<MediaTrack> = ArrayList<MediaTrack>()
tracks.add(englishSubtitle)
tracks.add(frenchSubtitle)
tracks.add(frenchAudio)
val mediaInfo = MediaInfo.Builder(url)
    .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
    .setContentType(getContentType())
    .setMetadata(getMetadata())
    .setMediaTracks(tracks)
    .build()
드림
<ph type="x-smartling-placeholder">
</ph>
자바
List tracks = new ArrayList();
tracks.add(englishSubtitle);
tracks.add(frenchSubtitle);
tracks.add(frenchAudio);
MediaInfo mediaInfo = MediaInfo.Builder(url)
  .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
  .setContentType(getContentType())
  .setMetadata(getMetadata())
  .setMediaTracks(tracks)
  .build();

트랙 삭제

현재 미디어에서 모든 트랙을 삭제 (예: 세 개의 동영상 끄기) 예를 들어 자막이 있으면 MediaInfo.Builder.setMediaTracks(List) 드림 빈 ID 목록을 전달합니다.

트랙 업데이트

앱에서 미디어와 연결된 트랙을 하나 이상 활성화할 수 있습니다. 항목 (미디어가 로드된 후)을 전달할 수 있습니다. RemoteMediaClient.setActiveMediaTracks(long[]) 드림 활성화할 트랙의 ID를 전달합니다. 이 예에서는 프랑스어 자막 및 프랑스어 오디오:

Kotlin
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setActiveMediaTracks(longArrayOf(2, 3))
    .setResultCallback(ResultCallback {
            mediaChannelResult: RemoteMediaClient.MediaChannelResult ->
                if (!mediaChannelResult.status.isSuccess) {
                    Log.e(TAG, "Failed with status code:" +
                            mediaChannelResult.status.statusCode
                    )
                }
    })
드림
<ph type="x-smartling-placeholder">
</ph>
자바
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setActiveMediaTracks(new long[]{2, 3})
    .setResultCallback(mediaChannelResult -> {
        if (!mediaChannelResult.getStatus().isSuccess()) {
            Log.e(TAG, "Failed with status code:" +
                    mediaChannelResult.getStatus().getStatusCode());
        }
    });

텍스트 트랙 스타일 지정

TextTrackStyle 드림 는 텍스트 트랙의 스타일 정보를 캡슐화합니다. 생성 또는 업데이트 후 기존 TextTrackStyle을 사용하고 있다면, 해당 스타일을 현재 재생 중인 미디어 항목을 RemoteMediaClient.setTextTrackStyle님, :

Kotlin
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setTextTrackStyle(style)
    .setResultCallback(ResultCallback {
            mediaChannelResult: RemoteMediaClient.MediaChannelResult ->
                if (!mediaChannelResult.status.isSuccess) {
                    Log.e(TAG, "Failed to set the style, status code: " +
                            mediaChannelResult.status.statusCode
                    )
                }
    })
드림
<ph type="x-smartling-placeholder">
</ph>
자바
remoteMediaClient.setTextTrackStyle(style)
    .setResultCallback(mediaChannelResult -> {
        if (!mediaChannelResult.getStatus().isSuccess()) {
            Log.e(TAG, "Failed to set the style, status code: " +
                    mediaChannelResult.getStatus().getStatusCode());
        }
    });

앱에서는 사용자가 시스템 또는 앱 자체에서 제공한 설정입니다. Android KitKat 이상에서 제공하는 시스템 전체 자막 설정을 사용할 수 있습니다. 프레임워크:

Kotlin
val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
드림
<ph type="x-smartling-placeholder">
</ph>
자바
TextTrackStyle textTrackStyle = TextTrackStyle.fromSystemSettings(context);

KitKat 이전 버전의 경우 위의 호출은 필드가 정의되지 않았으므로 앱에서 이 필드를 일부 기본값에 대해 설명합니다. 다음 텍스트에 스타일을 지정할 수 있습니다. 트랙 스타일 요소:

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

예를 들어, 다음과 같이 텍스트 색상을 빨간색 (FF)으로 설정하고 불투명도 50%(80)를 설정합니다.

Kotlin
textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
드림
<ph type="x-smartling-placeholder">
</ph>
자바
textTrackStyle.setForegroundColor(Color.parseColor("#80FF0000"));

KitKat 이상 버전에서는 알림을 받으려면 앱을 등록해야 합니다. 시스템 전체 자막 설정이 업데이트될 때 이를 위해 구현하다 CaptioningManager.CaptioningChangeListener 드림 을 호출한 후 다음을 호출하여 이 리스너를 등록합니다.

Kotlin
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
드림
<ph type="x-smartling-placeholder">
</ph>
자바
CaptioningManager.addCaptioningChangeListener(yourChangeListener);

앱에서 자막 설정이 변경되었다는 콜백을 받으면 새 설정을 추출하고 텍스트의 스타일을 업데이트해야 함 캡션을 호출하여 현재 재생 중인 미디어의 RemoteMediaClient.setTextTrackStyle 드림 새로운 스타일을 전달합니다.

상태 업데이트 받기

여러 발신자가 같은 수신자에게 연결되어 있는 경우 각 발신자가 수신자의 변경사항이 다른 발신자가 보낸 메일입니다.

이를 위해 앱은 RemoteMediaClient.Listener 드림 및 RemoteMediaClient.ProgressListener

만약 TextTrackStyle 드림 현재 미디어가 변경되면 연결된 모든 발신자에게 알림이 전송됩니다. 위의 두 등록된 리스너를 통해 전달됩니다. 이 경우 수신기 SDK는 새로운 스타일이 이전 스타일과 다른지 확인하지 않으며 상관없이 모든 연결된 발신자에게 알립니다. 하지만 RemoteMediaClient.ProgressListener만 연결된 발신자에게 알림이 전송됩니다.

CORS 요구사항 충족

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