MediaTrack
드림
는 오디오 스트림, 동영상 스트림 또는 텍스트일 수 있는 미디어 트랙을 나타냅니다.
(예: 자막) 앱을 그룹화하고, 스타일을 지정하고, 활성화할 수 있습니다.
찾을 수 있습니다.
트랙 구성
트랙을 구성하고 트랙에 고유 ID를 할당할 수 있습니다. 다음 코드는 를 만들면 영어 텍스트 트랙, 프랑스어 텍스트 트랙, 프랑스어 오디오 트랙이 만들어집니다. 고유 ID가 있습니다.
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()
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
의 트랙을 연결해야 합니다.
수신기에 보냅니다.
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()
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를 전달합니다. 이 예에서는
프랑스어 자막 및 프랑스어 오디오:
// 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 ) } })
// 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
님,
:
// 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 ) } })
remoteMediaClient.setTextTrackStyle(style) .setResultCallback(mediaChannelResult -> { if (!mediaChannelResult.getStatus().isSuccess()) { Log.e(TAG, "Failed to set the style, status code: " + mediaChannelResult.getStatus().getStatusCode()); } });
앱에서는 사용자가 시스템 또는 앱 자체에서 제공한 설정입니다. Android KitKat 이상에서 제공하는 시스템 전체 자막 설정을 사용할 수 있습니다. 프레임워크:
val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
TextTrackStyle textTrackStyle = TextTrackStyle.fromSystemSettings(context);
KitKat 이전 버전의 경우 위의 호출은 필드가 정의되지 않았으므로 앱에서 이 필드를 일부 기본값에 대해 설명합니다. 다음 텍스트에 스타일을 지정할 수 있습니다. 트랙 스타일 요소:
- 포그라운드 (텍스트) 색상 및 불투명도
- 배경 색상 및 불투명도
- 가장자리 유형
- 가장자리 색상
- 글꼴 배율
- 글꼴 모음
- 글꼴 스타일
예를 들어, 다음과 같이 텍스트 색상을 빨간색 (FF)으로 설정하고 불투명도 50%(80)를 설정합니다.
textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
textTrackStyle.setForegroundColor(Color.parseColor("#80FF0000"));
KitKat 이상 버전에서는 알림을 받으려면 앱을 등록해야 합니다.
시스템 전체 자막 설정이 업데이트될 때 이를 위해
구현하다
CaptioningManager.CaptioningChangeListener
드림
을 호출한 후 다음을 호출하여 이 리스너를 등록합니다.
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
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가 포함됩니다. 마지막 두 헤더는 이전에 필요 없었을 수 있는 추가 헤더가 있는 것을 볼 수 있습니다.