개요
구글의 Exoplayer는안드로이드를위한 오픈 소스, 응용 프로그램 수준의 미디어 플레이어입니다. Brightcove는 ExoPlayer를 활용하여 제공하는 이점을 활용합니다. ExoPlayer로 업그레이드 할 때의 이점에 대한 자세한 내용은 ExoPlayer 2가 포함 된 Brightcove 네이티브 SDK블로그 게시물.
다음 프로젝트 유형에 대해 마이그레이션하는 방법을 알아 봅니다.
참조 ExoPlayer 샘플 애플리케이션통합에 대한 추가 지침은 ExoPlayer 2프로젝트에 프레임 워크를 추가합니다.
새로운 프로젝트
ExoPlayer 2를 새 Android 프로젝트에 추가하려면 다음 단계를 따르십시오.
- 당신의 build.gradle파일에 다음 종속성을 추가하십시오.
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
- 설정
transitive
옵션true
오프라인 재생 플러그인과 같은 다른 종속성을 자동으로 포함하도록 gradle에 지시합니다. 5 미만의 Gradle 버전을 사용하는 경우전 이적 종속성기본적으로 꺼져 있습니다. 따라서 다음 문을 추가해야합니다.dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- SDK 버전에 대한 환경 변수를 사용하는 경우 gradle.properties파일을 열고 Android 용 Native SDK의 현재 버전 값을 설정합니다. 다음과 유사해야합니다.
anpVersion=6.5.0
기존 ExoPlayer 1 프로젝트
ExoPlayer 2 프레임 워크를 사용하도록 기존 ExoPlayer 1 프로젝트를 업데이트하려면 다음 단계를 따르십시오.
- 당신의 constants.gradle파일에서 Android 빌드 도구 버전을 업데이트합니다.
buildToolsVersion "28.0.2"
- 당신의 build.gradle파일, Android 지원 라이브러리 업데이트 :
implementation 'com.android.support:appcompat-v7:${APPCOMPAT_V7_VERSION}' implementation 'com.android.support:support-v4:${SUPPORT_V4_VERSION}' implementation 'com.android.support:recyclerview-v7:${SUPPORT_V4_VERSION}' implementation 'com.android.support:support-vector-drawable:${SUPPORT_V4_VERSION}'
상수의 현재 값은 constants.gradle파일.
- 당신의 build.gradle파일에서 Google Maven 저장소를 추가합니다.
maven { url 'https://maven.google.com' }
- 프로젝트에서 Google IMA로 광고를 사용하는 경우 Google Play 서비스 광고를 업데이트하세요.
implementation 'com.google.android.gms:play-services-ads:'+PLAY_SERVICES_VERSION
- 당신의 build.gradle이전에 Brightcove ExoPlayer 라이브러리를 다음과 같은 종속성으로 가져온 파일입니다.
dependencies { implementation "com.brightcove.player:exoplayer:${anpVersion}" }
종속성의 이름을 변경하십시오.
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
Brightcove SDK 버전의 현재 값 (
anpVersion
)는 gradle.properties파일. - 설정
transitive
옵션true
오프라인 재생 플러그인과 같은 다른 종속성을 자동으로 포함하도록 gradle에 지시합니다. 5 미만의 Gradle 버전을 사용하는 경우전 이적 종속성기본적으로 꺼져 있습니다. 따라서 다음을 추가해야합니다.dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- SDK 버전에 대한 환경 변수를 사용하는 경우 gradle.properties파일을 열고 Android 용 Native SDK의 현재 버전 값을 설정합니다. 다음과 유사해야합니다.
anpVersion=6.5.0
ExoPlayer 2를 프로젝트에 통합하는 데 추가 코딩이 필요하지 않습니다.
기존 MediaPlayer 프로젝트
ExoPlayer 2 프레임 워크를 사용하도록 기존 MediaPlayer 프로젝트를 업데이트하려면 다음 단계를 따르십시오.
- 당신의 build.gradle파일에 다음 종속성을 추가하십시오.
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
- 설정
transitive
옵션true
오프라인 재생 플러그인과 같은 다른 종속성을 자동으로 포함하도록 gradle에 지시합니다. 5 미만의 Gradle 버전을 사용하는 경우전 이적 종속성기본적으로 꺼져 있습니다. 따라서 다음을 추가해야합니다.dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- SDK 버전에 대한 환경 변수를 사용하는 경우 gradle.properties파일을 열고 Android 용 Native SDK의 현재 버전 값을 설정합니다. 다음과 유사해야합니다.
anpVersion=6.5.0
- 앱에서 BrightcoveExoPlayerVideoView대신 BrightcoveVideoView , Android Media Player를 사용합니다.
브레이킹 체인지
Android 용 Brightcove Native SDK에 대한 다음 변경 사항은 ExoPlayer 2의 주요 변경 사항입니다. ExoPlayer 1의 사용은 Brightcove Native SDK에서 더 이상 사용되지 않습니다.
ExoPlayerVideoDisplayComponent 내부 리스너
그만큼ExoPlayerVideoDisplayComponent
클래스를 사용하면 ExoPlayer 구성 요소의 상태를 가져 오도록 리스너를 설정할 수 있습니다. 다음은 청취자 목록입니다.
리스너 설정 | 에 대한 상태 정보 받기 |
---|---|
setDebugListener | InfoListener |
setCaptionListener | 캡션 리스너 |
setMetadataListener | MetadataListener |
setInternalErrorListener | InternalErrorListener |
다음은 ExoPlayer 2 사용에 대한 권장 사항입니다.
InfoListener
에 대한InfoListener
인터페이스에서 다음과 같이 변경되었습니다.
- 그만큼
onAvailableRangeChanged
방법이 제거되었습니다. - 그만큼
onLoadStarted
방법에는 추가length
매개 변수
예: ExoPlayer 2를 사용하는 ExoPlayerVideoDisplayComponent
public interface InfoListener {
void onVideoFormatEnabled(Format format, int trigger, long mediaTimeMs);
void onAudioFormatEnabled(Format format, int trigger, long mediaTimeMs);
void onDroppedFrames(int count, long elapsed);
void onBandwidthSample(int elapsedMs, long bytes, long bitrateEstimate);
void onLoadStarted(int sourceId, int type, int trigger, Format format,
long mediaStartTimeMs, long mediaEndTimeMs);
void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format,
long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs);
void onDecoderInitialized(String decoderName, long initializedTimestampMs,
long initializationDurationMs);
}
캡션 리스너
그만큼CaptionListener
인터페이스는 변경되지 않습니다.
예: ExoPlayer v2를 사용하는 ExoPlayerVideoDisplayComponent
public interface CaptionListener {
void onCues(List<Cue> cues);
}
MetadataListener
그만큼MetadataListener
인터페이스는 ExoPlayer v2에서 도입되었습니다. 의 이전 사용Id3MetadataListener
이제 더 이상 사용되지 않습니다.
예: ExoPlayer v2를 사용하는 ExoPlayerVideoDisplayComponent
public interface MetadataListener {
void onMetadata(Metadata metadata);
}
새로운MetadataListener
당신은Metadadata
의 개체onMetadata
콜백. 사용되지 않는Id3MetadataListener
, Id3Frame 개체 목록을 받았습니다. 새 리스너를 사용하면 여전히 목록을 얻을 수 있습니다. Id3Frame
아래와 같이 개체 :
exoPlayerVideoDisplayComponent.setMetadataListener(new ExoPlayerVideoDisplayComponent.MetadataListener() {
@Override
public void onMetadata(Metadata metadata) {
for(int i = 0; i < metadata.length(); i++) {
Metadata.Entry entry = metadata.get(i);
if (entry instanceof Id3Frame) {
Id3Frame id3Frame = (Id3Frame) entry;
}
}
}
});
InternalErrorListener
그만큼InternalErrorListener
인터페이스에는 많은 변화가 있습니다. 비교를 위해 아래 코드를 확인하십시오.
ExoPlayer v2를 사용하는 ExoPlayerVideoDisplayComponent
public interface InternalErrorListener {
void onPlayerError(Exception e);
void onAudioTrackUnderrun(int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs);
void onLoadError(int sourceId, IOException e);
void onDrmSessionManagerError(Exception e);
}
ExoPlayer v1을 사용하는 ExoPlayerVideoDisplayComponent ( 비추천 )
public interface InternalErrorListener {
void onRendererInitializationError(Exception e);
void onAudioTrackInitializationError(AudioTrack.InitializationException e);
void onAudioTrackWriteError(AudioTrack.WriteException e);
void onAudioTrackUnderrun(int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs);
void onDecoderInitializationError(MediaCodecTrackRenderer.DecoderInitializationException e);
void onCryptoError(MediaCodec.CryptoException e);
void onLoadError(int sourceId, IOException e);
void onDrmSessionManagerError(Exception e);
}
ExoPlayer 2를 사용할 때 발생하는 예외 유형onPlayerError(Exception e)
이다com.google.android.exoplayer2.ExoPlaybackException
, 그러나 이는 향후 변경 될 수 있습니다.
com.google.android.exoplayer2.ExoPlaybackException을 사용하면 다음과 같은 예외 유형을 얻을 수 있습니다.
ExoPlaybackException.TYPE_SOURCE
ExoPlaybackException.TYPE_RENDERER
ExoPlaybackException.TYPE_UNEXPECTED
또한 오류의 원인을 검색 할 수 있습니다. Throwable
객체ExoPlaybackException.getSourceException()
.
오프라인 재생 지원
프로젝트가MediaDownloadable.setConfigurationBundle(Bundle)
방법을 사용하여 비디오 비트 전송률과 같은 다운로드 기본 설정을 지정하고 다음과 같이 코드를 업데이트하십시오.
이전 형식 (지원 중단됨)
com.google.android.exoplayer.MediaFormat
새로운 형식
com.brightcove.player.model.MediaFormat
레거시 미디어 API 클래스
더 이상 사용되지 않는 레거시 미디어 API 클래스는com.brightcove.player.media package
, Android 용 Brightcove Native SDK에서 제거되었습니다.
미디어 클래스를 사용 중이라면 마이그레이션하고 사용을 시작해야합니다. com.brightcove.player.edge.Catalog
수업.
다음 클래스가에서 이동되었습니다. com.brightcove.player.media
...에com.brightcove.player.model
:
DeliveryType.java
CaptionType.java
ErrorFields.java
VideoFields.java
추가 자료
ExoPlayer 2 프레임 워크 사용에 대한 자세한 내용은 다음 문서를 참조하십시오.