ExopLayer 2 프레임워크로 마이그레이션

이 항목에서는 Android 용 Brightcove Native Player SDK와 함께 ExoPlayer 2 프레임 워크를 사용하는 방법을 알아 봅니다.

개요

구글의 Exoplayer는안드로이드를위한 오픈 소스, 응용 프로그램 수준의 미디어 플레이어입니다. Brightcove는 ExoPlayer를 활용하여 제공하는 이점을 활용합니다. ExoPlayer로 업그레이드 할 때의 이점에 대한 자세한 내용은 ExoPlayer 2가 포함 된 Brightcove 네이티브 SDK블로그 게시물.

다음 프로젝트 유형에 대해 마이그레이션하는 방법을 알아 봅니다.

참조 ExoPlayer 샘플 애플리케이션통합에 대한 추가 지침은 ExoPlayer 2프로젝트에 프레임 워크를 추가합니다.

새로운 프로젝트

ExoPlayer 2를 새 Android 프로젝트에 추가하려면 다음 단계를 따르십시오.

  1. 당신의 build.gradle파일에 다음 종속성을 추가하십시오.
    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}"
    }
  2. 설정transitive옵션true오프라인 재생 플러그인과 같은 다른 종속성을 자동으로 포함하도록 gradle에 지시합니다. 5 미만의 Gradle 버전을 사용하는 경우전 이적 종속성기본적으로 꺼져 있습니다. 따라서 다음 문을 추가해야합니다.
    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true}
    }
  3. SDK 버전에 대한 환경 변수를 사용하는 경우 gradle.properties파일을 열고 Android 용 Native SDK의 현재 버전 값을 설정합니다. 다음과 유사해야합니다.
    anpVersion=6.5.0

기존 ExoPlayer 1 프로젝트

ExoPlayer 2 프레임 워크를 사용하도록 기존 ExoPlayer 1 프로젝트를 업데이트하려면 다음 단계를 따르십시오.

  1. 당신의 constants.gradle파일에서 Android 빌드 도구 버전을 업데이트합니다.
    buildToolsVersion "28.0.2"
    
  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파일.

  3. 당신의 build.gradle파일에서 Google Maven 저장소를 추가합니다.
    maven {
      url 'https://maven.google.com'
    }
    
  4. 프로젝트에서 Google IMA로 광고를 사용하는 경우 Google Play 서비스 광고를 업데이트하세요.
    implementation 'com.google.android.gms:play-services-ads:'+PLAY_SERVICES_VERSION
    
  5. 당신의 build.gradle이전에 Brightcove ExoPlayer 라이브러리를 다음과 같은 종속성으로 가져온 파일입니다.
    dependencies {
      implementation "com.brightcove.player:exoplayer:${anpVersion}"
    }
    

    종속성의 이름을 변경하십시오.

    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}"
    }
    

    Brightcove SDK 버전의 현재 값 ( anpVersion )는 gradle.properties파일.

  6. 설정transitive옵션true오프라인 재생 플러그인과 같은 다른 종속성을 자동으로 포함하도록 gradle에 지시합니다. 5 미만의 Gradle 버전을 사용하는 경우전 이적 종속성기본적으로 꺼져 있습니다. 따라서 다음을 추가해야합니다.
    dependencies {
    	implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true}
    }
  7. SDK 버전에 대한 환경 변수를 사용하는 경우 gradle.properties파일을 열고 Android 용 Native SDK의 현재 버전 값을 설정합니다. 다음과 유사해야합니다.
    anpVersion=6.5.0

    ExoPlayer 2를 프로젝트에 통합하는 데 추가 코딩이 필요하지 않습니다.

기존 MediaPlayer 프로젝트

ExoPlayer 2 프레임 워크를 사용하도록 기존 MediaPlayer 프로젝트를 업데이트하려면 다음 단계를 따르십시오.

  1. 당신의 build.gradle파일에 다음 종속성을 추가하십시오.
    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}"
    }
  2. 설정transitive옵션true오프라인 재생 플러그인과 같은 다른 종속성을 자동으로 포함하도록 gradle에 지시합니다. 5 미만의 Gradle 버전을 사용하는 경우전 이적 종속성기본적으로 꺼져 있습니다. 따라서 다음을 추가해야합니다.
    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true}
    }
  3. SDK 버전에 대한 환경 변수를 사용하는 경우 gradle.properties파일을 열고 Android 용 Native SDK의 현재 버전 값을 설정합니다. 다음과 유사해야합니다.
    anpVersion=6.5.0
  4. 앱에서 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 프레임 워크 사용에 대한 자세한 내용은 다음 문서를 참조하십시오.